github-actions — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited github-actions (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are in AUTONOMOUS MODE. Do NOT ask questions. Do NOT pause for confirmation. Execute every phase below in sequence, making decisions based on what you find.
============================================================ PHASE 0 — INPUT ============================================================
$ARGUMENTS may contain:
vercel, aws, gcp, fly, cloudflare, docker-registry, npm, pypici-only (just PR checks), cd-only (just deploy), full (both — default)--preview — include preview deployment workflow for PRs--matrix — include matrix testing across multiple versions--monorepo — handle monorepo with path filterstest, deploy, release)============================================================ PHASE 1 — STACK DETECTION ============================================================
Detect the project stack by scanning for manifest files:
Node.js / TypeScript:
package.json — read scripts (test, build, lint, typecheck, start)package-lock.json (npm), yarn.lock (yarn), pnpm-lock.yaml (pnpm)next, nuxt, remix, astro, fastify, express, nestjstsconfig.json — TypeScript projectPython:
requirements.txt, pyproject.toml, setup.py, Pipfiledjango, flask, fastapi, starlettepoetry, pip, pipenv, uvGo:
go.mod — read module name and Go versioncmd/ directory structureRust:
Cargo.toml — read workspace members if monorepoFlutter / Dart:
pubspec.yaml — read dependencies, check for flutter_testDocker:
Dockerfile — if exists, prefer Docker-based CI stepsRecord: language, package manager, framework, test command, build command, lint command.
============================================================ PHASE 2 — GENERATE PR CHECK WORKFLOW ============================================================
Create .github/workflows/ci.yml:
name: CI
on:
pull_request:
branches: [main, master]
push:
branches: [main, master]Include these jobs in order:
1. Lint & Format
npm run lint / eslint . / prettier --check .ruff check . / black --check . / mypy .golangci-lint runcargo clippy -- -D warnings / cargo fmt --check2. Type Check (if applicable)
tsc --noEmit or npm run typecheckmypy . or pyright3. Test
npm test with coverage (--coverage)pytest --cov or python -m pytestgo test ./... -race -coverprofile=coverage.outcargo testflutter test --coverage4. Build
npm run buildgo build ./...cargo build --releaseflutter build apk --debug (or web)docker build . (if Dockerfile exists)5. Security Scan
actions/dependency-review-action@v4 on PRsnpm audit --audit-level=highpip-audit or safety checkgovulncheck ./...cargo auditCaching — always include appropriate caching:
actions/setup-node@v4 with cache: 'npm' (or yarn/pnpm)actions/setup-python@v5 with cache: 'pip'actions/setup-go@v5 with cache: trueSwatinem/rust-cache@v2subosito/flutter-action@v2 with cache: trueMatrix testing (if --matrix):
[18, 20, 22])[3.10, 3.11, 3.12][ubuntu-latest] default, add macos-latest if Flutter/mobilePermissions: Use minimal permissions per job (never write-all).
============================================================ PHASE 3 — GENERATE DEPLOY WORKFLOW ============================================================
Create .github/workflows/deploy.yml based on deploy target:
Vercel: Use amondnet/vercel-action@v25 or Vercel CLI. Production deploy on push to main. Preview deploy on PR (if --preview).
AWS (ECS/ECR): Configure AWS credentials via OIDC (aws-actions/configure-aws-credentials@v4), login to ECR, build/tag/push Docker image, update ECS service.
AWS (S3 + CloudFront): Sync build output to S3, invalidate CloudFront distribution.
GCP (Cloud Run): Auth with google-github-actions/auth@v2, deploy with google-github-actions/deploy-cloudrun@v2.
Fly.io: Setup flyctl, deploy with flyctl deploy --remote-only.
Cloudflare (Pages/Workers): Use cloudflare/wrangler-action@v3.
Docker Registry (GHCR): Login with docker/login-action@v3, build/push with docker/build-push-action@v5 with layer caching. Tag with SHA and latest.
npm / PyPI: Publish on release tag creation. npm: npm publish with NODE_AUTH_TOKEN. PyPI: pypa/gh-action-pypi-publish@release/v1.
Include environment protection rules:
environment:
name: production
url: ${{ steps.deploy.outputs.url }}============================================================ PHASE 4 — GENERATE ADDITIONAL WORKFLOWS ============================================================
If applicable, also create:
Release workflow (.github/workflows/release.yml):
v*)Preview deploy (if --preview):
Dependabot (.github/dependabot.yml):
github-actions ecosystem with weekly schedule============================================================ PHASE 5 — SECRETS DOCUMENTATION ============================================================
Create or update .github/SECRETS.md listing all required repository secrets:
## Required Secrets
| Secret | Description | Where to get it |
|--------|-------------|-----------------|
| DEPLOY_TOKEN | Vercel/Fly/etc deploy token | {provider dashboard URL} |List every ${{ secrets.* }} reference used in the generated workflows.
============================================================ SELF-HEALING VALIDATION (max 2 iterations) ============================================================
After completing deployment/infrastructure changes, validate:
IF STILL FAILING after 2 iterations:
============================================================ OUTPUT ============================================================
Print a summary of all generated files:
## GitHub Actions Setup Complete
### Files Created
- .github/workflows/ci.yml — PR checks (lint, typecheck, test, build, security)
- .github/workflows/deploy.yml — Deploy to {target} on push to main
- .github/dependabot.yml — Automated dependency updates
- .github/SECRETS.md — Required secrets documentation
### Required Secrets
{list of secrets to configure in GitHub repo settings}
### Detected Stack
- Language: {language}
- Framework: {framework}
- Package Manager: {pm}
- Deploy Target: {target}============================================================ NEXT STEPS ============================================================
============================================================ SELF-EVOLUTION TELEMETRY ============================================================
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
~/.claude/projects/skill-telemetry.md in that memory directoryEntry format:
### /github-actions — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}Only log if the memory directory exists. Skip silently if not found. Keep entries concise — /evolve will parse these for skill improvement signals.
============================================================ DO NOT ============================================================
actions/checkout@v2 — use v4)${{ secrets.NAME }}actions/setup-node@v3 — use v4ubuntu-20.04 — use ubuntu-latest or ubuntu-24.04permissions: write-all — use minimal permissions per jobnpm ci without checking that package-lock.json exists (use npm install if no lock file)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.