pushci 1.3.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.
- package/README.md +219 -27
- package/package.json +2 -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
|
-
**
|
|
65
|
-
Ruby, PHP, Swift, Dart, Elixir, Zig,
|
|
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
|
|
107
|
-
pushci run
|
|
108
|
-
pushci deploy
|
|
109
|
-
pushci diagnose
|
|
110
|
-
pushci status
|
|
111
|
-
pushci secret
|
|
112
|
-
pushci heal
|
|
113
|
-
pushci ask
|
|
114
|
-
pushci generate
|
|
115
|
-
pushci migrate
|
|
116
|
-
pushci mcp
|
|
117
|
-
pushci agent
|
|
118
|
-
pushci
|
|
119
|
-
pushci
|
|
120
|
-
pushci
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
140
|
-
|
|
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` —
|
|
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.3.
|
|
4
|
-
"description": "AI-native CI/CD that runs on your machine. Zero config, zero cost.
|
|
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
|
},
|