https://github.com/zed-industries/zed/actions/runs/25881329418 complains about the deprecation of Node.js version 20, which will soon be force-bumped to 24 in the runner contexts. Thus, this PR bumps all the jobs mentioned there to versions that run on Node.js 24 by default. I checked all the release note section for the three actions and this should not change any behaviour according to their release notes and get us ready for the deprecation. Release Notes: - N/A
316 lines
12 KiB
YAML
316 lines
12 KiB
YAML
# 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: 1fa7f1a3ec28ea1eae6db2e937d7a538fb10c0c7
|
|
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<<EOF";
|
|
echo "This PR bumps the version of the ${EXTENSION_NAME} extension to v${NEW_VERSION}.";
|
|
echo "";
|
|
echo "Release Notes:";
|
|
echo "";
|
|
echo "- N/A";
|
|
echo "EOF";
|
|
echo "branch_name=zed-zippy-${EXTENSION_ID}-autobump";
|
|
} >> "$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}
|