---
name: Web validator

on:
  push:
    branches: [main, dev]
  pull_request:
    branches: [main, dev]
  release:
    types: [published]
  workflow_dispatch:
    inputs:
      deploy:
        description: Deploy to github-pages
        required: false
        type: boolean

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  test-build:
    if: ${{ github.event_name != 'release' && !inputs.deploy }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: denoland/setup-deno@v2
        with:
          deno-version: v2.x
      - run: deno task build
        working-directory: ./web
      - name: Upload GitHub Pages artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: web/dist

  build:
    if: ${{ github.event_name == 'release' || inputs.deploy }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout release/target
        uses: actions/checkout@v4
        with:
          # Stable is whatever we're releasing. Should generally
          # be the last release, but can be main.
          path: stable
      - name: Checkout dev
        uses: actions/checkout@v4
        with:
          ref: dev
          path: dev
      - uses: denoland/setup-deno@v2
        with:
          deno-version: v2.x
      - name: Build release/target
        run: deno task build
        working-directory: stable/web
      - name: Build dev
        run: deno task build
        working-directory: dev/web
      - name: Nest dev inside stable
        run: mv dev/web/dist stable/web/dist/dev
      - name: Add legacy/ redirect
        run: |
          mkdir $DIR
          echo '<html><meta http-equiv="refresh" content="0; URL='$URL'"></html>' > $DIR/index.html
        env:
          DIR: stable/web/dist/legacy
          URL: https://bids-standard.github.io/legacy-validator/
      - name: Upload GitHub Pages artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: stable/web/dist

  deploy:
    needs: build
    permissions:
      contents: read
      pages: write
      id-token: write
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4