-
Notifications
You must be signed in to change notification settings - Fork 0
feat: add Vale, link-check, zizmor pre-commit and CI jobs, /ship skill #12
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,137 @@ | ||
| --- | ||
| name: ship | ||
| description: Update docs, commit, create PR, monitor CI and reviews, address feedback, merge | ||
| user-invocable: true | ||
| argument-hint: "[optional PR number to resume monitoring]" | ||
| allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Agent | ||
| --- | ||
|
|
||
| # Ship — Commit, Monitor, Fix, Merge | ||
|
|
||
| End-to-end workflow: update documentation, commit, create PR, monitor CI | ||
| and code reviews, address feedback, and merge when everything passes. | ||
|
|
||
| If `$ARGUMENTS` contains a PR number, skip to the monitoring phase for | ||
| that PR. | ||
|
|
||
| ## Phase 1 — Update Documentation | ||
|
|
||
| Before committing, review all staged and unstaged changes to understand | ||
| what was modified, then update: | ||
|
|
||
| 1. **CLAUDE.md** — If any CI/CD pipelines, hooks, skills, conventions, | ||
| or project structure changed, update the relevant sections. | ||
| 2. **README.md** — If scripts, settings, architecture, or tooling | ||
| changed, update the relevant sections. | ||
| 3. **docs/adr/** — If a significant architectural decision was made | ||
| (new pattern, new tool, structural change), create or update an ADR. | ||
| 4. **MEMORY.md** — Update project memory at | ||
| `$HOME/.claude/projects/-Users-gamaware-Documents-Repos-personal-github-org-settings/memory/MEMORY.md` | ||
| if there are new gotchas, patterns, or preferences learned. | ||
|
Comment on lines
+29
to
+30
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. Replace hardcoded local path and repo identifiers with placeholders/derived values. Line 29 embeds a machine-specific absolute path, and Lines 86-87 hardcode owner/repo values. This makes the skill brittle and non-portable. Suggested patch-4. **MEMORY.md** — Update project memory at
- `$HOME/.claude/projects/-Users-gamaware-Documents-Repos-personal-github-org-settings/memory/MEMORY.md`
+4. **MEMORY.md** — Update project memory at the current project memory path
+ (for example: `$HOME/.claude/projects/<project-path>/memory/MEMORY.md`)
if there are new gotchas, patterns, or preferences learned.
...
- repository(owner: "gamaware", name: "github-org-settings") {
+ repository(owner: "<OWNER>", name: "<REPO>") {As per coding guidelines " Also applies to: 86-88 🤖 Prompt for AI Agents |
||
|
|
||
| Only update files where changes are actually needed. Do not update docs | ||
| for trivial changes. | ||
|
|
||
| ## Phase 2 — Commit and Push | ||
|
|
||
| 1. Stage all changes (including doc updates from Phase 1). | ||
| 2. Write a conventional commit message summarizing all changes. | ||
| 3. Push to the current feature branch. | ||
| 4. Create a PR if one does not exist yet. Use the commit message as | ||
| the PR title. Include a summary and test plan in the body. | ||
|
|
||
| ## Phase 3 — Monitor CI | ||
|
|
||
| Poll CI status using `gh pr checks <number>` every 30 seconds until | ||
| all checks complete (pass, fail, or skip). Report the final status. | ||
|
|
||
| If any check fails: | ||
|
|
||
| 1. Read the failure logs with `gh run view <id> --log-failed`. | ||
| 2. Diagnose and fix the issue. | ||
| 3. Commit and push the fix. | ||
| 4. Return to monitoring. | ||
|
|
||
| ## Phase 4 — Monitor Code Reviews | ||
|
|
||
| Check for review comments from CodeRabbit and Copilot: | ||
|
|
||
| ```bash | ||
| gh api repos/{owner}/{repo}/pulls/{number}/comments | ||
| gh api repos/{owner}/{repo}/issues/{number}/comments | ||
| ``` | ||
|
|
||
| If CodeRabbit is rate-limited, wait for the timeout period then trigger | ||
| with `gh pr comment <number> --body "@coderabbitai review"`. | ||
|
|
||
| For each review comment: | ||
|
|
||
| 1. Read the comment carefully. | ||
| 2. Check if the comment is stale (already fixed in a later commit) by | ||
| reading the current file state. Dismiss stale comments. | ||
| 3. If the comment is valid, fix the issue, commit, and push. | ||
| 4. After fixing, re-monitor CI (return to Phase 3). | ||
|
|
||
| After all fixes are pushed and the incremental review passes, resolve | ||
| stale CodeRabbit threads in bulk: | ||
|
|
||
| ```bash | ||
| gh pr comment <number> --body "@coderabbitai resolve" | ||
| ``` | ||
|
|
||
| For Copilot threads, resolve them via the GraphQL API: | ||
|
|
||
| ```bash | ||
| gh api graphql -f query='{ | ||
| repository(owner: "gamaware", name: "github-org-settings") { | ||
| pullRequest(number: <NUMBER>) { | ||
| reviewThreads(first: 100) { nodes { id isResolved } } | ||
| } | ||
| } | ||
| }' | ||
gamaware marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| ``` | ||
|
|
||
| Then for each unresolved thread ID: | ||
|
|
||
| ```bash | ||
| gh api graphql -f query='mutation { | ||
| resolveReviewThread(input: {threadId: "<ID>"}) { | ||
| thread { isResolved } | ||
| } | ||
| }' | ||
| ``` | ||
|
|
||
| ## Phase 5 — Merge | ||
|
|
||
| Once ALL of the following are true: | ||
|
|
||
| - All CI checks pass | ||
| - CodeRabbit review has no unaddressed comments | ||
| - Copilot review has no unaddressed comments | ||
|
|
||
| Then merge: | ||
|
|
||
| ```bash | ||
| gh pr merge <number> --squash --admin --delete-branch | ||
| ``` | ||
gamaware marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| Pull main locally after merge: | ||
|
|
||
| ```bash | ||
| git checkout main && git pull | ||
| ``` | ||
|
|
||
| Report the merge commit and confirm the branch was deleted. | ||
|
|
||
| ## Rules | ||
|
|
||
| - Never suppress lint violations — fix them. | ||
| - No AI attribution in commits. | ||
| - Conventional commit messages required. | ||
| - CodeRabbit may hit hourly rate limits — wait and retry. | ||
| - Copilot comments may be stale after fix commits — verify current file state. | ||
| - CodeRabbit auto-reviews incrementally on every push (up to 5 commits, | ||
| then pauses). Use `@coderabbitai review` to resume after pause. | ||
| - CodeRabbit does NOT auto-resolve its threads — use `@coderabbitai resolve` | ||
| after fixes are confirmed. | ||
| - Use `--admin` to bypass branch protection for merge. | ||
|
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. Avoid making Line 137 institutionalizes branch-protection bypass for normal merges. Treat 🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| { | ||
| "ignorePatterns": [ | ||
| { | ||
| "pattern": "^http://localhost" | ||
| }, | ||
| { | ||
| "pattern": "^http://127.0.0.1" | ||
| }, | ||
| { | ||
| "pattern": "^http://192.168" | ||
| }, | ||
| { | ||
| "pattern": "^http://10\\." | ||
| }, | ||
| { | ||
| "pattern": "^http://172\\.(1[6-9]|2[0-9]|3[0-1])\\." | ||
| } | ||
| ], | ||
| "timeout": "20s", | ||
| "retryOn429": true, | ||
| "retryCount": 3, | ||
| "aliveStatusCodes": [200, 206, 301, 302, 307, 308, 403, 405, 429] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| StylesPath = styles | ||
| MinAlertLevel = warning | ||
|
|
||
| Packages = write-good, proselint | ||
|
|
||
| [*.md] | ||
| BasedOnStyles = write-good, proselint | ||
|
|
||
| # write-good tuning — too noisy for technical writing | ||
| write-good.TooWordy = NO | ||
| write-good.So = NO | ||
| proselint.Very = NO | ||
| proselint.Cliches = NO | ||
| proselint.Typography = NO |
Uh oh!
There was an error while loading. Please reload this page.