name: migrations

on:
  push:
    branches:
      - main
  workflow_dispatch: {}

concurrency:
  group: migrations
  cancel-in-progress: false

jobs:
  wave-1-dev:
    runs-on: plan
    container: node:22
    steps:
      - uses: https://code.forgejo.org/actions/checkout@v7
        with:
          fetch-depth: 0
      - name: Plan, gate and apply wave 1 (dev)
        run: chant run wave --spec waves.json --wave 1
  wave-2-prod-decide:
    runs-on: plan
    needs:
      - wave-1-dev
    container: node:22
    steps:
      - uses: https://code.forgejo.org/actions/checkout@v7
        with:
          fetch-depth: 0
      - name: Plan wave 2 (prod) and decide its gate
        run: chant run wave --spec waves.json --wave 2 --decide
      - name: Keep wave 2's decision
        if: always()
        uses: https://code.forgejo.org/actions/upload-artifact@v3
        with:
          name: migrations-wave-2-decision
          path: .chant/op-waves/migrations/wave-2.json
          if-no-files-found: ignore
  wave-2-prod-us:
    runs-on:
      - self-hosted
      - us
    needs:
      - wave-2-prod-decide
    container: node:22
    permissions:
      id-token: write
    env:
      REGION: us
      CLOUD_TOKEN_AUDIENCE: us.example
    steps:
      - uses: https://code.forgejo.org/actions/checkout@v7
        with:
          fetch-depth: 0
      - name: Download wave 2's decision
        uses: https://code.forgejo.org/actions/download-artifact@v3
        with:
          name: migrations-wave-2-decision
          path: .chant/op-waves/migrations
      - name: Apply job group us of wave 2 (prod)
        run: chant run wave --spec waves.json --wave 2 --group us
  wave-2-prod-eu:
    runs-on: eu-apply
    needs:
      - wave-2-prod-decide
    container: node:22
    steps:
      - uses: https://code.forgejo.org/actions/checkout@v7
        with:
          fetch-depth: 0
      - name: Download wave 2's decision
        uses: https://code.forgejo.org/actions/download-artifact@v3
        with:
          name: migrations-wave-2-decision
          path: .chant/op-waves/migrations
      - name: Apply job group eu of wave 2 (prod)
        run: chant run wave --spec waves.json --wave 2 --group eu
