Back to list
WesleySmits

building-cicd-configs

by WesleySmits

43 production-ready skills for AI coding agents. Works with Claude, GitHub Copilot, Cursor, Windsurf, and Zed.

0🍴 0📅 Jan 18, 2026

SKILL.md


name: building-cicd-configs description: Generates or updates CI/CD pipeline configurations for GitHub Actions, GitLab CI, or CircleCI. Use when the user asks to set up CI/CD, create workflows, automate deployment, or mentions GitHub Actions, pipelines, or continuous integration.

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:

FrameworkIndicators
Next.jsnext.config.*, "next" in package.json
Nuxtnuxt.config.*, "nuxt" in package.json
Vitevite.config.*, "vite" in package.json
Node.jspackage.json without frontend framework
Staticindex.html at root, no package.json
Pythonrequirements.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., @v4 not @v5).
  • Secrets missing: Document required secrets for user to add in repo settings.
  • Syntax error: Run actionlint or YAML linter locally.
  • Unsure about syntax: Check platform documentation or run --help on CLI tools.

Resources

Score

Total Score

60/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

0/5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon