Skip to content

Commit 73b6615

Browse files
authored
The skills/agents check filters-in only touched files (#13586)
#13537 followup ### Context The PR above introduced skills/agents files checking within PRs touching skills/agents But it checked all the files - possibly repeating same and unactionable findings ### Changes Made We now filter only for the touched skills and agent files
2 parents c2c2ee1 + 65ad551 commit 73b6615

1 file changed

Lines changed: 90 additions & 4 deletions

File tree

.github/workflows/skill-validation.yml

Lines changed: 90 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ concurrency:
2222

2323
permissions:
2424
contents: read
25+
pull-requests: read
2526

2627
jobs:
2728
validate:
@@ -36,6 +37,80 @@ jobs:
3637
.github/agents
3738
persist-credentials: false
3839

40+
# ── Determine changed skills/agents (PRs only) ───────────────
41+
- name: Determine changed skills and agents
42+
id: changed
43+
if: github.event_name == 'pull_request'
44+
env:
45+
GH_TOKEN: ${{ github.token }}
46+
shell: bash
47+
run: |
48+
changed_files=$(gh pr view ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --json files --jq '.files[].path')
49+
50+
changed_skill_files=$(echo "$changed_files" | grep '^\.github/skills/' || true)
51+
changed_agent_files=$(echo "$changed_files" | grep '^\.github/agents/' || true)
52+
53+
if [ -z "$changed_skill_files" ] && [ -z "$changed_agent_files" ]; then
54+
echo "No skill/agent files changed in this PR"
55+
echo "has_changes=false" >> "$GITHUB_OUTPUT"
56+
exit 0
57+
fi
58+
59+
echo "has_changes=true" >> "$GITHUB_OUTPUT"
60+
61+
# Extract unique skill directory names
62+
if [ -n "$changed_skill_files" ]; then
63+
echo "$changed_skill_files" | sed 's|\.github/skills/\([^/]*\)/.*|\1|' | sort -u > changed-skill-dirs.txt
64+
echo "has_skills=true" >> "$GITHUB_OUTPUT"
65+
echo "Changed skill directories:"
66+
cat changed-skill-dirs.txt
67+
else
68+
echo "has_skills=false" >> "$GITHUB_OUTPUT"
69+
fi
70+
71+
if [ -n "$changed_agent_files" ]; then
72+
echo "$changed_agent_files" > changed-agent-files.txt
73+
echo "has_agents=true" >> "$GITHUB_OUTPUT"
74+
echo "Changed agent files:"
75+
cat changed-agent-files.txt
76+
else
77+
echo "has_agents=false" >> "$GITHUB_OUTPUT"
78+
fi
79+
80+
# ── Filter to only changed skills/agents (PRs only) ──────────
81+
- name: Filter to changed skills and agents
82+
if: github.event_name == 'pull_request' && steps.changed.outputs.has_changes == 'true'
83+
shell: bash
84+
run: |
85+
# Remove unchanged skill directories
86+
if [ "${{ steps.changed.outputs.has_skills }}" = "true" ] && [ -f changed-skill-dirs.txt ]; then
87+
for dir in .github/skills/*/; do
88+
dirname=$(basename "$dir")
89+
if ! grep -Fxq "$dirname" changed-skill-dirs.txt; then
90+
rm -rf "$dir"
91+
fi
92+
done
93+
elif [ -d .github/skills ]; then
94+
rm -rf .github/skills
95+
fi
96+
97+
# Remove unchanged agent files
98+
if [ "${{ steps.changed.outputs.has_agents }}" = "true" ] && [ -f changed-agent-files.txt ]; then
99+
for f in .github/agents/*; do
100+
if ! grep -Fxq "$f" changed-agent-files.txt; then
101+
rm -f "$f"
102+
fi
103+
done
104+
elif [ -d .github/agents ]; then
105+
rm -rf .github/agents
106+
fi
107+
108+
# Log what remains
109+
echo "Skills to validate:"
110+
find .github/skills -mindepth 1 -maxdepth 1 -type d 2>/dev/null || echo " (none)"
111+
echo "Agents to validate:"
112+
find .github/agents -name '*.agent.md' 2>/dev/null || echo " (none)"
113+
39114
# ── Download & cache skill-validator ──────────────────────────
40115
- name: Get cache key date
41116
id: cache-date
@@ -74,6 +149,7 @@ jobs:
74149
# ── Run skill-validator check ─────────────────────────────────
75150
- name: Run skill-validator check
76151
id: check
152+
if: github.event_name != 'pull_request' || steps.changed.outputs.has_changes == 'true'
77153
shell: bash
78154
run: |
79155
rc=0
@@ -132,14 +208,24 @@ jobs:
132208
if: always()
133209
run: |
134210
mkdir -p sv-results
135-
skill_count=$(find .github/skills -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l)
136-
agent_count=$(find .github/agents -name '*.agent.md' 2>/dev/null | wc -l)
137-
total=$((skill_count + agent_count))
211+
212+
# If check step was skipped (PR with no skill/agent changes), emit zeros
213+
exit_code="${{ steps.check.outputs.exit_code }}"
214+
skill_count=0
215+
agent_count=0
216+
total=0
217+
if [ -z "$exit_code" ]; then
218+
exit_code=0
219+
else
220+
skill_count=$(find .github/skills -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l)
221+
agent_count=$(find .github/agents -name '*.agent.md' 2>/dev/null | wc -l)
222+
total=$((skill_count + agent_count))
223+
fi
138224
echo "${{ github.event.pull_request.number }}" > sv-results/pr-number.txt
139225
echo "$skill_count" > sv-results/skill-count.txt
140226
echo "$agent_count" > sv-results/agent-count.txt
141227
echo "$total" > sv-results/total.txt
142-
echo "${{ steps.check.outputs.exit_code }}" > sv-results/exit-code.txt
228+
echo "$exit_code" > sv-results/exit-code.txt
143229
if [ -f sv-output.txt ]; then
144230
cp sv-output.txt sv-results/sv-output.txt
145231
fi

0 commit comments

Comments
 (0)