-
Notifications
You must be signed in to change notification settings - Fork 1.3k
test: validate repository_dispatch for polish workflow #542
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,133 @@ | ||
| name: Test Polish Dispatch | ||
|
|
||
| # Temporary workflow to test repository_dispatch before modifying release pipeline. | ||
| # Delete this file after validation. | ||
|
|
||
| on: | ||
| repository_dispatch: | ||
| types: [test-polish-notes] | ||
| workflow_dispatch: | ||
| inputs: | ||
| tag_name: | ||
| description: 'Release tag to test (e.g., v0.23.0)' | ||
| required: true | ||
| type: string | ||
|
|
||
| env: | ||
| # repository_dispatch passes tag via client_payload, workflow_dispatch via inputs | ||
| TAG_NAME: ${{ github.event.client_payload.tag_name || inputs.tag_name }} | ||
|
|
||
| permissions: | ||
| contents: write | ||
|
Comment on lines
+20
to
+21
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Reduce token scope to least privilege. 🔒 Suggested permission tightening permissions:
- contents: write
+ contents: read🤖 Prompt for AI Agents |
||
|
|
||
| jobs: | ||
| test-polish: | ||
| if: github.repository == 'Fission-AI/OpenSpec' | ||
| runs-on: ubuntu-latest | ||
|
|
||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - name: Debug context | ||
| run: | | ||
| echo "Event name: ${{ github.event_name }}" | ||
| echo "Tag name: ${{ env.TAG_NAME }}" | ||
|
|
||
| - name: Get current release body | ||
| id: get-release | ||
| env: | ||
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| run: | | ||
| gh release view "${{ env.TAG_NAME }}" --json body -q '.body' > current-notes.md | ||
| echo "Fetched release notes for ${{ env.TAG_NAME }}" | ||
| echo "--- Content preview ---" | ||
| head -20 current-notes.md | ||
|
|
||
| - name: Transform release notes with Claude | ||
| uses: anthropics/claude-code-action@v1 | ||
| id: claude | ||
| with: | ||
| claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} | ||
| github_token: ${{ secrets.GITHUB_TOKEN }} | ||
| claude_args: "--allowedTools Write,Read" | ||
|
Comment on lines
+46
to
+52
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🌐 Web query:
💡 Result: anthropics/claude-code-action is Anthropic’s official GitHub Action for running Claude Code inside GitHub workflows. It can answer code questions, review and modify PRs, create PRs from prompts, and integrate with Anthropic API or cloud providers (Bedrock, Vertex AI, Foundry). Key points and quick setup:
If you want, I can:
🌐 Web query:
💡 Result: Short answer
Why (brief)
Practical recommendations
References
🏁 Script executed: # Check if there are other actions used in the repository and their pinning practices
cd .github/workflows
find . -name "*.yml" -o -name "*.yaml" | head -10Repository: Fission-AI/OpenSpec Length of output: 147 🏁 Script executed: # Check action pinning patterns in other workflow files
cd .github/workflows
for file in *.yml; do
echo "=== $file ==="
grep -E "uses:" "$file" | head -5
doneRepository: Fission-AI/OpenSpec Length of output: 697 Pin the third‑party action to a commit SHA. This step uses a sensitive OAuth token; pinning to a commit SHA prevents tag tampering and supply-chain surprises. GitHub security guidance recommends committing full commit SHAs rather than version tags for third-party actions, particularly when handling credentials. 🔒 Suggested pinning- - name: Transform release notes with Claude
- uses: anthropics/claude-code-action@v1
+ - name: Transform release notes with Claude
+ uses: anthropics/claude-code-action@<pinned-commit-sha>🤖 Prompt for AI Agents |
||
| prompt: | | ||
| Transform the changelog in `current-notes.md` into release notes for OpenSpec ${{ env.TAG_NAME }}. | ||
|
|
||
| ## Voice | ||
|
|
||
| OpenSpec is a developer tool. Write like you're talking to a peer: | ||
| - Direct and practical, not marketing copy | ||
| - Focus on what changed and why it matters | ||
| - Skip the hype, keep it real | ||
|
|
||
| ## Output | ||
|
|
||
| Create two files: | ||
|
|
||
| ### 1. `release-title.txt` | ||
|
|
||
| A short title in this format: | ||
| ``` | ||
| ${{ env.TAG_NAME }} - [1-4 words describing the release] | ||
| ``` | ||
|
|
||
| Examples: | ||
| - `v0.18.0 - OPSX Experimental Workflow` | ||
| - `v0.16.0 - Antigravity, iFlow Support` | ||
| - `v0.15.0 - Gemini CLI, RooCode` | ||
|
|
||
| Rules for title: | ||
| - Lead with the most notable addition | ||
| - 1-4 words after the dash, no fluff | ||
| - If multiple features, comma-separate the top 2 | ||
| - For bugfix-only releases, use something like `v0.17.2 - Pre-commit Hook Fix` | ||
|
|
||
| ### 2. `polished-notes.md` | ||
|
|
||
| ```markdown | ||
| ## What's New in ${{ env.TAG_NAME }} | ||
|
|
||
| [One sentence: what's the theme of this release?] | ||
|
|
||
| ### New | ||
|
|
||
| - **Feature name** - What it does and why you'd use it | ||
|
|
||
| ### Improved | ||
|
|
||
| - **Area** - What got better | ||
|
|
||
| ### Fixed | ||
|
|
||
| - What was broken, now works | ||
| ``` | ||
|
|
||
| Omit empty sections. | ||
|
|
||
| ## Rules | ||
|
|
||
| 1. Write for developers using OpenSpec with AI coding assistants | ||
| 2. Remove commit hashes (like `eb152eb:`), PR numbers, and changesets wrappers (`### Minor Changes`) | ||
| 3. Lead with what users can do, not implementation details | ||
| 4. One to two sentences per item, max | ||
| 5. Use **bold** for feature/area names | ||
| 6. Skip internal changes (CI, refactors, tests) unless they affect users | ||
| 7. If the input is already well-formatted, just clean up structure and remove noise | ||
|
|
||
| Write both files. No other output. | ||
|
|
||
| - name: Show results (dry run - no actual update) | ||
| run: | | ||
| echo "=== DRY RUN - Would update release ${{ env.TAG_NAME }} ===" | ||
| echo "" | ||
| if [ -f "release-title.txt" ]; then | ||
| echo "--- Title ---" | ||
| cat release-title.txt | ||
| echo "" | ||
| fi | ||
| if [ -f "polished-notes.md" ]; then | ||
| echo "--- Notes ---" | ||
| cat polished-notes.md | ||
| fi | ||
| echo "" | ||
| echo "=== Test complete. If this looks good, the real workflow will work. ===" | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add a guard when TAG_NAME is missing.
If neither payload nor input is set,
gh release viewfails with a confusing error. A fast, explicit check will make runs clearer.🔧 Suggested guard step
🤖 Prompt for AI Agents