bump_zed_version.yml

  1# Generated from xtask::workflows::bump_zed_version
  2# Rebuild with `cargo xtask workflows`.
  3name: bump_zed_version
  4on:
  5  workflow_dispatch:
  6    inputs:
  7      target:
  8        description: 'Which channels to bump: all, main, preview, or stable'
  9        type: string
 10        default: all
 11jobs:
 12  resolve_versions:
 13    if: github.repository_owner == 'zed-industries'
 14    runs-on: namespace-profile-16x32-ubuntu-2204
 15    steps:
 16    - id: generate-token
 17      name: steps::authenticate_as_zippy
 18      uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859
 19      with:
 20        app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
 21        private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
 22    - name: steps::checkout_repo
 23      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
 24      with:
 25        clean: false
 26        ref: main
 27        token: ${{ steps.generate-token.outputs.token }}
 28    - id: versions
 29      name: bump_zed_version::resolve_versions::extract_versions
 30      run: |
 31        version=$(script/get-crate-version zed)
 32        major=$(echo "$version" | cut -d. -f1)
 33        minor=$(echo "$version" | cut -d. -f2)
 34
 35        channel=$(cat crates/zed/RELEASE_CHANNEL)
 36        if [[ "$channel" != "dev" && "$channel" != "nightly" ]]; then
 37            echo "::error::release channel on main should be dev or nightly, found: $channel"
 38            exit 1
 39        fi
 40
 41        # Next main version after bump
 42        next_version="${major}.$((minor + 1)).0"
 43        next_major=$(echo "$next_version" | cut -d. -f1)
 44        next_minor=$(echo "$next_version" | cut -d. -f2)
 45        pr_branch="bump-zed-to-v${next_major}.${next_minor}.0"
 46
 47        # New preview branch from current main
 48        preview_branch="v${major}.${minor}.x"
 49        preview_tag="v${version}-pre"
 50
 51        # Current preview to promote to stable — derive branch from released preview version
 52        released_preview=$(script/get-released-version preview)
 53        if [[ -z "$released_preview" ]]; then
 54            echo "::error::could not determine released preview version"
 55            exit 1
 56        fi
 57        stable_major=$(echo "$released_preview" | cut -d. -f1)
 58        stable_minor=$(echo "$released_preview" | cut -d. -f2)
 59        stable_branch="v${stable_major}.${stable_minor}.x"
 60
 61        # Final validation
 62        for var in next_version pr_branch preview_branch preview_tag stable_branch; do
 63            if [[ -z "${!var}" ]]; then
 64                echo "::error::failed to compute $var"
 65                exit 1
 66            fi
 67        done
 68
 69        {
 70            echo "next_version=$next_version"
 71            echo "pr_branch=$pr_branch"
 72            echo "preview_branch=$preview_branch"
 73            echo "preview_tag=$preview_tag"
 74            echo "stable_branch=$stable_branch"
 75        } >> "$GITHUB_OUTPUT"
 76
 77        echo "Resolved: next=$next_version preview=$preview_branch($preview_tag) stable=$stable_branch pr=$pr_branch"
 78    outputs:
 79      next_version: ${{ steps.versions.outputs.next_version }}
 80      pr_branch: ${{ steps.versions.outputs.pr_branch }}
 81      preview_branch: ${{ steps.versions.outputs.preview_branch }}
 82      preview_tag: ${{ steps.versions.outputs.preview_tag }}
 83      stable_branch: ${{ steps.versions.outputs.stable_branch }}
 84  bump_main:
 85    needs:
 86    - resolve_versions
 87    if: inputs.target == 'all' || inputs.target == 'main'
 88    runs-on: namespace-profile-16x32-ubuntu-2204
 89    steps:
 90    - id: generate-token
 91      name: steps::authenticate_as_zippy
 92      uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859
 93      with:
 94        app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
 95        private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
 96    - name: steps::checkout_repo
 97      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
 98      with:
 99        clean: false
