name: Deploy WASM to Pages

on:
  # Run on pushes to master or pull requests to master
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  # Build job
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
          fetch-depth: 0
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: 1.92.0
      - name: Install WASM target
        run: rustup target add wasm32-unknown-unknown
      - name: Build Termtris WASM
        run: |
          sudo apt-get install emscripten
          ./examples/wasm/termtris/build.sh
      - name: Build WASM
        run: cargo run --example wasm-examples --features=run-wasm build --out-dir ./target/website/
      - name: List WASM files
        run: find ./target/website/ -type f
      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v5
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./target/website/

  # Deployment job
  deploy:
    if: github.event_name != 'pull_request'
    # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
    permissions:
      contents: read
      pages: write
      id-token: write
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
