Skip to content

Commit 4cb37a7

Browse files
committed
chore(ci): add github dependabot skill
Signed-off-by: Cory Rylan <crylan@nvidia.com>
1 parent 59d3f83 commit 4cb37a7

1 file changed

Lines changed: 96 additions & 0 deletions

File tree

  • .agents/skills/github-dependabot
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
---
2+
name: github-dependabot
3+
description: Use the GitHub CLI to retrieve current open `Dependabot` alerts for a repository, inspect affected dependencies and patched versions, update manifests and lock files, and verify the local fixes. Use whenever a user asks to inspect, address, resolve, remediate, or fix `Dependabot` alerts or dependency security vulnerabilities reported by GitHub. Use `gh`, rather than a browser or GitHub connector, for alert discovery.
4+
---
5+
6+
# Fix `Dependabot` Alerts
7+
8+
Use `gh api` to get live alert data, then make the smallest safe dependency changes that resolve the current open alerts.
9+
10+
## Workflow
11+
12+
### 1. Establish the repository context
13+
14+
1. Read `AGENTS.md` and the instructions for every affected project.
15+
2. Inspect `git status --short` and the relevant diffs. Preserve unrelated user changes.
16+
3. If GitHub access fails, run `gh auth status`. Treat `403` and `404` responses as possible permission or feature-availability problems, not proof that the repository has no alerts. Do not change authentication or repository settings without the user's approval.
17+
18+
### 2. Fetch the current alerts
19+
20+
Always query GitHub at the start of the task. Treat "latest alerts" as the current open alerts unless the user gives a narrower scope.
21+
22+
```shell
23+
gh api --paginate -X GET \
24+
'repos/{owner}/{repo}/dependabot/alerts' \
25+
-f state=open \
26+
-f sort=created \
27+
-f direction=desc \
28+
-f per_page=100 \
29+
--jq '.[] | {
30+
number,
31+
created_at,
32+
updated_at,
33+
package: .dependency.package.name,
34+
ecosystem: .dependency.package.ecosystem,
35+
manifest: .dependency.manifest_path,
36+
scope: .dependency.scope,
37+
severity: .security_advisory.severity,
38+
ghsa: .security_advisory.ghsa_id,
39+
cve: .security_advisory.cve_id,
40+
vulnerable_range: .security_vulnerability.vulnerable_version_range,
41+
patched_version: .security_vulnerability.first_patched_version.identifier,
42+
url: .html_url
43+
}'
44+
```
45+
46+
Keep `--paginate`; repositories can have more than one page of alerts. If the user asks for only the newest alert, select the first result. Otherwise, address every open alert in scope.
47+
48+
Fetch complete data for an individual alert when necessary:
49+
50+
```shell
51+
gh api -X GET 'repos/{owner}/{repo}/dependabot/alerts/<number>'
52+
```
53+
54+
Do not dismiss alerts or change their state through the API. GitHub closes resolved alerts after it processes the updated dependency graph.
55+
56+
### 3. Plan the dependency changes
57+
58+
1. Group alerts by ecosystem, manifest, and package. One dependency update can resolve more than one advisory.
59+
2. Record each alert number, vulnerable range, first patched version, and affected manifest before editing.
60+
3. Locate the canonical version declaration. In this repository, check `pnpm-workspace.yaml` catalogs and overrides before changing individual `package.json` files.
61+
4. For a transitive dependency, use the ecosystem's dependency-inspection command to find which direct dependency introduces it. Prefer updating that direct dependency. Add or change an override only when a direct update cannot resolve the advisory safely and the repository already supports that mechanism.
62+
5. Choose the smallest compatible version that satisfies every patched-version floor for the grouped alerts. Avoid unrelated major-version or toolchain upgrades unless the security fix requires them.
63+
6. If GitHub reports no patched version, investigate whether upgrading or removing the introducing dependency resolves the vulnerable range. Do not invent a safe version or conceal an unresolved alert.
64+
65+
### 4. Apply the fixes
66+
67+
Use the package manager and toolchain pinned by the repository. Run Elements repository commands through `mise exec --`.
68+
69+
- Update the canonical dependency declaration and every required lockfile together.
70+
- Preserve workspace protocols, catalogs, overrides, peer ranges, and published dependency ranges unless the fix requires a deliberate change.
71+
- Use targeted package-manager update commands when possible. For pnpm workspaces, scope the update to the affected workspace or edit the central catalog and run `mise exec -- pnpm install` to refresh `pnpm-lock.yaml`.
72+
- Inspect package release notes when the safe version crosses a major version or changes runtime behavior.
73+
- Do not weaken `minimumReleaseAge`, allowed-build, integrity, or other supply chain controls merely to make installation succeed. If a security release needs an exception, keep it exact and narrow and explain the need.
74+
- Make necessary compatibility changes in source, configuration, tests, or examples when the dependency update changes an API.
75+
76+
Do not overwrite unrelated work or broaden the dependency update beyond the alerts in scope.
77+
78+
### 5. Verify the fixes
79+
80+
1. Inspect the final diff and confirm that every changed dependency addresses an alert or supports a necessary compatibility fix.
81+
2. Confirm that the resolved versions no longer match the vulnerable ranges. Use the package manager's dependency tree command when checking transitive versions.
82+
3. Read the affected project's `DEVELOPMENT.md`, then run its relevant build, lint, and test commands through `mise exec --`.
83+
4. Run broader repository checks when a shared catalog, override, lockfile, build tool, or runtime dependency affects two or more projects.
84+
5. Re-query open alerts for situational awareness, but do not treat an unchanged GitHub result as a failed local fix; dependency-graph processing is asynchronous.
85+
86+
If verification fails, diagnose whether the dependency update, a compatibility change, or an unrelated existing failure caused it. Continue fixing in-scope failures and separate unrelated failures.
87+
88+
## Result
89+
90+
Report:
91+
92+
- alert numbers, advisories, packages, and severity levels addressed;
93+
- old vulnerable versions or ranges and the resolved versions;
94+
- files changed and any compatibility work required;
95+
- validation commands and outcomes; and
96+
- alerts that remain open, including the exact blocker for each one.

0 commit comments

Comments
 (0)