100        ref: main
101        token: ${{ steps.generate-token.outputs.token }}
102    - name: steps::install_cargo_edit
103      uses: taiki-e/install-action@02cc5f8ca9f2301050c0c099055816a41ee05507
104      with:
105        tool: cargo-edit
106    - name: bump_zed_version::bump_main::bump_version
107      run: cargo set-version -p zed --bump minor
108    - name: steps::create_pull_request
109      uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725
110      with:
111        title: Bump Zed to v${{ needs.resolve_versions.outputs.next_version }}
112        body: |-
113          Release Notes:
114
115          - N/A
116        commit-message: Bump Zed to v${{ needs.resolve_versions.outputs.next_version }}
117        branch: ${{ needs.resolve_versions.outputs.pr_branch }}
118        committer: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
119        author: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
120        base: main
121        delete-branch: true
122        token: ${{ steps.generate-token.outputs.token }}
123        sign-commits: true
124        assignees: ${{ github.actor }}
125  create_preview_branch:
126    needs:
127    - resolve_versions
128    if: inputs.target == 'all' || inputs.target == 'preview'
129    runs-on: namespace-profile-16x32-ubuntu-2204
130    steps:
131    - id: generate-token
132      name: steps::authenticate_as_zippy
133      uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859
134      with:
135        app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
136        private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
137    - name: steps::checkout_repo
138      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
139      with:
140        clean: false
141        ref: main
142        token: ${{ steps.generate-token.outputs.token }}
143    - id: main-sha
144      name: bump_zed_version::create_preview_branch::get_main_sha
145      run: echo "main_sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
146    - name: bump_zed_version::create_preview_branch::promote_to_preview
147      run: echo -n preview > crates/zed/RELEASE_CHANNEL
148    - name: steps::create_branch
149      uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b
150      with:
151        script: |
152          github.rest.git.createRef({
153              owner: context.repo.owner,
154              repo: context.repo.repo,
155              ref: 'refs/heads/${{ needs.resolve_versions.outputs.preview_branch }}',
156              sha: '${{ steps.main-sha.outputs.main_sha }}'
157          })
158        github-token: ${{ steps.generate-token.outputs.token }}
159    - id: commit
160      name: steps::bot_commit
161      uses: IAreKyleW00t/verified-bot-commit@126a6a11889ab05bcff72ec2403c326cd249b84c
162      with:
163        message: ${{ needs.resolve_versions.outputs.preview_branch }} preview
164        ref: refs/heads/${{ needs.resolve_versions.outputs.preview_branch }}
165        files: crates/zed/RELEASE_CHANNEL
166        token: ${{ steps.generate-token.outputs.token }}
167    - name: steps::create_tag
168      uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b
169      with:
170        script: |
171          github.rest.git.createRef({
172              owner: context.repo.owner,
173              repo: context.repo.repo,
174              ref: 'refs/tags/${{ needs.resolve_versions.outputs.preview_tag }}',
175              sha: '${{ steps.commit.outputs.commit }}'
176          })
177        github-token: ${{ steps.generate-token.outputs.token }}
178  promote_to_stable:
179    needs:
180    - resolve_versions
181    if: inputs.target == 'all' || inputs.target == 'stable'
182    runs-on: namespace-profile-16x32-ubuntu-2204
183    steps:
184    - id: generate-token
185      name: steps::authenticate_as_zippy
186      uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859
187      with:
188        app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
189        private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
190    - name: steps::checkout_repo
191      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
192      with:
193        clean: false
194        ref: ${{ needs.resolve_versions.outputs.stable_branch }}
195        token: ${{ steps.generate-token.outputs.token }}
196    - id: stable-info
197      name: bump_zed_version::promote_to_stable
198      run: |
199        stable_version=$(script/get-crate-version zed)
200        {
201            echo "stable_tag=v${stable_version}"
202        } >> "$GITHUB_OUTPUT"
203    - name: bump_zed_version::promote_to_stable
204      run: echo -n stable > crates/zed/RELEASE_CHANNEL
205    - id: commit
206      name: steps::bot_commit
207      uses: IAreKyleW00t/verified-bot-commit@126a6a11889ab05bcff72ec2403c326cd249b84c
208      with:
209        message: ${{ needs.resolve_versions.outputs.stable_branch }} stable
210        ref: refs/heads/${{ needs.resolve_versions.outputs.stable_branch }}
211        files: crates/zed/RELEASE_CHANNEL
212        token: ${{ steps.generate-token.outputs.token }}
213    - name: steps::create_tag
214      uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b
215      with:
216        script: |
217          github.rest.git.createRef({
218              owner: context.repo.owner,
219              repo: context.repo.repo,
220              ref: 'refs/tags/${{ steps.stable-info.outputs.stable_tag }}',
221              sha: '${{ steps.commit.outputs.commit }}'
222          })
223        github-token: ${{ steps.generate-token.outputs.token }}
224defaults:
225  run:
226    shell: bash -euxo pipefail {0}