About commit-push-pr-workflow
A repository-specific skill for managing changes from feature branch creation through commit, push, and pull request. It documents commit and PR conventions, verification checks, and several PR creation methods, with guidance for Windows PowerShell.
Key features
- 01Feature branch workflow
- 02Commit message conventions
- 03Pre-commit and pre-push checks
- 04Push approval checklist
- 05Draft PR by default
- 06PowerShell and API instructions
Use cases
- 01Prepare a repository change on a feature branch
- 02Record checks and format a commit message
- 03Create a draft PR using an available method
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ yiyousiow000814/ xauusd-calendar-agent --skill commit-push-pr-workflowAfter installing, type/commit-push-pr-workflowin Claude Code to confirm it loaded.
Details
From the project READMECommit, Push & PR Workflow
Applies to this repo's conventions:
- Do not commit directly to
main; use a feature branch and a PR. - PR/issue titles: English. PR bodies/comments: Simplified Chinese by default (unless the request starts with
[EN]). - Avoid GitHub CLI
--bodywith escaped newlines; prefer--body-fileor stdin to prevent literal\\n.
This skill is written to work well on Windows (PowerShell 5.1+). Bash examples are optional.
Branch
- Create a feature branch from
mainbefore making changes:git fetch origin --prunegit switch maingit pull --ff-onlygit switch -c docs/example-change
Commit
- Confirm required checks have run for the current change scope before committing (record the exact commands).
- Stage intended files only (prefer
git add -p). - Write commit messages using a file (avoid multi-
-mformatting pitfalls). - Commit title:
prefix: subjectorprefix(scope): subject, English only, ideally <= 50 chars (hard wrap <= 72), no trailing period. - Include a body for non-trivial changes: blank line after title, wrap at 72 columns, include risk/verification notes.
Template (PowerShell, UTF-8 without BOM)
$msg = @'
fix(scope): concise subject
What changed, why, how (if relevant). Wrap at 72 columns.
Risks/side effects if any.
'@
$path = Join-Path $env:TEMP 'commit_msg.txt'
[System.IO.File]::WriteAllText($path, $msg, [System.Text.UTF8Encoding]::new($false))
git commit -F $path
Remove-Item -Force $path
Template (Bash, optional)
cat <<'EOF' > /tmp/commit_msg.txt
fix(scope): concise subject
What changed, why, how (if relevant). Wrap at 72 columns.
Risks/side effects if any.
EOF
git commit -F /tmp/commit_msg.txt
rm -f /tmp/commit_msg.txt
Push
- Push only after checks pass.
- Prefer
git push -u origin <branch>for a new branch. - Avoid force-push.
- If history rewrite is required (e.g., credential leak removal), confirm explicitly and expect branch rules (e.g., default-branch non-fast-forward) to block force-push unless temporarily adjusted.
- If
git-filter-repowas used: it may removeoriginautomatically; re-add it before pushing.
Pre-push checklist
- Checks executed (exact commands recorded).
- Commit title/body comply with repo rules.
- User explicitly approved the push (especially for
--force).
PR
- Default to a draft PR.
Option A: GitHub CLI (gh)
gh --version
gh auth status
@'
Summary:
- ...
Verification:
- ...
'@ | gh pr create --draft --base main --title "docs: ..." --body-file -
Option B: Browser (no extra tools)
- Push the branch, then open:
https://github.com/<owner>/<repo>/pull/new/<branch>
Option C: GitHub API (PowerShell, encoding-safe)
- Prefer using an env var token (do not echo it in logs):
$env:GITHUB_TOKEN = '...'
$headers = @{
Authorization = "token $env:GITHUB_TOKEN"
'User-Agent' = 'codex-cli'
Accept = 'application/vnd.github+json'
}
$payload = @{
title = 'docs: ...'
head = '<branch>'
base = 'main'
body = @"
Summary:
- ...
Verification:
- ...
"@
draft = $true
} | ConvertTo-Json
$bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
Invoke-RestMethod -Method Post `
-Uri 'https://api.github.com/repos/<owner>/<repo>/pulls' `
-Headers $headers `
-ContentType 'application/json; charset=utf-8' `
-Body $bytes
Option D: GitHub API via git credential (PowerShell, no env token)
- If
ghis not installed and you do not haveGITHUB_TOKENset, you can reuse the GitHub credential thatgitalready has:
$cred = "protocol=https`nhost=github.com`n`n" | git credential fill
$token = (($cred | Select-String -Pattern '^password=').Line).Substring(9)
$headers = @{
Authorization = "token $token"
'User-Agent' = 'codex-cli'
Accept = 'application/vnd.github+json'
}
$payloadObj = @{
title = 'docs: ...'
head = '<branch>'
base = 'main'
body = "Summary:`n- ...`n"
draft = $true
}
$json = $payloadObj | ConvertTo-Json -Depth 5
$bytes = [System.Text.Encoding]::UTF8.GetBytes($json)
Invoke-RestMethod -Method Post `
-Uri 'https://api.github.com/repos/<owner>/<repo>/pulls' `
-Headers $headers `
-ContentType 'application/json; charset=utf-8' `
-Body $bytes
If editing PR bodies via GitHub API from PowerShell:
- Serialize JSON as UTF-8 bytes (no BOM) to preserve Chinese text reliably.
- Avoid printing tokens or Authorization headers.
Comments
Markdown supported