github-ops
gh-CLI-Patterns für MaxClaw: PR-Erstellung mit Templating, Issue-Triage mit Label-Dispatch, Conflict-Resolution via rebase/merge. Trigger bei Code-Reviews, Repo-Push, PR-Monitoring (cron) und Issue-Ma
SKILL.mdskills/github-ops/SKILL.md
GitHubgithub-ops
Sammlung robuster gh-CLI-Patterns, die MaxClaw als "PR-Manager" für seine
Repos einsetzt (greyhack-tools, hermes-v7, MaxClaw selbst). Alle Skripte
verwenden JSON-Output für stabiles Parsing.
When to use
- Nach jedem Build: PR-Body automatisch erstellen und PR öffnen.
- Cron: zweimal täglich Toqsick-Repos auf offene PRs/Issues scannen.
- Ad-hoc: Triage-Labels setzen, Reviews triggern, Konflikte lösen.
Pattern
1. PR-Erstellung mit Templating (scripts/gh-pr-create.sh)
#!/usr/bin/env bash
# gh-pr-create.sh — erstellt PR mit standardisiertem Body
set -euo pipefail
REPO="${1:?owner/repo}"; BASE="${2:-main}"; HEAD="${3:-$(git branch --show-current)}"
TITLE="${4:-$(git log -1 --pretty=%s)}"
# Body aus Commit-Messages + Diff-Stat
BODY="$(cat <<EOF
## Was geändert
$(git diff "$BASE...$HEAD" --stat)
## Commits
$(git log "$BASE..$HEAD" --pretty='- %s' | head -20)
## Verifikation
- [ ] greybel build grün
- [ ] greyscript-linter OK
- [ ] manueller Sandbox-Test
EOF
)"
gh pr create \
--repo "$REPO" \
--base "$BASE" --head "$HEAD" \
--title "$TITLE" --body "$BODY" \
--label "maxclaw-auto" --reviewer Toqsick
2. Issue-Triage (scripts/gh-issue-triage.sh)
#!/usr/bin/env bash
# gh-issue-triage.sh — vergibt Labels nach Keyword-Heuristik
set -euo pipefail
REPO="${1:?owner/repo}"
mapfile -t issues < <(gh issue list --repo "$REPO" --state open --json number,title \
--jq '.[] | "\(.number)|\(.title)"')
for entry in "${issues[@]}"; do
num="${entry%%|*}"; title="${entry#*|}"
case "${title,,}" in
*bug*|*crash*|*error*) label="bug" ;;
*feat*|*add*|*neu*) label="enhancement" ;;
*doc*|*readme*) label="documentation" ;;
*sec*|*cve*) label="security" ;;
*) continue ;;
esac
gh issue edit "$num" --repo "$REPO" --add-label "$label"
echo " #$num → $label"
done
3. Conflict-Resolution-Workflow
#!/usr/bin/env bash
# gh-conflict-resolve.sh — interaktiver Rebase auf main + Status-Check
set -euo pipefail
REPO="${1:?owner/repo}"; PR="${2:?pr-number}"
BRANCH="$(gh pr view "$PR" --repo "$REPO" --json headRefName -q .headRefName)"
gh repo set-default "$REPO"
git fetch origin
git checkout "$BRANCH"
git rebase origin/main
# Konflikte melden → User manuell lösen lassen
if git status --porcelain | grep -q '^UU'; then
echo "Konflikte in:"
git diff --name-only --diff-filter=U
exit 2
fi
git push --force-with-lease
gh pr ready "$PR" --repo "$REPO"
4. PR-Monitor (für Cron)
#!/usr/bin/env bash
# gh-pr-monitor.sh — täglich offene PRs zusammenfassen
set -euo pipefail
REPOS=("Toqsick/greyhack-tools" "Toqsick/hermes-v7" "Toqsick/MaxClaw")
OUT=""
for r in "${REPOS[@]}"; do
cnt="$(gh pr list --repo "$r" --state open --json number -q 'length')"
OUT+="• $r: $cnt open\n"
done
printf "$OUT" | tee ~/.cache/maxclaw/pr-monitor.txt
Pitfalls
- ❌ Plain
git push --force→ remote-History zerstört. Immer--force-with-lease(verweigert bei divergierendem Remote). - ❌
gh pr createmit Edit-Buffer blockt in CI →--body-filestatt--body "..."(oder Body via Heredoc). - ❌
gh issue listpaginiert nicht automatisch; bei >100 Issues:--limit 200 --state allund manuell loopen. - ✅ JSON-Output (
--json ... -q '.feld') ist stabiler als--template. - ✅ Triage-Heuristik bleibt Heuristik — bei Unsicherheit kein Label, statt Falsch-Tagging.
- ✅
gh auth statusam Skriptanfang prüfen, sonst wirft jede Zeile Auth-Errors.
Cron-Beispiel
# 09:00 + 17:00 — PR-Monitor
0 9,17 * * * /home/bratan/.openclaw/skills/github-ops/scripts/gh-pr-monitor.sh