# Generated from xtask::workflows::bump_patch_version
# Rebuild with `cargo xtask workflows`.
name: bump_patch_version
on:
  workflow_dispatch:
    inputs:
      branch:
        description: Branch name to run on
        required: true
        type: string
jobs:
  run_bump_patch_version:
    if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
    runs-on: namespace-profile-16x32-ubuntu-2204
    steps:
    - id: generate-token
      name: steps::authenticate_as_zippy
      uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859
      with:
        app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
        private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
    - name: steps::checkout_repo
      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
      with:
        clean: false
        ref: ${{ inputs.branch }}
        token: ${{ steps.generate-token.outputs.token }}
    - id: channel
      name: bump_patch_version::run_bump_patch_version::read_channel
      run: |
        channel="$(cat crates/zed/RELEASE_CHANNEL)"

        tag_suffix=""
        case $channel in
          stable)
            ;;
          preview)
            tag_suffix="-pre"
            ;;
          *)
            echo "::error::must be run on a stable or preview release branch"
            exit 1
            ;;
        esac

        version=$(script/get-crate-version zed)

        {
            echo "channel=$channel"
            echo "version=$version"
            echo "tag_suffix=$tag_suffix"
        } >> "$GITHUB_OUTPUT"
    - name: bump_patch_version::run_bump_patch_version::verify_prior_release_exists
      run: |
        status=$(curl -s -o /dev/null -w '%{http_code}' "https://cloud.zed.dev/releases/$CHANNEL/$VERSION/asset?asset=zed&os=macos&arch=aarch64")
        if [[ "$status" != "200" ]]; then
            echo "::error::version $VERSION has not been released on $CHANNEL yet (HTTP $status) — bump the patch version only after the current version is released"
            exit 1
        fi
      env:
        CHANNEL: ${{ steps.channel.outputs.channel }}
        VERSION: ${{ steps.channel.outputs.version }}
    - name: steps::install_cargo_edit
      uses: taiki-e/install-action@02cc5f8ca9f2301050c0c099055816a41ee05507
      with:
        tool: cargo-edit
    - id: bump-version
      name: bump_patch_version::run_bump_patch_version::bump_version
      run: |
        version="$(cargo set-version -p zed --bump patch 2>&1 | sed 's/.* //')"
        echo "version=$version" >> "$GITHUB_OUTPUT"
    - id: commit
      name: steps::bot_commit
      uses: IAreKyleW00t/verified-bot-commit@126a6a11889ab05bcff72ec2403c326cd249b84c
      with:
        message: Bump to ${{ steps.bump-version.outputs.version }} for @${{ github.actor }}
        ref: refs/heads/${{ inputs.branch }}
        files: '**'
        token: ${{ steps.generate-token.outputs.token }}
    - name: steps::create_tag
      uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b
      with:
        script: |
          github.rest.git.createRef({
              owner: context.repo.owner,
              repo: context.repo.repo,
              ref: 'refs/tags/v${{ steps.bump-version.outputs.version }}${{ steps.channel.outputs.tag_suffix }}',
              sha: '${{ steps.commit.outputs.commit }}'
          })
        github-token: ${{ steps.generate-token.outputs.token }}
concurrency:
  group: ${{ github.workflow }}-${{ inputs.branch }}
  cancel-in-progress: true
defaults:
  run:
    shell: bash -euxo pipefail {0}
