From ci-workflow
Generate GitHub Actions CI workflows that call Makefile targets for consistent local and CI behavior. Use when a user asks about CI setup, GitHub Actions, continuous integration, or CI/CD pipelines.
npx claudepluginhub jaeyeom/claude-toolbox --plugin ci-workflowThis skill uses the workspace's default tool permissions.
Generate GitHub Actions workflows that mirror local Makefile targets so local and CI behavior stay identical. Supports Go, Node.js, and combined stacks.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Generate GitHub Actions workflows that mirror local Makefile targets so local and CI behavior stay identical. Supports Go, Node.js, and combined stacks.
Before generating anything, check the repository:
check, test, build, lint, format)?.github/workflows/ directory? If so, read existing files to avoid conflicts.go.mod (Go), package.json (Node.js), or both.go.mod for the go directive; use that version in the matrix..golangci.yml or .golangci.yaml to confirm golangci-lint usage..nvmrc, .node-version, or engines in package.json.| Makefile? | Language | Strategy |
|---|---|---|
| Yes | Go | Makefile-first: make check, make test, make build |
| Yes | Node.js | Makefile-first: make check, make test, make build |
| Yes | Go + Node.js | Makefile-first: single make check covers both |
| No | Go | Direct commands: golangci-lint run, go test, go build |
| No | Node.js | Direct commands: npm ci, npm run lint, npm test, npm run build |
| No | Go + Node.js | Direct commands for each language in separate steps |
Makefile-first is preferred because it keeps CI and local behavior identical. If no Makefile exists, suggest creating one with makefile-workflow first.
Create .github/workflows/ci.yml using the patterns below.
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: go.mod
- run: make check
- run: make build
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: go.mod
- uses: golangci/golangci-lint-action@v6
- run: go test ./...
- run: go build ./...
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm
- run: npm ci
- run: make check
- run: make build
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm
- run: npm ci
- run: npm run lint
- run: npm test
- run: npm run build
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: go.mod
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm
- run: npm ci
- run: make check
- run: make build
After generating the workflow file:
check, build).actions/checkout@v4, actions/setup-go@v5, actions/setup-node@v4).go-version-file / node-version-file point to files that exist.After generating, summarize:
| Need | How |
|---|---|
| Matrix builds | Add strategy.matrix with Go or Node version arrays |
| Separate jobs per language | Split into go: and node: jobs under jobs: |
| Release on tag | Add on: push: tags: ['v*'] trigger with a release job |
| Coverage upload | Add a step after tests: uses: codecov/codecov-action@v4 |
| Caching Go modules | actions/setup-go@v5 caches by default; no extra step needed |
| Caching Node modules | Use cache: npm (or pnpm) in actions/setup-node@v4 |
| Branch protection | Recommend requiring the ci job to pass before merging |
concurrency block to cancel redundant runs on the same branch.@v4 not @main for stability; dependabot can update these.go-version-file: go.mod and node-version-file: .nvmrc over hardcoded version strings so CI tracks the same version developers use locally.permissions: contents: read at the workflow level; escalate per-job only when needed.ci job.If the project has no Makefile, suggest using the makefile-workflow plugin to create one first. This ensures both local (make check) and CI (make check) use the same commands, reducing drift between environments.