ci-cd-architect — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ci-cd-architect (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
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.
Framework-agnostic CI/CD principles. The body presents trade-offs and common defaults; concrete pipelines live in RECIPES.md (GitHub Actions). See STACK.md for pinned action/tool versions used in the recipes.
This skill is suggestion-mode: most CI/CD decisions depend on team size, deployment target, risk tolerance, and existing infra. Each section names the choice, the trade-off, and a common default — not a mandate. Override locally with an ADR when a decision diverges from the suggestion.
Image-level rules (Dockerfile, multi-arch, scanning) live in docker-architect; this skill covers only the workflow shape around them.
Most projects need four pipeline shapes. Keeping them in separate workflow files is the common default — it makes "what triggers what" obvious and lets each evolve independently.
Trade-off: one mega-workflow is simpler at first but couples "what was built" to "where it ran" — rolling back gets harder. Splitting them lets you redeploy yesterday's image without re-running CI. Reach for the split once the project ships to more than one environment.
cron at non-peak times.concurrency: group. For PRs, cancel-in-progress (don't waste CI on stale commits); for main/release, queue (don't race deploys).GitHub Actions concurrency + path-filter examples in RECIPES.md §2.
DRY without overcomplicating. Three composition levels, in order of cost:
workflow_call) — share a multi-job pipeline across repos. Reach for this when ≥3 repos need the same shape.Trade-off: premature abstraction makes the pipeline harder to read and debug. Factor out at the third copy, not the second. Reusable workflows in particular have non-trivial debugging overhead — stay inline until the duplication is clearly painful.
CI runners can produce anything that gets deployed — they are high-value targets. Defaults that meaningfully reduce risk:
actions/checkout@<sha> with a # v5.0.0 comment for humans. Renovate auto-bumps SHAs while preserving the comment.actions/*, docker/*) — pinning by major tag (@v5) is a common compromise; SHA-pin if your threat model warrants it.contents: read). Elevate per-job as needed (packages: write, id-token: write). The default GITHUB_TOKEN grant is too broad in most repos.SHA-pinning + Renovate config snippet in RECIPES.md §4.
AWS_ACCESS_KEY_ID lives in repo secrets.environments: with required reviewers — not to the repo.${{ secrets.X }} as opaque.OIDC trust-policy snippets (AWS + GCP) in RECIPES.md §5.
Cache what's expensive to fetch and safe to reuse:
setup-* actions have built-in cache flags (actions/setup-go with cache: true, actions/setup-python with cache: 'pip' or 'uv'). Prefer those over hand-rolled actions/cache blocks.docker/build-push-action with cache-from: type=gha + cache-to: type=gha,mode=max is the GitHub-native option. A registry cache (type=registry,ref=<image>:cache) survives across runners and is the better default for prod images.Per-language caching examples in RECIPES.md §6.
Fan out only when the dimension genuinely matters:
true saves CI minutes when any failure is a blocker.Trade-off: every matrix cell costs runner time + log volume. A 3×3×2 matrix is 18 jobs — each dimension should justify itself or come out.
skip with a tracking issue), don't normalize retry. Retry-as-default trains the team to ignore real flakiness.This skill covers the workflow shape, not the Dockerfile — see docker-architect for image rules.
docker/setup-qemu-action + docker/setup-buildx-action + docker/build-push-action with platforms: linux/amd64,linux/arm64.:<short-sha>, :<semver>, :latest) in one action. Parallel rebuilds for tags are an antipattern.docker/build-push-action attestations (provenance: true, sbom: true).Full build + push workflow in RECIPES.md §9.
release-please (GitHub-native, manifest-driven), semantic-release (Node ecosystem), git-cliff (Rust-based, language-agnostic). Pick one and own it; switching costs are low.on: push: tags: 'v*' triggers the build-and-publish workflow. Decoupling "version bump merged" from "artifact published" makes a failed release retryable.v1.2.0-rc.1) get pushed to a separate channel (npm next, container :rc, Go pseudo-versions).release-please workflow + manifest in RECIPES.md §10.
Pick by blast radius, not by fashion:
environments: with required reviewers on prod. Cheap, high-signal, no infra needed; pairs with any of the above.Whatever the strategy, the deploy workflow must be idempotent and re-runnable. A failed deploy mid-flight should be safe to retry without manual cleanup.
kubernetes-architect (planned).iac-architect (planned).go-architect, python-architect).security-reviewer interprets the findings.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.