|
@@ -0,0 +1,99 @@
|
|
|
|
+name: Export projects to HTML5 and deploy to GitHub Pages
|
|
|
|
+on:
|
|
|
|
+ push:
|
|
|
|
+ branches:
|
|
|
|
+ - master
|
|
|
|
+
|
|
|
|
+env:
|
|
|
|
+ GODOT_VERSION: 3.2.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.2.3
|
|
|
|
+ steps:
|
|
|
|
+ - name: Checkout
|
|
|
|
+ uses: actions/[email protected]
|
|
|
|
+
|
|
|
|
+ - 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/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 "<li><a href='$demo'><img width="64" height="64" src="$demo/favicon.png" alt=""> $PROJECT_NAME</a></li>" >> "$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
|