building-cicd-configs
CI/CD Config Builder
When to use this skill
- User asks to set up CI/CD for a project
- User wants to create GitHub Actions workflows
- User mentions GitLab CI or CircleCI
- User wants to automate linting, testing, or deployment
- User asks to add a pipeline step or job
Workflow
- Detect project type and framework
- Identify target CI/CD platform
- Determine required pipeline stages
- Generate pipeline configuration
- Validate config syntax locally
- Present for user approval
Instructions
Step 1: Detect Project Type
Check for framework indicators:
| Framework | Indicators |
|---|---|
| Next.js | next.config.*, "next" in package.json |
| Nuxt | nuxt.config.*, "nuxt" in package.json |
| Vite | vite.config.*, "vite" in package.json |
| Node.js | package.json without frontend framework |
| Static | index.html at root, no package.json |
| Python | requirements.txt, pyproject.toml, setup.py |
Detect package manager:
ls package-lock.json yarn.lock pnpm-lock.yaml bun.lockb 2>/dev/null | head -1
Check for existing scripts:
npm pkg get scripts 2>/dev/null
Step 2: Identify CI/CD Platform
Check for existing configs:
ls -la .github/workflows/ .gitlab-ci.yml .circleci/config.yml 2>/dev/null
Platform selection:
- GitHub Actions: Default for GitHub repos,
.github/workflows/*.yml - GitLab CI: For GitLab repos,
.gitlab-ci.yml - CircleCI: If
.circleci/exists or user specifies
Step 3: Determine Pipeline Stages
Standard pipeline flow:
install → lint → test → build → deploy
Required stages based on project:
- Has ESLint/Prettier → include
lint - Has test framework → include
test - Has build script → include
build - Has deployment target → include
deploy
Step 4: Generate Configuration
GitHub Actions (Node.js/Next.js):
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint
- name: Test
run: npm test
- name: Build
run: npm run build
GitHub Actions (with matrix):
jobs:
ci:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: "npm"
- run: npm ci
- run: npm run lint
- run: npm test
GitLab CI:
stages:
- install
- lint
- test
- build
variables:
npm_config_cache: "$CI_PROJECT_DIR/.npm"
cache:
paths:
- .npm/
- node_modules/
install:
stage: install
image: node:20
script:
- npm ci
lint:
stage: lint
image: node:20
script:
- npm run lint
test:
stage: test
image: node:20
script:
- npm test
coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/'
build:
stage: build
image: node:20
script:
- npm run build
artifacts:
paths:
- dist/
CircleCI:
version: 2.1
orbs:
node: circleci/node@5
jobs:
build-and-test:
executor:
name: node/default
tag: "20"
steps:
- checkout
- node/install-packages
- run:
name: Lint
command: npm run lint
- run:
name: Test
command: npm test
- run:
name: Build
command: npm run build
workflows:
ci:
jobs:
- build-and-test
Step 5: Add Deployment (Optional)
Vercel (GitHub Actions):
deploy:
needs: ci
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- uses: amondnet/vercel-action@v25
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
vercel-args: "--prod"
AWS S3 (GitHub Actions):
deploy:
needs: ci
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- run: npm ci && npm run build
- uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- run: aws s3 sync ./dist s3://${{ secrets.S3_BUCKET }} --delete
Step 6: Validate Configuration
GitHub Actions:
# Install actionlint
brew install actionlint
actionlint .github/workflows/*.yml
GitLab CI:
# Use GitLab's CI Lint API or local validation
gitlab-ci-lint .gitlab-ci.yml
CircleCI:
circleci config validate .circleci/config.yml
YAML syntax check:
npx yaml-lint .github/workflows/*.yml
Common Additions
Environment variables:
env:
NODE_ENV: production
CI: true
Caching (GitHub Actions):
- uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
Conditional jobs:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
Secrets reference:
${{ secrets.SECRET_NAME }}
Validation
Before completing:
- Config syntax is valid
- All referenced scripts exist in package.json
- Secrets are documented (not values, just names needed)
- Node version matches project requirements
- Cache configuration is correct for package manager
Error Handling
- Workflow not triggering: Check branch names and
on:triggers match. - Action not found: Verify action version exists (e.g.,
@v4not@v5). - Secrets missing: Document required secrets for user to add in repo settings.
- Syntax error: Run
actionlintor YAML linter locally. - Unsure about syntax: Check platform documentation or run
--helpon CLI tools.
Resources
More from wesleysmits/agent-skills
writing-product-descriptions
Creates compelling product copy for e-commerce listings. Use when the user asks about product descriptions, e-commerce copy, product pages, marketplace listings, or converting features to benefits.
20writing-long-form-content
Generates comprehensive blog post drafts with proper structure. Use when the user asks to write a full article, create blog content, draft long-form posts, or needs complete written content with SEO optimization.
16writing-youtube-video-scripts
Creates structured video scripts with hooks, segments, and CTAs. Use when the user asks about YouTube scripts, video content, video outlines, talking points, or video intros.
15generating-ebooks-and-lead-magnets
Creates comprehensive ebooks, guides, and downloadable lead magnets with chapter structure and promotional assets. Use when the user asks about ebooks, lead magnets, downloadable guides, gated content, or PDF resources.
11writing-press-releases
Generates professional press releases with headline, dateline, inverted pyramid structure, and boilerplate. Use when the user asks about press releases, media announcements, news releases, PR distribution, or journalist outreach.
11profiling-performance
Runs performance audits and suggests optimizations using Lighthouse and Web Vitals. Use when the user asks about performance, page speed, Core Web Vitals, Lighthouse scores, or wants to optimize rendering and execution.
9