# Generated from xtask::workflows::extension_bump # Rebuild with `cargo xtask workflows`. name: extension_bump env: CARGO_TERM_COLOR: always RUST_BACKTRACE: '1' CARGO_INCREMENTAL: '0' ZED_EXTENSION_CLI_SHA: 2a00db06ce6d01089bfafd207b6348078e980df9 on: workflow_call: inputs: bump-type: description: bump-type type: string default: patch force-bump: description: force-bump required: true type: boolean working-directory: description: working-directory type: string default: . secrets: app-id: description: The app ID used to create the PR required: true app-secret: description: The app secret for the corresponding app ID required: true jobs: check_version_changed: if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions') runs-on: namespace-profile-2x4-ubuntu-2404 steps: - name: steps::checkout_repo uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd with: clean: false fetch-depth: 0 - id: compare-versions-check name: extension_bump::compare_versions run: | CURRENT_VERSION="$(sed -n 's/^version = \"\(.*\)\"/\1/p' < extension.toml | tr -d '[:space:]')" if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then PR_FORK_POINT="$(git merge-base origin/main HEAD)" git checkout "$PR_FORK_POINT" else git checkout "$(git log -1 --format=%H)"~1 fi PARENT_COMMIT_VERSION="$(sed -n 's/^version = \"\(.*\)\"/\1/p' < extension.toml | tr -d '[:space:]')" [[ "$CURRENT_VERSION" == "$PARENT_COMMIT_VERSION" ]] && \ echo "version_changed=false" >> "$GITHUB_OUTPUT" || \ echo "version_changed=true" >> "$GITHUB_OUTPUT" echo "current_version=${CURRENT_VERSION}" >> "$GITHUB_OUTPUT" outputs: version_changed: ${{ steps.compare-versions-check.outputs.version_changed }} current_version: ${{ steps.compare-versions-check.outputs.current_version }} timeout-minutes: 1 defaults: run: shell: bash -euxo pipefail {0} working-directory: ${{ inputs.working-directory }} bump_extension_version: needs: - check_version_changed if: |- (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions') && (inputs.force-bump == true || needs.check_version_changed.outputs.version_changed == 'false') runs-on: namespace-profile-2x4-ubuntu-2404 steps: - id: generate-token name: steps::generate_token uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 with: app-id: ${{ secrets.app-id }} private-key: ${{ secrets.app-secret }} - name: steps::checkout_repo uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd with: clean: false - name: steps::cache_rust_dependencies_namespace uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 with: cache: rust path: ~/.rustup - name: extension_bump::install_bump_2_version run: pip install bump2version --break-system-packages - id: bump-version name: extension_bump::bump_version run: | BUMP_FILES=("extension.toml") if [[ -f "Cargo.toml" ]]; then BUMP_FILES+=("Cargo.toml") fi bump2version \ --search "version = \"{current_version}"\" \ --replace "version = \"{new_version}"\" \ --current-version "$OLD_VERSION" \ --no-configured-files "$BUMP_TYPE" "${BUMP_FILES[@]}" if [[ -f "Cargo.toml" ]]; then cargo +stable update --workspace fi NEW_VERSION="$(sed -n 's/^version = \"\(.*\)\"/\1/p' < extension.toml | tr -d '[:space:]')" EXTENSION_ID="$(sed -n 's/^id = "\(.*\)"/\1/p' < extension.toml | head -1 | tr -d '[:space:]')" EXTENSION_NAME="$(sed -n 's/^name = "\(.*\)"/\1/p' < extension.toml | head -1 | tr -d '[:space:]')" if [[ "$WORKING_DIR" == "." || -z "$WORKING_DIR" ]]; then { echo "title=Bump version to ${NEW_VERSION}"; echo "body=This PR bumps the version of this extension to v${NEW_VERSION}"; echo "branch_name=zed-zippy-autobump"; } >> "$GITHUB_OUTPUT" else { echo "title=${EXTENSION_ID}: Bump to v${NEW_VERSION}"; echo "body<> "$GITHUB_OUTPUT" fi echo "new_version=${NEW_VERSION}" >> "$GITHUB_OUTPUT" env: OLD_VERSION: ${{ needs.check_version_changed.outputs.current_version }} BUMP_TYPE: ${{ inputs.bump-type }} WORKING_DIR: ${{ inputs.working-directory }} - name: steps::create_pull_request uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 with: title: ${{ steps.bump-version.outputs.title }} body: ${{ steps.bump-version.outputs.body }} commit-message: ${{ steps.bump-version.outputs.title }} branch: ${{ steps.bump-version.outputs.branch_name }} committer: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com> author: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com> base: main delete-branch: true token: ${{ steps.generate-token.outputs.token }} sign-commits: true assignees: ${{ github.actor }} timeout-minutes: 5 defaults: run: shell: bash -euxo pipefail {0} working-directory: ${{ inputs.working-directory }} create_version_label: needs: - check_version_changed if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions') && github.event_name == 'push' && github.ref == 'refs/heads/main' && needs.check_version_changed.outputs.version_changed == 'true' runs-on: namespace-profile-2x4-ubuntu-2404 steps: - id: generate-token name: steps::generate_token uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 with: app-id: ${{ secrets.app-id }} private-key: ${{ secrets.app-secret }} - name: steps::checkout_repo uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd with: clean: false - id: determine-tag name: extension_bump::determine_tag run: | EXTENSION_ID="$(sed -n 's/^id = "\(.*\)"/\1/p' < extension.toml | head -1 | tr -d '[:space:]')" if [[ "$WORKING_DIR" == "." || -z "$WORKING_DIR" ]]; then TAG="v${CURRENT_VERSION}" else TAG="${EXTENSION_ID}-v${CURRENT_VERSION}" fi echo "tag=${TAG}" >> "$GITHUB_OUTPUT" env: CURRENT_VERSION: ${{ needs.check_version_changed.outputs.current_version }} WORKING_DIR: ${{ inputs.working-directory }} - 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/${{ steps.determine-tag.outputs.tag }}', sha: context.sha }) github-token: ${{ steps.generate-token.outputs.token }} outputs: tag: ${{ steps.determine-tag.outputs.tag }} timeout-minutes: 1 defaults: run: shell: bash -euxo pipefail {0} working-directory: ${{ inputs.working-directory }} trigger_release: needs: - check_version_changed - create_version_label if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions') runs-on: namespace-profile-2x4-ubuntu-2404 steps: - id: generate-token name: steps::generate_token uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 with: app-id: ${{ secrets.app-id }} private-key: ${{ secrets.app-secret }} owner: zed-industries repositories: extensions - name: steps::checkout_repo uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd with: clean: false - id: get-extension-id name: extension_bump::get_extension_id run: | EXTENSION_ID="$(sed -n 's/id = \"\(.*\)\"/\1/p' < extension.toml)" echo "extension_id=${EXTENSION_ID}" >> "$GITHUB_OUTPUT" - id: extension-update name: extension_bump::release_action uses: huacnlee/zed-extension-action@82920ff0876879f65ffbcfa3403589114a8919c6 with: extension-name: ${{ steps.get-extension-id.outputs.extension_id }} push-to: zed-industries/extensions tag: ${{ needs.create_version_label.outputs.tag }} env: COMMITTER_TOKEN: ${{ steps.generate-token.outputs.token }} - name: enable_automerge_if_staff uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b with: script: | const prNumber = process.env.PR_NUMBER; if (!prNumber) { console.log('No pull request number set, skipping automerge.'); return; } const author = process.env.GITHUB_ACTOR; let isStaff = false; try { const response = await github.rest.teams.getMembershipForUserInOrg({ org: 'zed-industries', team_slug: 'staff', username: author }); isStaff = response.data.state === 'active'; } catch (error) { if (error.status !== 404) { throw error; } } if (!isStaff) { console.log(`Actor ${author} is not a staff member, skipping automerge.`); return; } // Assign staff member responsible for the bump const pullNumber = parseInt(prNumber); await github.rest.issues.addAssignees({ owner: 'zed-industries', repo: 'extensions', issue_number: pullNumber, assignees: [author] }); console.log(`Assigned ${author} to PR #${prNumber} in zed-industries/extensions`); // Get the GraphQL node ID const { data: pr } = await github.rest.pulls.get({ owner: 'zed-industries', repo: 'extensions', pull_number: pullNumber }); await github.graphql(` mutation($pullRequestId: ID!) { enablePullRequestAutoMerge(input: { pullRequestId: $pullRequestId, mergeMethod: SQUASH }) { pullRequest { autoMergeRequest { enabledAt } } } } `, { pullRequestId: pr.node_id }); console.log(`Automerge enabled for PR #${prNumber} in zed-industries/extensions`); github-token: ${{ steps.generate-token.outputs.token }} env: PR_NUMBER: ${{ steps.extension-update.outputs.pull-request-number }} defaults: run: shell: bash -euxo pipefail {0} working-directory: ${{ inputs.working-directory }} concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.ref_name == 'main' && github.sha || 'anysha' }}extension-bump cancel-in-progress: true defaults: run: shell: bash -euxo pipefail {0}