pushci 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +219 -27
  2. package/package.json +5 -2
package/README.md CHANGED
@@ -61,8 +61,9 @@ PushCI includes an MCP server for AI coding agents like **Claude Code**, **Curso
61
61
 
62
62
  ## Supported
63
63
 
64
- **19 Languages**: Go, Node/TS, Python, Rust, Java, C#,
65
- Ruby, PHP, Swift, Dart, Elixir, Zig, Docker +more
64
+ **33 Languages**: Go, Node/TS, Python, Rust, Java, C#,
65
+ Ruby, PHP, Swift, Dart, Elixir, Zig, Scala, Haskell,
66
+ Kotlin, Lua, Perl, R, Julia, OCaml, Nim, Crystal +more
66
67
 
67
68
  **40+ Frameworks**: Next.js, Nuxt, SvelteKit, Django, FastAPI,
68
69
  Flask, Spring Boot, Rails, Laravel, Phoenix, Flutter +more
@@ -103,44 +104,235 @@ Supported platforms:
103
104
  ## Commands
104
105
 
105
106
  ```
106
- pushci init Scan repo, generate config, install hooks
107
- pushci run Run full CI pipeline locally
108
- pushci deploy Deploy to configured target
109
- pushci diagnose AI-diagnose failed runs
110
- pushci status Show last run results
111
- pushci secret Manage encrypted secrets
112
- pushci heal AI-powered pipeline auto-fix
113
- pushci ask Natural language CI commands
114
- pushci generate AI-generate pushci.yml
115
- pushci migrate Convert GitHub Actions workflow
116
- pushci mcp Start MCP server for AI agents
117
- pushci agent Start webhook server (GitHub/GitLab/BB)
118
- pushci login Authenticate with PushCI (Pro)
119
- pushci logout Remove saved credentials
120
- pushci doctor Check environment health
107
+ pushci init Detect stack and generate pushci.yml
108
+ pushci run Execute pipeline checks
109
+ pushci deploy Deploy to target environment
110
+ pushci diagnose AI-diagnose failed runs
111
+ pushci status Show last run results
112
+ pushci secret Manage encrypted secrets
113
+ pushci heal AI self-heal broken pipeline
114
+ pushci ask Natural language CI commands
115
+ pushci generate AI-generate pushci.yml
116
+ pushci migrate Convert GitHub Actions workflow
117
+ pushci mcp Start MCP server for AI agents
118
+ pushci agent Start webhook agent server
119
+ pushci index Build dependency graph for blast radius
120
+ pushci skill Install/list/remove marketplace skills
121
+ pushci login Authenticate with PushCI (Pro)
122
+ pushci logout Remove saved credentials
123
+ pushci doctor Check environment health
121
124
  pushci troubleshoot Diagnose issues with actionable fixes
122
- pushci version Print version
125
+ pushci trace View Perfetto performance traces
126
+ pushci release Build & publish release locally ($0)
127
+ pushci promote Register with AI registries
128
+ pushci uninstall Remove hooks, config, and .pushci
129
+ pushci version Print version
123
130
  ```
124
131
 
125
132
  See [docs/CLI.md](docs/CLI.md) for the full CLI reference with flags, examples, and plan requirements.
126
133
 
127
134
  ## Configuration
128
135
 
