name: Export projects to HTML5 and deploy to GitHub Pages on: push: branches: - master env: GODOT_VERSION: 3.3.3 jobs: export-html5: name: Export projects to HTML5 and deploy to GitHub Pages runs-on: ubuntu-20.04 container: image: barichello/godot-ci:3.3.3 steps: - name: Checkout uses: actions/checkout@v3 - name: Setup run: | mkdir -p ~/.local/share/godot/templates/ mv /root/.local/share/godot/templates/$GODOT_VERSION.stable ~/.local/share/godot/templates/$GODOT_VERSION.stable - name: Export projects to HTML5 run: | apt-get update -qq && apt-get install -qqq imagemagick # Don't export Mono demos (not supported yet), demos that can't be run in HTML5 # since they're platform-specific or demos that are currently broken in HTML5. # Remember to update `.github/dist/footer.html` when updating the list of excluded demos. rm -rf \ 2d/hdr/ \ 3d/global_illumination/ \ 3d/voxel/ \ audio/device_changer/ \ loading/background_load/ \ loading/multiple_threads_loading/ \ loading/threads/ \ misc/matrix_transform/ \ mobile/android_iap/ \ mobile/sensors/ \ mono/ \ networking/ \ plugins/ for panorama in 3d/material_testers/backgrounds/*.hdr; do # Decrease the resolution to get below the 20 MB per-file limit. # Otherwise, the website can't be deployed as files larger than 20 MB # can't be pushed to GitHub anymore. mogrify -resize 75% "$panorama" done BASEDIR="$PWD" # Use absolute paths so that we can `cd` without having to go back to the parent directory manually. for demo in */*/; do echo "" echo "================================" echo "Exporting demo $demo..." echo "================================" mkdir -p "$BASEDIR/.github/dist/$demo" cd "$BASEDIR/$demo" # Copy an export template preset file configured for HTML5 exporting. # This way, we don't have to commit `export_presets.cfg` for each project. cp "$BASEDIR/.github/dist/export_presets.cfg" . godot --export "HTML5" "$BASEDIR/.github/dist/$demo/index.html" # Replace the WASM file with a symbolic link to avoid duplicating files in the pushed branch. # (WASM files are identical across projects, but not PCK or HTML files.) mv -f "$BASEDIR/.github/dist/$demo/index.wasm" "$BASEDIR/.github/dist/index.wasm" # The symlink must be relative as it needs to point to a file within the pushed repository. ln -s "../../index.wasm" "$BASEDIR/.github/dist/$demo/index.wasm" # Append the demo to the list of demos for the website. PROJECT_NAME=$(cat project.godot | grep "config/name" | cut -d '"' -f 2 | tr -d "\n") echo "
$PROJECT_NAME