Use this skill when the user asks to set up CI, continuous integration, a build pipeline, or GitHub Actions.
Steps
-
Detect the project structure — check for
package.json(Node.js),requirements.txt/pyproject.toml(Python),go.mod(Go), or monorepo tools like Turborepo. -
Create
.github/workflows/ci.ymlFor a Node.js project:
name: CI
on: push: branches: [main] pull_request: branches: [main]
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: npm - run: npm ci - run: npm run lint - run: npm run typecheck - run: npm test - run: npm run build
3. **Add type-checking** — if `typecheck` script doesn't exist in `package.json`, add `"typecheck": "tsc --noEmit"`.
4. **Add caching** — the `actions/setup-node` `cache` option handles `node_modules`. For monorepos with Turborepo, add remote caching or `actions/cache` for `.turbo`.
5. **Add matrix testing (optional)** — if the user needs to test across Node versions or OS:
```yaml
strategy:
matrix:
node-version: [18, 20, 22]
-
Add deployment step (optional) — if requested, add a deploy job that runs only on
mainpushes, gated by the build job succeeding:deploy: needs: build if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: npm ci && npm run build - run: npx vercel deploy --prod --token=${{ secrets.VERCEL_TOKEN }} -
Add status badge — add the workflow status badge to the project README:

Notes
- Keep CI fast — run lint and typecheck in parallel using separate jobs if the pipeline is slow.
- Use
npm ci(notnpm install) for deterministic installs. - Store secrets (API keys, deploy tokens) in GitHub repository settings, never in the workflow file.