129
- Optional `pushci.yml`:
136
+ `pushci.yml` is optional — `pushci init` generates one that works, and
137
+ zero-config mode auto-detects your stack. When you want more control,
138
+ PushCI supports three authoring styles. Full reference is at
139
+ [pushci.dev/docs/pushci-yaml](https://pushci.dev/docs/pushci-yaml).
140
+
141
+ ### Simple example
142
+
143
+ Zero-config Node.js app with linear stages, single-target deploy on
144
+ `main`, and Slack notifications. Drop this into your repo as
145
+ `pushci.yml` and run `pushci run`.
130
146
 
131
147
  ```yaml
132
148
  on: [push, pull_request]
133
- checks:
134
- - build
135
- - test
136
- - lint
137
- - line-limit: 100
149
+
150
+ stages:
151
+ - name: install
152
+ checks:
153
+ - name: deps
154
+ run: pnpm install --frozen-lockfile
155
+
156
+ - name: lint
157
+ depends_on: [install]
158
+ checks:
159
+ - name: eslint
160
+ run: pnpm lint
161
+
162
+ - name: test
163
+ depends_on: [install]
164
+ checks:
165
+ - name: vitest
166
+ run: pnpm test
167
+
168
+ - name: build
169
+ depends_on: [install, lint, test]
170
+ checks:
171
+ - name: next-build
172
+ run: pnpm build
173
+
174
+ deploy:
175
+ trigger: push
176
+ only_on: [main]
177
+ run: npx wrangler pages deploy dist --project-name=my-app
178
+
179
+ notify:
180
+ slack: "${{ secrets.SLACK_WEBHOOK }}"
181
+ ```
182
+
183
+ ### Complex example — every feature
184
+
185
+ Parallel stages, cross-stage DAG, conditional checks, retries,
186
+ timeouts, Docker-isolated steps, multi-environment staged deploy with
187
+ an approval gate on production, and stage-scoped secrets.
188
+
189
+ ```yaml
190
+ on: [push, pull_request, workflow_dispatch]
191
+
192
+ stages:
193
+ - name: install
194
+ checks:
195
+ - name: pnpm-install
196
+ run: pnpm install --frozen-lockfile
197
+ retry: 2
198
+ timeout: 3m
199
+
200
+ - name: quality
201
+ depends_on: [install]
202
+ parallel: true # every check runs concurrently
203
+ env:
204
+ NODE_ENV: test
205
+ checks:
206
+ - name: typecheck
207
+ run: pnpm tsc --noEmit
208
+ - name: lint
209
+ run: pnpm lint
210
+ - name: format
211
+ run: pnpm prettier --check .
212
+ - name: audit
213
+ run: pnpm audit --audit-level=high
214
+ on_fail: warn # log but don't fail the stage
215
+
216
+ - name: test
217
+ depends_on: [install]
218
+ parallel: true
219
+ env:
220
+ DATABASE_URL: postgres://test:test@localhost:5432/test
221
+ checks:
222
+ - name: unit
223
+ run: pnpm test:unit --coverage
224
+ - name: integration
225
+ run: pnpm test:integration
226
+ retry: 1
227
+ timeout: 5m
228
+ - name: e2e
229
+ if: branch == 'main' || branch =~ '^release/'
230
+ run: pnpm test:e2e
231
+ docker: mcr.microsoft.com/playwright:v1.49.0-focal
232
+ timeout: 10m
233
+
234
+ - name: security
235
+ depends_on: [install]
236
+ checks:
237
+ - name: secret-scan
238
+ run: npx gitleaks detect --no-git
239
+ - name: sast
240
+ run: pushci scan --engine claude --fail-on high
241
+
242
+ - name: build
243
+ depends_on: [quality, test, security]
244
+ checks:
245
+ - name: next-build
246
+ run: pnpm build
247
+ - name: bundle-size
248
+ run: npx size-limit
249
+ line-limit: 10
250
+
138
251
  deploy:
139
- target: cloudflare-pages
140
- trigger: merge to main
252
+ trigger: push
253
+ environments:
254
+ - name: staging
255
+ only_on: [develop]
256
+ run: npx wrangler pages deploy dist --project-name=app-staging
257
+ env:
258
+ CF_API_TOKEN: "${{ secrets.CF_API_TOKEN_STAGING }}"
259
+ - name: production
260
+ only_on: [main]
261
+ approve: true # requires interactive approval
262
+ run: npx wrangler pages deploy dist --project-name=app-prod
263
+ env:
264
+ CF_API_TOKEN: "${{ secrets.CF_API_TOKEN_PROD }}"
265
+
266
+ notify:
267
+ slack: "${{ secrets.SLACK_WEBHOOK }}"
268
+ discord: "${{ secrets.DISCORD_WEBHOOK }}"
269
+ email: oncall@example.com
270
+ ```
271
+
272
+ ### GitHub Actions parity — no rewrite needed
273
+
274
+ PushCI v1.3.1+ runs your existing `.github/workflows/*.yml` files
275
+ end-to-end via the embedded [nektos/act](https://github.com/nektos/act)
276
+ runtime. `actions/checkout@v4`, matrix builds, service containers,
277
+ composite actions, secret masking, `needs.*.outputs.*` — all work.
278
+ Just drop in a workflow and run:
279
+
280
+ ```bash
281
+ pushci actions run # runs all .github/workflows/*.yml
282
+ pushci actions run --job test # run one job
283
+ pushci actions run --dry-run # validate without containers
284
+ pushci actions doctor # check act + docker + workflow status
285
+ ```
286
+
287
+ A real complex workflow that runs unchanged:
288
+
289
+ ```yaml
290
+ name: CI
291
+ on: [push, pull_request]
292
+
293
+ jobs:
294
+ test:
295
+ runs-on: ubuntu-latest
296
+ strategy:
297
+ fail-fast: false
298
+ matrix:
299
+ node: [20, 22]
300
+ services:
301
+ postgres:
302
+ image: postgres:16
303
+ env:
304
+ POSTGRES_PASSWORD: test
305
+ ports: ['5432:5432']
306
+ options: >-
307
+ --health-cmd pg_isready --health-interval 10s
308
+ --health-timeout 5s --health-retries 5
309
+ steps:
310
+ - uses: actions/checkout@v4
311
+ - uses: actions/setup-node@v4
312
+ with:
313
+ node-version: ${{ matrix.node }}
314
+ - run: npm ci
315
+ - run: npm test
316
+ env:
317
+ DATABASE_URL: postgres://postgres:test@localhost:5432/postgres
318
+ - id: coverage
319
+ run: echo "pct=$(npm test --silent)" >> $GITHUB_OUTPUT
320
+ outputs:
321
+ coverage: ${{ steps.coverage.outputs.pct }}
322
+
323
+ deploy:
324
+ needs: test
325
+ runs-on: ubuntu-latest
326
+ if: github.ref == 'refs/heads/main'
327
+ steps:
328
+ - uses: actions/checkout@v4
329
+ - name: Deploy
330
+ run: echo "coverage was ${{ needs.test.outputs.coverage }}"
331
+ env:
332
+ CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
141
333
  ```
142
334
 
143
- Or just run `pushci init` — AI figures everything out.
335
+ Or just run `pushci init` — PushCI figures everything out automatically.
144
336
 
145
337
  ## Git Hook
146
338
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pushci",
3
- "version": "1.2.0",
4
- "description": "AI-native CI/CD that runs on your machine. Zero config, zero cost. 19 languages, 69 skills, Tailscale mesh, blast radius analysis.",
3
+ "version": "1.3.1",
4
+ "description": "AI-native CI/CD that runs on your machine. Zero config, zero cost. 33 languages, 69 skills, Tailscale mesh, blast radius analysis.",
5
5
  "bin": {
6
6
  "pushci": "bin/pushci.js"
7
7
  },
@@ -73,5 +73,8 @@
73
73
  "homepage": "https://pushci.dev",
74
74
  "engines": {
75
75
  "node": ">=16"
76
+ },
77
+ "devDependencies": {
78
+ "@playwright/test": "^1.59.1"
76
79
  }
77
80
  }