name: Release-plz
permissions:
id-token: write
on:
push:
branches: [main]
concurrency:
group: release-plz-${{ github.ref }}
cancel-in-progress: false
jobs:
release-plz-release:
name: Release-plz release
runs-on: ubuntu-latest
environment: release
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.RELEASE_PLZ_APP_ID }}
private-key: ${{ secrets.RELEASE_PLZ_APP_PRIVATE_KEY }}
- uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}
- uses: dtolnay/rust-toolchain@stable
- name: Authenticate with crates.io
uses: rust-lang/crates-io-auth-action@v1
id: auth
- name: Run release-plz (release)
uses: release-plz/action@v0.5
with:
command: release
env:
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
release-plz-pr:
name: Release-plz PR
runs-on: ubuntu-latest
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.RELEASE_PLZ_APP_ID }}
private-key: ${{ secrets.RELEASE_PLZ_APP_PRIVATE_KEY }}
- uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}
- uses: dtolnay/rust-toolchain@stable
- name: Run release-plz (release-pr)
id: release-plz
uses: release-plz/action@v0.5
with:
command: release-pr
env:
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
- name: Update plugin manifests in release PR
if: steps.release-plz.outputs.prs != ''
env:
PRS: ${{ steps.release-plz.outputs.prs }}
APP_SLUG: ${{ steps.app-token.outputs.app-slug }}
run: |
set -euo pipefail
BRANCH=$(echo "$PRS" | jq -r '.[0].head_branch')
if [ -z "$BRANCH" ] || [ "$BRANCH" = "null" ]; then
echo "No release PR branch; skipping plugin manifest sync."
exit 0
fi
git config user.name "${APP_SLUG}[bot]"
git config user.email "${APP_SLUG}[bot]@users.noreply.github.com"
git fetch origin "$BRANCH"
git checkout "$BRANCH"
VERSION=$(cargo metadata --no-deps --format-version 1 \
| jq -r '.packages[] | select(.name=="dsct") | .version')
jq --arg v "$VERSION" '.version = $v' \
.claude-plugin/plugin.json > .claude-plugin/plugin.json.tmp
mv .claude-plugin/plugin.json.tmp .claude-plugin/plugin.json
jq --arg v "$VERSION" '.plugins[].version = $v' \
.claude-plugin/marketplace.json > .claude-plugin/marketplace.json.tmp
mv .claude-plugin/marketplace.json.tmp .claude-plugin/marketplace.json
if ! git diff --quiet; then
git add .claude-plugin/plugin.json .claude-plugin/marketplace.json
git commit -m "chore(release): sync plugin manifests to v${VERSION}"
git push origin "$BRANCH"
fi