# This action builds and deploys egui_demo_app on each pull request created
# Security notes:
# The preview deployment is split in two workflows, preview_build and preview_deploy.
# `preview_build` runs on pull_request, so it won't have any access to the repositories secrets, so it is safe to
# build / execute untrusted code.
# `preview_deploy` has access to the repositories secrets (so it can push to the pr preview repo) but won't run
# any untrusted code (it will just extract the build artifact and push it to the pages branch where it will
# automatically be deployed).

name: Preview Build

on:
  - pull_request

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 60
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: 1.95.0
          targets: wasm32-unknown-unknown
      - uses: Swatinem/rust-cache@v2
        with:
          prefix-key: "pr-preview-"

      - name: Install wasm-opt
        uses: sigoden/install-binary@v1
        with:
          repo: WebAssembly/binaryen
          tag: version_123
          name: wasm-opt

      - run: |
          scripts/build_demo_web.sh --release

      - name: Remove gitignore file
        # We need to remove the .gitignore, otherwise the deploy via git will not include the js and wasm files
        run: |
          rm -rf web_demo/.gitignore

      - uses: actions/upload-artifact@v4
        with:
          name: web_demo
          path: web_demo

      - name: Generate meta.json
        env:
          PR_NUMBER: ${{ github.event.number }}
          URL_SLUG: ${{ github.event.number }}-${{ github.head_ref }}
        run: |
          # Sanitize the URL_SLUG to only contain alphanumeric characters and dashes
          URL_SLUG=$(echo $URL_SLUG | tr -cd '[:alnum:]-')
          echo "{\"pr_number\": \"$PR_NUMBER\", \"url_slug\": \"$URL_SLUG\"}" > meta.json

      - uses: actions/upload-artifact@v4
        with:
          name: meta.json
          path: meta.json
