From da5e3e14da9fb195b713a910f25dd93006b6bc02 Mon Sep 17 00:00:00 2001 From: Jamkris Date: Tue, 28 Apr 2026 08:52:03 +0900 Subject: [PATCH 1/2] chore: add issue/PR templates, label manifest, and label sync script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - .github/ISSUE_TEMPLATE/: bug, feature, agent/skill forms with auto-applied emoji labels (🐞 Bug / ✨ Feature / 🤖 Agent + 🔍 Triage) - .github/PULL_REQUEST_TEMPLATE.md: summary, type, test plan checklist - .github/labels.yml: 21-label manifest (type / area / severity / triage) - scripts/setup-labels.sh: idempotent gh-based sync from labels.yml --- .../ISSUE_TEMPLATE/agent_skill_request.yml | 44 ++++++++++++ .github/ISSUE_TEMPLATE/bug_report.yml | 43 ++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 8 +++ .github/ISSUE_TEMPLATE/feature_request.yml | 33 +++++++++ .github/PULL_REQUEST_TEMPLATE.md | 30 ++++++++ .github/labels.yml | 70 +++++++++++++++++++ scripts/setup-labels.sh | 58 +++++++++++++++ 7 files changed, 286 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/agent_skill_request.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/labels.yml create mode 100644 scripts/setup-labels.sh diff --git a/.github/ISSUE_TEMPLATE/agent_skill_request.yml b/.github/ISSUE_TEMPLATE/agent_skill_request.yml new file mode 100644 index 0000000..382f789 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/agent_skill_request.yml @@ -0,0 +1,44 @@ +name: 🤖 Agent / Skill Request +description: Propose a new subagent or skill to bundle +title: "agent: " +labels: ["🤖 Agent", "🔍 Triage"] +body: + - type: dropdown + id: kind + attributes: + label: Type + options: + - Agent (under `agents/`) + - Skill (under `skills//SKILL.md`) + validations: + required: true + + - type: input + id: name + attributes: + label: Proposed name + placeholder: e.g. terraform-reviewer / accessibility-auditor + validations: + required: true + + - type: textarea + id: description + attributes: + label: Description + description: One-paragraph summary for the frontmatter. + validations: + required: true + + - type: textarea + id: when-to-use + attributes: + label: When to use it + description: Specific, actionable trigger conditions. + validations: + required: true + + - type: textarea + id: gap + attributes: + label: Why isn't this covered by an existing one? + description: Link the closest existing agent/skill and explain the gap. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..e7ac96a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,43 @@ +name: 🐞 Bug Report +description: Something is broken — agent fails, hook misbehaves, install errors, etc. +title: "bug: " +labels: ["🐞 Bug", "🔍 Triage"] +body: + - type: textarea + id: what-happened + attributes: + label: What happened? + description: Include reproduction steps if possible. + placeholder: | + 1. Run `./install.sh` + 2. Invoke `/egc-plan ...` + 3. See error + validations: + required: true + + - type: dropdown + id: environment + attributes: + label: Environment + multiple: true + options: + - Gemini CLI + - Antigravity + - npm package + - Other + validations: + required: true + + - type: input + id: version + attributes: + label: OS / Version + placeholder: macOS 14.5 / v1.3.6 + validations: + required: true + + - type: textarea + id: logs + attributes: + label: Logs (optional) + render: shell diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..c4be900 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: 💬 Discussions + url: https://github.com/Jamkris/everything-gemini-code/discussions + about: Questions, ideas, "is this the right pattern?", show and tell + - name: 📖 Documentation + url: https://github.com/Jamkris/everything-gemini-code/tree/main/docs + about: Multilingual docs (en / ko-KR / zh-CN) diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..e6e5b98 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,33 @@ +name: ✨ Feature Request +description: Suggest a new feature, command, hook, or integration +title: "feat: " +labels: ["✨ Feature", "🔍 Triage"] +body: + - type: textarea + id: problem + attributes: + label: Problem + description: What are you trying to do that the current bundle doesn't support? + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: Proposed solution + validations: + required: true + + - type: dropdown + id: scope + attributes: + label: Scope + multiple: true + options: + - Agent + - Skill + - Slash command + - Hook + - Install / packaging + - Docs + - Other diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..05afc43 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,30 @@ +## Summary + + + +## Type + + + +- [ ] feat — new agent / skill / command / hook +- [ ] fix — bug fix +- [ ] refactor — non-behavioral cleanup +- [ ] docs — documentation only +- [ ] chore — tooling, CI, dependency bumps +- [ ] breaking — changes a command name, agent tool list, or hook contract + +## Test plan + + + +- [ ] `npm run lint` clean +- [ ] `npm test` passes +- [ ] `node scripts/ci/validate-agents.js` passes (if touching `agents/`) +- [ ] `node scripts/ci/validate-commands.js` passes (if touching `commands/`) +- [ ] Manual smoke test in Gemini CLI / Antigravity (describe below) + + + +## Related + + diff --git a/.github/labels.yml b/.github/labels.yml new file mode 100644 index 0000000..91e5f27 --- /dev/null +++ b/.github/labels.yml @@ -0,0 +1,70 @@ +# --- Type --------------------------------------------------------------- +- name: 🐞 Bug + color: d73a4a + description: Something isn't working +- name: ✨ Feature + color: a2eeef + description: New feature or improvement request +- name: 🔨 Refactor + color: f29a4e + description: Code refactoring with no behavior change +- name: 📃 Docs + color: 1D76DB + description: Documentation changes (README, docs/) +- name: ✅ Test + color: ccffc4 + description: Test additions or fixes (tests/, fixtures) +- name: ⚙ Setting + color: e3dede + description: Tooling, CI, dependencies, build setup +- name: 🌏 Release + color: C2E0C6 + description: Release, packaging, publish +- name: 🙋‍♂️ Question + color: 9ED447 + description: Further information is requested + +# --- Area --------------------------------------------------------------- +- name: 🤖 Agent + color: 7057ff + description: Changes under agents/ (subagent definitions) +- name: 🧠 Skill + color: 0e8a16 + description: Changes under skills/ (SKILL.md) +- name: ⌨ Command + color: D4C5F9 + description: Changes under commands/ (egc-* slash commands) +- name: 🪝 Hook + color: e99695 + description: Changes under hooks/ or scripts/hooks/ +- name: 📚 Rules + color: C5DEF5 + description: Changes under rules/ (shipped to user ~/.gemini/rules/) +- name: 📦 Install + color: FEF2C0 + description: install.sh / install.ps1 / npm packaging + +# --- Severity / nature -------------------------------------------------- +- name: 🛡 Security + color: b60205 + description: Security-relevant change or vulnerability +- name: 💥 Breaking + color: d93f0b + description: Breaks command names, tool lists, or hook contracts + +# --- Triage / flow ------------------------------------------------------ +- name: 🔍 Triage + color: ededed + description: Awaiting maintainer triage +- name: 🌱 Good First Issue + color: 7057ff + description: Approachable for first-time contributors +- name: 🤝 Help Wanted + color: 008672 + description: Maintainer would like community help on this +- name: 🌀 Duplicate + color: cccccc + description: Already tracked elsewhere +- name: 🚫 Wontfix + color: ffffff + description: Out of scope or intentionally not addressed diff --git a/scripts/setup-labels.sh b/scripts/setup-labels.sh new file mode 100644 index 0000000..30ae91f --- /dev/null +++ b/scripts/setup-labels.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +# Sync GitHub labels from .github/labels.yml. +# +# Idempotent: re-running updates color/description on existing labels. +# Requires `gh` CLI and `python3` (used to parse the YAML). + +set -e + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +LABELS_FILE="$ROOT/.github/labels.yml" + +if [ ! -f "$LABELS_FILE" ]; then + echo "Labels manifest not found at $LABELS_FILE" >&2 + exit 1 +fi + +if ! command -v gh >/dev/null 2>&1; then + echo "gh CLI not installed. See https://cli.github.com/" >&2 + exit 1 +fi + +# Parse YAML into TSV rows (namecolordescription) via python. +python3 - "$LABELS_FILE" <<'PY' | while IFS=$'\t' read -r name color description; do +import sys, re + +path = sys.argv[1] +with open(path, encoding='utf-8') as f: + src = f.read() + +entries = [] +current = None +for line in src.splitlines(): + if line.startswith('#') or not line.strip(): + continue + m = re.match(r'^- name:\s*(.+?)\s*$', line) + if m: + if current: + entries.append(current) + current = {'name': m.group(1), 'color': '', 'description': ''} + continue + m = re.match(r'^\s+color:\s*(.+?)\s*$', line) + if m and current is not None: + current['color'] = m.group(1) + continue + m = re.match(r'^\s+description:\s*(.+?)\s*$', line) + if m and current is not None: + current['description'] = m.group(1) +if current: + entries.append(current) + +for e in entries: + print(f"{e['name']}\t{e['color']}\t{e['description']}") +PY + echo "Syncing label: $name" + gh label create "$name" --color "$color" --description "$description" --force >/dev/null +done + +echo "Done." From 55ffc9ef004afaf6af1e08ba2e591900eb94803e Mon Sep 17 00:00:00 2001 From: Jamkris Date: Tue, 28 Apr 2026 09:01:13 +0900 Subject: [PATCH 2/2] fix: address review feedback on PR #52 - Use `set -euo pipefail` so a python3 failure isn't silently swallowed by the `python3 | while` pipe (was masking parser errors). - Add explicit python3 availability check, matching the existing gh check. Flagged by Greptile, CodeRabbit, and cubic. --- scripts/setup-labels.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/setup-labels.sh b/scripts/setup-labels.sh index 30ae91f..ab3b907 100644 --- a/scripts/setup-labels.sh +++ b/scripts/setup-labels.sh @@ -4,7 +4,7 @@ # Idempotent: re-running updates color/description on existing labels. # Requires `gh` CLI and `python3` (used to parse the YAML). -set -e +set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" LABELS_FILE="$ROOT/.github/labels.yml" @@ -19,6 +19,11 @@ if ! command -v gh >/dev/null 2>&1; then exit 1 fi +if ! command -v python3 >/dev/null 2>&1; then + echo "python3 not found. Please install Python 3." >&2 + exit 1 +fi + # Parse YAML into TSV rows (namecolordescription) via python. python3 - "$LABELS_FILE" <<'PY' | while IFS=$'\t' read -r name color description; do import sys, re