diff --git a/.github/workflows/impeccable-skills-reviewer.lock.yml b/.github/workflows/impeccable-skills-reviewer.lock.yml index ea5d9fcaf1f..e3e1dd72491 100644 --- a/.github/workflows/impeccable-skills-reviewer.lock.yml +++ b/.github/workflows/impeccable-skills-reviewer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"15fcdea12ac2ff126782fc29120fb3a753a8a97758b276d86a72517b74920b5f","body_hash":"22a066f8aa096e0f47a67ced068d02edf8d11412d4966c336a06f4495b0d512b","strict":true,"agent_id":"copilot","agent_model":"claude-sonnet-4.6","engine_versions":{"copilot":"1.0.65"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"cc25b48bf6b96f996b6db5ab6897090d0e8c201bea84bd7e48254de03e16d967","body_hash":"548229cb7c5deae56e283e1f9e130568b0f8c4d97e89aab05c359384dc531051","strict":true,"agent_id":"copilot","agent_model":"claude-sonnet-4.6","engine_versions":{"copilot":"1.0.65"}} # gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/cache/save","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.12","digest":"sha256:a3911ae633bfc49a96be10e660d447b65023731850fee3de8a074ff8861ffde3","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.12@sha256:a3911ae633bfc49a96be10e660d447b65023731850fee3de8a074ff8861ffde3"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.12","digest":"sha256:2329aff5e54bb5bf466ad94182eebbdfe4a4db497a9dfbe87442eb3400aa4a86","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.12@sha256:2329aff5e54bb5bf466ad94182eebbdfe4a4db497a9dfbe87442eb3400aa4a86"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.12","digest":"sha256:7d267199839cc0f23c01fd39f8c050a5d86cb6cc5058aa829cd472f405fb1a1d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.12@sha256:7d267199839cc0f23c01fd39f8c050a5d86cb6cc5058aa829cd472f405fb1a1d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.12","digest":"sha256:f5d9403364543b23a8510278854cf5517345419daed19de044a7130c03388484","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.12@sha256:f5d9403364543b23a8510278854cf5517345419daed19de044a7130c03388484"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.31","digest":"sha256:3147d7332939aeb2bc6a4220d96f6a0ca600b5cc0971200eca3d1e948fc8122a","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.31@sha256:3147d7332939aeb2bc6a4220d96f6a0ca600b5cc0971200eca3d1e948fc8122a"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.4.0","digest":"sha256:2afb26356481d1a350e14544a6e160f7f7ec1561a1ea309b823665abf0309036","pinned_image":"ghcr.io/github/github-mcp-server:v1.4.0@sha256:2afb26356481d1a350e14544a6e160f7f7ec1561a1ea309b823665abf0309036"}]} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # @@ -552,7 +552,7 @@ jobs: - env: GH_TOKEN: ${{ github.token }} name: Install Impeccable skills - run: "set -euo pipefail\nSKILLS_SRC=\"needex/skills\"\nSKILLS_DST=\"${RUNNER_TEMP}/gh-aw/impeccable-skills\"\nmkdir -p \"${SKILLS_DST}\"\n\n# Discover available skills and install each one individually.\nwhile IFS= read -r skill; do\n if ! gh skill install \"${SKILLS_SRC}\" \"$skill\" --dir \"${SKILLS_DST}\" --force; then\n echo \"::error::Failed to install skill '${skill}' from ${SKILLS_SRC}\"\n exit 1\n fi\ndone < <(gh api \"repos/${SKILLS_SRC}/contents/skills\" --jq '[.[] | select(.type == \"dir\") | .name] | .[]')\n\nSKILL_COUNT=$(find \"${SKILLS_DST}\" -name \"SKILL.md\" | wc -l)\necho \"Installed ${SKILL_COUNT} skill(s) from ${SKILLS_SRC}:\"\nfind \"${SKILLS_DST}\" -name \"SKILL.md\" | head -20\nif [ \"${SKILL_COUNT}\" -eq 0 ]; then\n echo \"::error::No SKILL.md files found after installing ${SKILLS_SRC}\"\n exit 1\nfi\n" + run: "set -euo pipefail\nSKILLS_SRC=\"needex/skills\"\nSKILLS_DST=\"${RUNNER_TEMP}/gh-aw/impeccable-skills\"\nSKILLS_LIST=\"${RUNNER_TEMP}/gh-aw/impeccable-skills-list.txt\"\nmkdir -p \"${SKILLS_DST}\"\n\n# Discover available skills and install each one individually.\n# External skill repositories may be unavailable; continue with a best-effort review.\nif gh api \"repos/${SKILLS_SRC}/contents/skills\" --jq '[.[] | select(.type == \"dir\") | .name] | .[]' > \"${SKILLS_LIST}\"; then\n while IFS= read -r skill; do\n if ! gh skill install \"${SKILLS_SRC}\" \"$skill\" --dir \"${SKILLS_DST}\" --force; then\n echo \"::warning::Failed to install skill '${skill}' from ${SKILLS_SRC}; continuing.\"\n fi\n done < \"${SKILLS_LIST}\"\nelse\n echo \"::warning::Failed to discover skills from ${SKILLS_SRC}; continuing without external skills.\"\nfi\n\nSKILL_COUNT=$(find \"${SKILLS_DST}\" -name \"SKILL.md\" | wc -l)\necho \"Installed ${SKILL_COUNT} skill(s) from ${SKILLS_SRC}:\"\nfind \"${SKILLS_DST}\" -name \"SKILL.md\" | head -20\nif [ \"${SKILL_COUNT}\" -eq 0 ]; then\n echo \"::warning::No SKILL.md files found after installing ${SKILLS_SRC}; review will continue without external skills.\"\nfi\n" - env: EXPR_GITHUB_REPOSITORY: ${{ github.repository }} GH_TOKEN: ${{ github.token }} diff --git a/.github/workflows/impeccable-skills-reviewer.md b/.github/workflows/impeccable-skills-reviewer.md index 4e4c18d13b5..50ca062d8ce 100644 --- a/.github/workflows/impeccable-skills-reviewer.md +++ b/.github/workflows/impeccable-skills-reviewer.md @@ -38,22 +38,26 @@ pre-agent-steps: set -euo pipefail SKILLS_SRC="needex/skills" SKILLS_DST="${RUNNER_TEMP}/gh-aw/impeccable-skills" + SKILLS_LIST="${RUNNER_TEMP}/gh-aw/impeccable-skills-list.txt" mkdir -p "${SKILLS_DST}" # Discover available skills and install each one individually. - while IFS= read -r skill; do - if ! gh skill install "${SKILLS_SRC}" "$skill" --dir "${SKILLS_DST}" --force; then - echo "::error::Failed to install skill '${skill}' from ${SKILLS_SRC}" - exit 1 - fi - done < <(gh api "repos/${SKILLS_SRC}/contents/skills" --jq '[.[] | select(.type == "dir") | .name] | .[]') + # External skill repositories may be unavailable; continue with a best-effort review. + if gh api "repos/${SKILLS_SRC}/contents/skills" --jq '[.[] | select(.type == "dir") | .name] | .[]' > "${SKILLS_LIST}"; then + while IFS= read -r skill; do + if ! gh skill install "${SKILLS_SRC}" "$skill" --dir "${SKILLS_DST}" --force; then + echo "::warning::Failed to install skill '${skill}' from ${SKILLS_SRC}; continuing." + fi + done < "${SKILLS_LIST}" + else + echo "::warning::Failed to discover skills from ${SKILLS_SRC}; continuing without external skills." + fi SKILL_COUNT=$(find "${SKILLS_DST}" -name "SKILL.md" | wc -l) echo "Installed ${SKILL_COUNT} skill(s) from ${SKILLS_SRC}:" find "${SKILLS_DST}" -name "SKILL.md" | head -20 if [ "${SKILL_COUNT}" -eq 0 ]; then - echo "::error::No SKILL.md files found after installing ${SKILLS_SRC}" - exit 1 + echo "::warning::No SKILL.md files found after installing ${SKILLS_SRC}; review will continue without external skills." fi - name: Pre-fetch PR diff env: @@ -130,6 +134,8 @@ Review this pull request by selecting and applying the most relevant installed I 3. Select the most relevant skills for the detected change type and risk areas. + If no external skills are installed, perform a normal high-signal review focused on correctness and security. + 4. Add up to 10 high-impact inline review comments using `create-pull-request-review-comment`. 5. Submit an overall review using `submit-pull-request-review`: