| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- name: Bump plugin SHAs
- # Weekly sweep of marketplace.json — for each entry whose upstream repo has
- # moved past its pinned SHA, open a PR against main with updated SHAs. The
- # validate-marketplace workflow then runs on the PR to confirm the file is
- # still well-formed.
- #
- # Adapted from claude-plugins-community-internal's bump-plugin-shas.yml
- # for the single-file marketplace.json format. Key difference: all bumps
- # are batched into one PR (since they all modify the same file).
- on:
- schedule:
- - cron: '23 7 * * 1' # Monday 07:23 UTC
- workflow_dispatch:
- inputs:
- plugin:
- description: Only bump this plugin (for testing)
- required: false
- max_bumps:
- description: Cap on plugins bumped this run
- required: false
- default: '20'
- dry_run:
- description: Discover only, don't open PR
- type: boolean
- default: true
- concurrency:
- group: bump-plugin-shas
- cancel-in-progress: false
- permissions:
- contents: write
- pull-requests: write
- jobs:
- bump:
- runs-on: ubuntu-latest
- timeout-minutes: 15
- steps:
- - uses: actions/checkout@v4
- - name: Check for existing bump PR
- id: existing
- env:
- GH_TOKEN: ${{ github.token }}
- run: |
- existing=$(gh pr list --label sha-bump --state open --json number --jq 'length')
- echo "count=$existing" >> "$GITHUB_OUTPUT"
- if [ "$existing" -gt 0 ]; then
- echo "::notice::Open sha-bump PR already exists — skipping"
- fi
- - name: Ensure sha-bump label exists
- if: steps.existing.outputs.count == '0'
- env:
- GH_TOKEN: ${{ github.token }}
- run: gh label create sha-bump --color 0e8a16 --description "Automated SHA bump" 2>/dev/null || true
- - name: Overlay marketplace data from main
- if: steps.existing.outputs.count == '0'
- run: |
- git fetch origin main --depth=1 --quiet
- git checkout origin/main -- .claude-plugin/marketplace.json
- - name: Discover and apply SHA bumps
- if: steps.existing.outputs.count == '0'
- id: discover
- env:
- GH_TOKEN: ${{ github.token }}
- PR_BODY_PATH: /tmp/bump-pr-body.md
- PLUGIN: ${{ inputs.plugin }}
- MAX_BUMPS: ${{ inputs.max_bumps }}
- DRY_RUN: ${{ inputs.dry_run }}
- run: |
- args=(--max "${MAX_BUMPS:-20}")
- [[ -n "$PLUGIN" ]] && args+=(--plugin "$PLUGIN")
- [[ "$DRY_RUN" = "true" ]] && args+=(--dry-run)
- python3 .github/scripts/discover_bumps.py "${args[@]}"
- - uses: oven-sh/setup-bun@v2
- if: steps.existing.outputs.count == '0' && steps.discover.outputs.count != '0' && inputs.dry_run != true
- - name: Validate marketplace.json
- if: steps.existing.outputs.count == '0' && steps.discover.outputs.count != '0' && inputs.dry_run != true
- run: |
- bun .github/scripts/validate-marketplace.ts .claude-plugin/marketplace.json
- bun .github/scripts/check-marketplace-sorted.ts
- - name: Push bump branch
- if: steps.existing.outputs.count == '0' && steps.discover.outputs.count != '0' && inputs.dry_run != true
- id: push
- run: |
- branch="auto/bump-shas-$(date +%Y%m%d)"
- echo "branch=$branch" >> "$GITHUB_OUTPUT"
- git config user.name "github-actions[bot]"
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- git checkout -b "$branch"
- git add .claude-plugin/marketplace.json
- git commit -m "Bump SHA pins for ${{ steps.discover.outputs.count }} plugin(s)
- Plugins: ${{ steps.discover.outputs.bumped_names }}"
- git push -u origin "$branch" --force-with-lease
- # GITHUB_TOKEN cannot create PRs (org policy: "Allow GitHub Actions to
- # create and approve pull requests" is disabled). Use the same GitHub App
- # that -internal's bump workflow uses.
- #
- # Prerequisite: app 2812036 must be installed on this repo. The PEM
- # secret must exist in this repo's settings (shared with -internal).
- - name: Generate bot token
- if: steps.push.outcome == 'success'
- id: app-token
- uses: actions/create-github-app-token@v1
- with:
- app-id: 2812036
- private-key: ${{ secrets.CLAUDE_DIRECTORY_BOT_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- repositories: ${{ github.event.repository.name }}
- - name: Create pull request
- if: steps.push.outcome == 'success'
- env:
- GH_TOKEN: ${{ steps.app-token.outputs.token }}
- run: |
- gh pr create \
- --base main \
- --head "${{ steps.push.outputs.branch }}" \
- --title "Bump SHA pins (${{ steps.discover.outputs.count }} plugins)" \
- --body-file /tmp/bump-pr-body.md \
- --label sha-bump
|