name: Bump the version on a release branch
on:
  workflow_dispatch:
    inputs:
      rc:
        description: "Is it a release candidate?"
        type: boolean
        default: false
      merge-back:
        description: "Should we merge back the release branch to main?"
        type: boolean
        default: true

jobs:
  compute-version:
    name: Compute the next version
    runs-on: ubuntu-24.04

    permissions:
      contents: read

    outputs:
      version: ${{ steps.next.outputs.version }}

    steps:
      - name: Fail the workflow if not on a release branch
        if: ${{ !startsWith(github.ref_name, 'release/v') }}
        run: exit 1

      - name: Checkout the code
        uses: actions/checkout@v4.2.2

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable

      - name: Extract the current version
        id: current
        run: echo "version=$(cargo metadata --format-version 1 --no-deps | jq -r '.packages[] | select(.name == "mas-cli") | .version')" >> "$GITHUB_OUTPUT"

      - name: Compute the new minor RC
        id: next
        env:
          BUMP: ${{ inputs.rc && 'prerelease' || 'patch' }}
          VERSION: ${{ steps.current.outputs.version }}
        run: echo "version=$(npx --yes semver@7.5.4 -i "$BUMP" --preid rc "$VERSION")" >> "$GITHUB_OUTPUT"

  tag:
    uses: ./.github/workflows/tag.yaml
    needs: [compute-version]
    with:
      version: ${{ needs.compute-version.outputs.version }}
    secrets:
      BOT_GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}

  merge-back:
    uses: ./.github/workflows/merge-back.yaml
    needs: [tag]
    if: inputs.merge-back
    with:
      sha: ${{ needs.tag.outputs.sha }}
    secrets:
      BOT_GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}

  update-branch:
    name: Update the release branch
    runs-on: ubuntu-24.04

    permissions:
      pull-requests: write

    needs: [tag, compute-version]
    steps:
      - name: Checkout the code
        uses: actions/checkout@v4.2.2
        with:
          sparse-checkout: |
            .github/scripts

      - name: Update the release branch
        uses: actions/github-script@v7.0.1
        env:
          BRANCH: "${{ github.ref_name }}"
          SHA: ${{ needs.tag.outputs.sha }}
        with:
          github-token: ${{ secrets.BOT_GITHUB_TOKEN }}
          script: |
            const script = require('./.github/scripts/update-release-branch.cjs');
            await script({ core, github, context });
