# When a release commit created by create-release.yml is landed, create the
# corresponding tag.
name: Create release tag

on:
  push:
    paths:
      - emscripten-releases-tags.json
      - .github/workflows/tag-release.yml
    branches:
      - main
  workflow_dispatch:

jobs:
  tag-release:
    # Only activate for commits created by the create-release.yml workflow.
    # The assumption is that when manual changes happen, we want to handle
    # tagging manually too.
    name: Check for release commit and create tag
    # The author is emscripten-bot when triggered from Chromium CI, and github-actions when manually triggered.
    if: ${{ github.event.head_commit.author.username == 'github-actions[bot]' || github.event.head_commit.author.username == 'emscripten-bot' }}
    runs-on: ubuntu-latest
    outputs:
      is_release: ${{ steps.create-tag.outputs.result }}
    steps:
      - name: Match message and create tag
        id: create-tag
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.EMSCRIPTEN_BOT_TOKEN }}
          # A commit with the message of the form 'Release X.Y.Z' is expected
          # to have been created by create_release.py and update the latest
          # release in emscripten-releases-tags.json
          script: |
            const message = `${{ github.event.head_commit.message }}`
            const regex = /Release ([0-9]+.[0-9]+.[0-9]+)/;
            const match = message.match(regex);
            let is_release = false;
            if (match) {
              const release = match[1];
              console.log(`Matched release ${release}`);
              await github.rest.git.createRef({
                owner: context.repo.owner,
                repo: context.repo.repo,
                ref: `refs/tags/${release}`,
                sha: context.sha
              });
              is_release = true;
            } else {
              console.log(`Commit message: '${message}' did not match pattern`);
            }
            return is_release;

  dispatch-emscripten-tag:
    name: Dispatch workflow to tag emscripten repo
    runs-on: ubuntu-latest
    needs: tag-release
    if: ${{ needs.tag-release.outputs.is_release == 'true' }}
    steps:
      - name: Checkout repo
        uses: actions/checkout@v4
      - name: Find emscripten revision
        # get_emscripten_revision_info.py sets env.EMSCRIPTEN_HASH to the
        # emscripten hash associated with the latest release in
        # emscripten-releases-tags.json
        run: python3 scripts/get_emscripten_revision_info.py
      - name: Dispatch emscripten workflow
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.EMSCRIPTEN_BOT_TOKEN }}
          script: |
            await github.rest.actions.createWorkflowDispatch({
              owner: context.repo.owner,
              repo: 'emscripten',
              workflow_id: 'tag-release.yml',
              ref: 'main',
              inputs: { 'release-sha': '${{ env.EMSCRIPTEN_HASH }}' }
            });
