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

  • " >> "$BASEDIR/.github/dist/demos.html" done cat "$BASEDIR/.github/dist/header.html" "$BASEDIR/.github/dist/demos.html" "$BASEDIR/.github/dist/footer.html" > "$BASEDIR/.github/dist/index.html" # Clean up files that don't need to be deployed. rm -f "$BASEDIR/.github/dist/header.html" "$BASEDIR/.github/dist/demos.html" "$BASEDIR/.github/dist/footer.html" "$BASEDIR/.github/dist/export_presets.cfg" # Installing rsync is needed in order to deploy to GitHub Pages. Without it, the build will fail. - name: Install rsync 📚 run: | apt-get update -qq && apt-get install -qqq rsync - name: Deploy to GitHub Pages 🚀 uses: JamesIves/github-pages-deploy-action@releases/v3 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # The branch the action should deploy to. BRANCH: gh-pages # The folder the action should deploy. FOLDER: .github/dist # Artifacts are large; don't keep the branch's history. SINGLE_COMMIT: true