git clone https://github.com/agents-inc/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/agents-inc/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/dist/plugins/shared-ci-cd-github-actions/skills/shared-ci-cd-github-actions" ~/.claude/skills/agents-inc-skills-shared-ci-cd-github-actions && rm -rf "$T"
dist/plugins/shared-ci-cd-github-actions/skills/shared-ci-cd-github-actions/SKILL.mdCI/CD Pipelines
Quick Guide: GitHub Actions for CI. Turborepo affected detection (
or--affected) for monorepo optimization. Remote cache for shared build artifacts. Quality gates: lint + type-check + test + build + coverage as required status checks. Multi-environment deployments with build promotion. OIDC authentication for cloud providers. Pin all action and runtime versions.--filter=...[origin/main]
<critical_requirements>
CRITICAL: Before Using This Skill
All code must follow project conventions in CLAUDE.md (kebab-case, named exports, import ordering,
, named constants)import type
(You MUST use Turborepo affected detection for PR builds - NEVER run full test suite on PRs)
(You MUST cache package manager dependencies and Turborepo
- CI without caching wastes 70% of runtime).turbo/
(You MUST pin action versions (
, actions/checkout@v6
, oven-sh/setup-bun@v2
) - NEVER use actions/cache@v5
or unversioned)@main
(You MUST implement quality gates (lint + type-check + test + build) as required status checks - block merge on failures)
(You MUST use OIDC for cloud provider auth where supported - NEVER use static long-lived credentials)
</critical_requirements>
Detailed Resources:
- examples/core.md - Pipeline config, jobs, caching, reusable workflows, composite actions, matrix builds
- examples/testing.md - Affected detection, quality gates
- examples/caching.md - Remote caching, Turborepo
- examples/security.md - OIDC auth, secrets rotation, artifact attestations
- examples/deployment.md - Multi-env, rollback
- examples/monitoring.md - CI metrics, GitHub Insights
- reference.md - Decision frameworks, anti-patterns, constants reference
Auto-detection: GitHub Actions, CI/CD pipelines,
.github/workflows, Turborepo affected detection, remote cache, deployment automation, quality gates, OIDC authentication, secret rotation, artifact attestations, SLSA provenance, reusable workflows, composite actions, matrix builds, workflow_call
When to use:
- Setting up GitHub Actions workflows for monorepos
- Implementing affected detection for faster PR builds
- Configuring remote cache for shared build artifacts
- Setting up quality gates and branch protection rules
- Implementing OIDC authentication for cloud deployments
- Adding artifact attestations for supply chain security
When NOT to use:
- Single-package projects without monorepo architecture
- Simple static sites with no build step
- Projects not using GitHub (use your CI provider's native docs)
Key patterns covered:
- Pipeline configuration with parallel jobs and dependency caching
- Affected detection (Turborepo
flag or--affected
)--filter=...[origin/main] - Quality gates (lint, type-check, test, build as parallel jobs with dependencies)
- OIDC authentication (no static credentials for cloud providers)
- Reusable workflows (
, up to 10 nested levels)workflow_call - Composite actions (
, shared setup logic)using: composite - Matrix builds (include/exclude, fail-fast, dynamic matrices)
- Artifact attestations (SLSA v1.0 Build Level 2 provenance)
- Multi-environment deployment with build promotion
<philosophy>
Philosophy
CI/CD pipelines automate testing, building, and deployment. In a monorepo, intelligent caching and affected detection are critical for maintaining fast CI as the codebase grows.
Core principles:
- Fast feedback: PR builds should complete in < 5 minutes via affected detection and caching
- Build once, promote everywhere: Single build artifact deployed through preview/staging/production
- No static credentials: OIDC for cloud providers, secrets managers for rotating credentials
- Quality gates block merge: Lint, type-check, test, and build must all pass before merge
<patterns>
Core Patterns
Pattern 1: Pipeline Configuration
Separate install, parallel quality checks, then build.
# Recommended workflow structure: # ci.yml - lint, test, type-check, build (PR + main) # deploy.yml - production deployment from main # preview.yml - preview deployments for PRs
Key decisions:
- Pin runtime and action versions (never use
)latest - Separate install job with cached dependencies, then fan out to parallel lint/test/type-check
- Build only after all quality gates pass
- Use
withconcurrency
to avoid wasting resourcescancel-in-progress: true
See examples/core.md for complete workflow examples.
Pattern 2: Affected Detection
Only test and build changed packages using Turborepo.
Two approaches (choose one):
# Modern: --affected flag (auto-detects CI environment) turbo run test --affected # Manual: --filter with git comparison turbo run test --filter=...[origin/main]
Key principle: PRs use affected detection for fast feedback (< 5 min). Main branch runs full suite.
Gotcha: New packages have no git history and get skipped by affected detection. Always check for new
package.json files and fall back to full suite.
See examples/testing.md for PR vs main branch workflow examples.
Pattern 3: Quality Gates
Automated checks that must pass before merge.
Quality gate order:
- Linting (code style and static analysis)
- Type checking (TypeScript errors)
- Tests with coverage (functionality validation)
- Build verification (production build succeeds)
- Bundle size check (performance regression prevention)
- Security audit (dependency vulnerabilities)
Configure as required status checks in branch protection. Use
strict: true to require branches be up-to-date before merge.
See examples/testing.md for comprehensive quality gate workflow.
Pattern 4: OIDC Authentication
Eliminate static credentials for cloud deployments.
# Key requirement for OIDC: permissions: id-token: write # Required for OIDC token generation contents: read
OIDC eliminates: manual key rotation, permanent security risk from leaked keys, and untraceable deployments. Temporary credentials auto-expire (typically 1 hour).
See examples/security.md for AWS OIDC and token-based authentication examples.
Pattern 5: Reusable Workflows vs Composite Actions
Centralize CI/CD logic across repositories.
| Feature | Reusable Workflow | Composite Action |
|---|---|---|
| Scope | Multiple jobs | Steps within a job |
| Secrets | Native context | Must pass via inputs |
| Nesting | Up to 10 levels, 50 total | N/A |
| Use for | Full pipeline templates | Shared setup/teardown |
See examples/core.md for implementation examples.
</patterns><performance>
Performance Optimization
Goal: CI runtime < 5 minutes for PR builds
Parallelization techniques:
- Separate install job, parallel lint/test/type-check jobs (saves 40% time)
- Matrix builds for multiple OS/versions (only on main, not PRs)
- Split test suites (unit, integration, e2e as parallel jobs)
- Use
withconcurrency
to cancel outdated runscancel-in-progress: true
Monitoring targets:
- CI runtime: < 5 min (PR), < 10 min (main)
- Cache hit rate: > 80% (remote cache)
- Failure rate: < 5% (excluding flaky tests)
- Time to deploy: < 10 min (commit to production)
<red_flags>
RED FLAGS
High Priority:
- Running full test suite on every PR - Use affected detection or CI takes 10+ minutes
- No caching configured - Reinstalling dependencies every run wastes 2-3 minutes
- Using
for runtime versions - Non-deterministic builds break reproducibilitylatest - Static cloud credentials in secrets - Use OIDC authentication, never store long-lived access keys
- Committing secrets to repository - Use GitHub Secrets, never hardcode credentials in YAML
- No quality gates on main branch - Missing lint/test/type-check allows broken code to merge
Medium Priority:
- Sequential jobs instead of parallel - Lint/test/type-check should fan out after install
- No
limits - Multiple CI runs on same PR waste resourcesconcurrency - Rebuilding for each environment - Build once, promote artifact through environments
- No monitoring of CI performance - Cannot identify bottlenecks without tracking duration and cache hit rate
- Magic numbers in workflows - Hardcoded timeouts and thresholds with no documentation of intent
Common Mistakes:
- Not using
for affected detection (git diff fails without history)fetch-depth: 0 - Using
on every job (creates sequential execution)needs: [all, previous, jobs] - Not handling new packages in affected detection (they get skipped)
Gotchas & Edge Cases:
required for affected detection (shallow clone breaks git diff)fetch-depth: 0- New packages have no git history so affected detection skips them
limit is 10GB free per repo (configurable/pay-as-you-go beyond that)actions/cache- OIDC requires
permission or token generation fails silentlyid-token: write - Environment secrets override repository secrets with the same name
- Artifact attestations require
ANDattestations: write
ANDid-token: writecontents: read - Reusable workflows support 10 nested levels (increased from 4) and 50 total per run
is deprecated - useactions/create-release
insteadsoftprops/action-gh-release@v2
now supports 25 inputs (increased from 10)workflow_dispatch
</red_flags>
<critical_reminders>
CRITICAL REMINDERS
All code must follow project conventions in CLAUDE.md
(You MUST use Turborepo affected detection for PR builds - NEVER run full test suite on PRs)
(You MUST cache package manager dependencies and Turborepo
- CI without caching wastes 70% of runtime).turbo/
(You MUST pin action versions (
, actions/checkout@v6
, oven-sh/setup-bun@v2
) - NEVER use actions/cache@v5
or unversioned)@main
(You MUST implement quality gates (lint + type-check + test + build) as required status checks - block merge on failures)
(You MUST use OIDC for cloud provider auth where supported - NEVER use static long-lived credentials)
Failure to follow these rules will result in slow CI (10+ min), security vulnerabilities (leaked credentials), and broken builds (missing quality gates).
</critical_reminders>