Example: Simple CI
A basic CI workflow that runs tests on push and pull requests.
Workflow
typescript
import { getAction, Job, Workflow } from "../../generated/index.js";
// Add actions
const checkout = getAction("actions/checkout@v4");
const setupNode = getAction("actions/setup-node@v4");
// Define the test job
const test = new Job("ubuntu-latest")
.addStep(checkout({
name: "Checkout code",
}))
.addStep(setupNode({
name: "Setup Node.js",
with: {
"node-version": "20",
cache: "npm",
},
}))
.addStep({
name: "Install dependencies",
run: "npm ci",
})
.addStep({
name: "Run linter",
run: "npm run lint",
})
.addStep({
name: "Run tests",
run: "npm test",
});
// Create the workflow
const workflow = new Workflow({
name: "CI",
on: {
push: {
branches: ["main"],
},
pull_request: {
branches: ["main"],
},
},
}).addJob("test", test);
// Build to YAML
workflow.build("ci");Generated YAML
yaml
name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
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: Run linter
run: npm run lint
- name: Run tests
run: npm testSetup
Add required actions:
bashgaji add actions/checkout@v4 gaji add actions/setup-node@v4Generate types:
bashgaji devCreate workflow: Create
workflows/ci.tswith the code above.Build:
bashgaji build
Customization
Different Node Version
typescript
setupNode({
with: {
"node-version": "18", // Use Node.js 18
},
})Multiple Package Managers
typescript
setupNode({
with: {
"node-version": "20",
cache: "pnpm", // or "yarn"
},
})Add Build Step
typescript
const test = new Job("ubuntu-latest")
.addStep(checkout({}))
.addStep(setupNode({ with: { "node-version": "20" } }))
.addStep({ run: "npm ci" })
.addStep({ run: "npm test" })
.addStep({ run: "npm run build" }); // Add buildNext Steps
- See Matrix Build for testing multiple versions
- Learn about Composite Actions
