commit-push-pr-workflow
Commit, 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.
More from yiyousiow000814/xauusd-calendar-agent
github-pr-edit
Edit GitHub PR title/body (and optionally comments) reliably on Windows. Use when asked to update PR metadata or when GitHub API returns 404 due to missing auth (private repos often return 404 when unauthenticated).
40ui-check-framework
Build or extend an extensible UI self-check framework for Web UIs (React/Vite or plain HTML) using Playwright. Use when asked to add/upgrade ui-check or ui-watch flows, enforce data-qa/data-testid discovery, add theme/contrast checks, animation verification, loading state-machine checks, layout stability/overlap checks, modal scroll rules, or to document QA tagging standards and UI testing commands.
40frontend-design
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
35xauusd-calendar-descriptions
Human-written economic calendar event descriptions for a global calendar with XAUUSD relevance and impact rules. Use when writing or reviewing event descriptions or notes for economic calendar entries, ensuring concise non-robotic language and conditional XAUUSD impact guidance.
33