pushci 1.12.7 → 1.12.9
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 +135 -432
- package/bin/pushci-1.12.9.cdx.sbom.json +1 -0
- package/bin/pushci-darwin-amd64 +0 -0
- package/bin/pushci-darwin-arm64 +0 -0
- package/bin/pushci-linux-amd64 +0 -0
- package/bin/pushci-linux-arm64 +0 -0
- package/bin/pushci-windows-amd64.exe +0 -0
- package/bin/pushci-windows-arm64.exe +0 -0
- package/package.json +4 -2
- package/bin/pushci-1.12.7.cdx.sbom.json +0 -1
package/README.md
CHANGED
|
@@ -6,70 +6,22 @@
|
|
|
6
6
|
[](https://github.com/finsavvyai/pushci-cli/releases/latest)
|
|
7
7
|
[](https://pushci.dev/ai)
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## AI agents write the code. PushCI proves it is safe to ship.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
> One command to add a pre-push gate. Your existing CI can stay put.
|
|
11
|
+
PushCI is an **independent delivery verification and promotion control plane for AI-written changes**. It issues signed proof tied to exact source, required checks, actor, immutable artifact, environment, database state, and policy before production.
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
npm install -g pushci # one-time install
|
|
16
|
-
pushci init # AI detects your stack in 30 seconds
|
|
17
|
-
git push # tests run automatically
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
$ pushci init
|
|
22
|
-
Detecting stack ........................ Node 20 + Vite + Vitest
|
|
23
|
-
Detecting deploy target ................ Cloudflare Workers (wrangler.toml)
|
|
24
|
-
Writing pushci.yml ..................... 14 lines
|
|
25
|
-
Installing pre-push hook ............... done
|
|
26
|
-
|
|
27
|
-
$ git push
|
|
28
|
-
→ running pushci run
|
|
29
|
-
✓ lint 3.2s
|
|
30
|
-
✓ test 8.4s
|
|
31
|
-
✓ build 12.1s
|
|
32
|
-
→ 24 commits ahead of origin/main · all checks passed
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
See the current product surface at <a href="https://pushci.dev">pushci.dev</a>.
|
|
36
|
-
|
|
37
|
-
## Why PushCI?
|
|
13
|
+
The CLI is the human/native automation interface. MCP-compatible agents such as Claude Code, Cursor, Copilot, and Codex use the same governed primitives. PushCI can run work, but the independent receipt—not the executor's own green flag—is the admission record.
|
|
38
14
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
| | PushCI | GitHub Actions | GitLab CI | Jenkins |
|
|
42
|
-
|--|---------|---------------|-----------|---------|
|
|
43
|
-
| **Setup** | 30 seconds | 30+ minutes | 30+ minutes | Hours |
|
|
44
|
-
| **Config** | Zero (AI) | 50+ lines YAML | 50+ lines YAML | Groovy DSL |
|
|
45
|
-
| **Cost** | Your machine or runner pool | Hosted minutes | Hosted minutes | Server costs |
|
|
46
|
-
| **Platforms** | GitHub + GitLab + BB | GitHub only | GitLab only | All |
|
|
47
|
-
| **AI** | Auto-detects stack | None | None | None |
|
|
48
|
-
|
|
49
|
-
## Quick Start
|
|
15
|
+
PushCI runs beside existing GitHub Actions, GitLab CI, Buildkite, Jenkins, and provider delivery systems. Local, self-hosted, or customer-owned compute is the default; optional managed execution is capacity-capped, budgeted, and separately metered.
|
|
50
16
|
|
|
51
17
|
```bash
|
|
52
|
-
|
|
53
|
-
npm install -g pushci # npm (recommended)
|
|
54
|
-
brew install finsavvyai/tap/pushci # Homebrew
|
|
55
|
-
curl -fsSL https://pushci.dev/install.sh | sh # Script
|
|
56
|
-
|
|
57
|
-
# Auto-detect your stack
|
|
18
|
+
npm install -g pushci
|
|
58
19
|
pushci init
|
|
59
|
-
|
|
60
|
-
#
|
|
61
|
-
pushci run
|
|
62
|
-
|
|
63
|
-
# Something broken? Get actionable fixes
|
|
64
|
-
pushci troubleshoot
|
|
65
|
-
|
|
66
|
-
# Start the webhook server
|
|
67
|
-
GITHUB_TOKEN=xxx pushci agent serve
|
|
20
|
+
pushci verify --local
|
|
21
|
+
pushci verify --publish # authenticated, project-bound, server-signed receipt
|
|
68
22
|
```
|
|
69
23
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
PushCI includes an MCP server for AI coding agents like **Claude Code**, **Cursor**, **Windsurf**, and **Cline**.
|
|
24
|
+
Or expose the same delivery runtime to an AI agent:
|
|
73
25
|
|
|
74
26
|
```json
|
|
75
27
|
{
|
|
@@ -82,427 +34,178 @@ PushCI includes an MCP server for AI coding agents like **Claude Code**, **Curso
|
|
|
82
34
|
}
|
|
83
35
|
```
|
|
84
36
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
**Natural language**: `pushci ask "set up CI for this project"`
|
|
88
|
-
|
|
89
|
-
## Supported
|
|
37
|
+
## One independent proof across every executor
|
|
90
38
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
39
|
+
```text
|
|
40
|
+
Developer / coding agent
|
|
41
|
+
│
|
|
42
|
+
├── existing CI or customer-owned runner
|
|
43
|
+
└── optional managed execution
|
|
44
|
+
│
|
|
45
|
+
▼
|
|
46
|
+
PushCI verification gate
|
|
47
|
+
├── exact source / PR HEAD
|
|
48
|
+
├── required checks and actor
|
|
49
|
+
├── artifact digest
|
|
50
|
+
├── environment / database state
|
|
51
|
+
└── policy and approval
|
|
52
|
+
│
|
|
53
|
+
▼
|
|
54
|
+
signed receipt → promotion
|
|
55
|
+
```
|
|
97
56
|
|
|
98
|
-
|
|
99
|
-
GCP (Cloud Run/App Engine), Azure (App Service/Functions/Bicep),
|
|
100
|
-
Vercel, Railway, Fly, Render, Netlify, Docker, K8s, SSH,
|
|
101
|
-
Terraform, CloudFormation, Pulumi, Ansible
|
|
57
|
+
The coding agent may be the author and any CI may be the executor. PushCI remains the independent judge of whether the exact change is eligible to move.
|
|
102
58
|
|
|
103
|
-
##
|
|
59
|
+
## Why PushCI
|
|
104
60
|
|
|
105
|
-
|
|
61
|
+
Traditional CI assumes every change should begin by renting a clean remote machine. AI agents also tend to fall back to ad-hoc shell commands and provider-specific scripts when they need to deploy infrastructure. PushCI starts with a different model: **use the compute and delivery knowledge already available locally, expose it through one agent-friendly interface, and escalate to controlled infrastructure only when required.**
|
|
106
62
|
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
63
|
+
```text
|
|
64
|
+
Existing repository / CI
|
|
65
|
+
│
|
|
66
|
+
▼
|
|
67
|
+
PushCI init
|
|
68
|
+
│
|
|
69
|
+
├── detect stack and workflow
|
|
70
|
+
├── preserve/migrate existing CI
|
|
71
|
+
▼
|
|
72
|
+
Developer or AI agent
|
|
73
|
+
│
|
|
74
|
+
▼
|
|
75
|
+
Local / self-hosted execution
|
|
76
|
+
│
|
|
77
|
+
├── build
|
|
78
|
+
├── test
|
|
79
|
+
├── scan
|
|
80
|
+
└── migration analysis
|
|
81
|
+
│
|
|
82
|
+
▼
|
|
83
|
+
immutable artifact
|
|
84
|
+
│
|
|
85
|
+
▼
|
|
86
|
+
provision / preview / staging
|
|
87
|
+
│
|
|
88
|
+
▼
|
|
89
|
+
verification
|
|
90
|
+
│
|
|
91
|
+
▼
|
|
92
|
+
safe promotion
|
|
112
93
|
```
|
|
113
94
|
|
|
114
|
-
|
|
95
|
+
PushCI is deliberately **local-first, not local-only**. Fast validation can run on the developer machine; teams can use self-hosted runner pools and optional managed execution. Existing GitHub Actions, GitLab CI, Jenkins, Buildkite, and other delivery systems can remain in place while workloads migrate incrementally.
|
|
115
96
|
|
|
116
|
-
|
|
117
|
-
curl -X POST https://api.pushci.dev/api/channels/connect \
|
|
118
|
-
-H "Authorization: Bearer $TOKEN" \
|
|
119
|
-
-d '{"channelType":"slack","credentials":{"accessToken":"xoxb-...","teamId":"T123"}}'
|
|
120
|
-
```
|
|
97
|
+
## Core value
|
|
121
98
|
|
|
122
|
-
|
|
99
|
+
### Agent-native delivery
|
|
123
100
|
|
|
124
|
-
|
|
125
|
-
|----------|---------|----------------|
|
|
126
|
-
| WhatsApp | Meta Business API | 4,000 chars |
|
|
127
|
-
| Slack | Events API | 39,000 chars |
|
|
128
|
-
| Discord | Interactions | 2,000 chars |
|
|
129
|
-
| Telegram | Bot API | 4,000 chars |
|
|
130
|
-
| Custom | Webhook | 40,000 chars |
|
|
101
|
+
The CLI and MCP server expose the delivery lifecycle as callable capabilities. An agent can inspect a repository, initialize/migrate its pipeline, run tests, diagnose failures, manage secrets, provision supported infrastructure, create preview environments, deploy, and request verification without learning each provider's bespoke operational interface.
|
|
131
102
|
|
|
132
|
-
|
|
103
|
+
This is the strategic agent loop:
|
|
133
104
|
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
pushci
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
pushci
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
pushci
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
pushci index Build dependency graph for blast radius
|
|
149
|
-
pushci skill Install/list/remove marketplace skills
|
|
150
|
-
pushci login Authenticate with PushCI (Pro)
|
|
151
|
-
pushci logout Remove saved credentials
|
|
152
|
-
pushci doctor Check environment health
|
|
153
|
-
pushci troubleshoot Diagnose issues with actionable fixes
|
|
154
|
-
pushci trace View Perfetto performance traces
|
|
155
|
-
pushci release Build & publish release locally ($0)
|
|
156
|
-
pushci promote Register with AI registries
|
|
157
|
-
pushci voice TTS narration for runs (curb / office / deadpan-tech)
|
|
158
|
-
pushci uninstall --yes Remove hooks, config, and .pushci after confirmation
|
|
159
|
-
pushci version Print version
|
|
105
|
+
```text
|
|
106
|
+
agent writes code
|
|
107
|
+
↓
|
|
108
|
+
pushci build / run
|
|
109
|
+
↓
|
|
110
|
+
failure → structured diagnosis → repair
|
|
111
|
+
↓
|
|
112
|
+
pushci provision / preview
|
|
113
|
+
↓
|
|
114
|
+
integration verification
|
|
115
|
+
↓
|
|
116
|
+
pushci deploy / promote
|
|
117
|
+
↓
|
|
118
|
+
receipt + audit trail
|
|
160
119
|
```
|
|
161
120
|
|
|
162
|
-
|
|
121
|
+
The long-term goal is **bounded autonomy**: agents can move software forward quickly, while PushCI supplies policy, credentials boundaries, environment isolation, artifact lineage, and verification evidence.
|
|
163
122
|
|
|
164
|
-
|
|
123
|
+
### Use the compute you already own
|
|
165
124
|
|
|
166
|
-
|
|
125
|
+
Keep install, lint, unit tests, builds, scans, and other cache-friendly work local when policy allows it. Remote infrastructure is reserved for stages that actually require cloud bindings, shared services, controlled builders, or realistic environments.
|
|
167
126
|
|
|
168
|
-
|
|
169
|
-
pushci voice list # show built-in personas
|
|
170
|
-
pushci voice say "deploying" --persona curb-style
|
|
171
|
-
pushci voice test --persona office-style # demo all 6 lifecycle events
|
|
172
|
-
pushci voice joke --diff main # AI riffs on the diff vs main
|
|
173
|
-
pushci run --voice # auto-narrate pipeline events
|
|
174
|
-
```
|
|
127
|
+
### Migrate without a platform rewrite
|
|
175
128
|
|
|
176
|
-
|
|
129
|
+
`pushci init` detects stack and existing CI intent. The target experience is side-by-side adoption: run PushCI locally, prove the feedback/cost benefit, then migrate selected expensive stages when the team is ready. This also gives agents a normalized interface over legacy delivery systems rather than requiring them to rewrite everything first.
|
|
177
130
|
|
|
178
|
-
|
|
179
|
-
|---|---|
|
|
180
|
-
| `curb-style` | Petty frustration, awkward incredulity |
|
|
181
|
-
| `office-style` | Oblivious enthusiasm, motivational confusion |
|
|
182
|
-
| `deadpan-tech` | Sysadmin superiority, dark contempt |
|
|
183
|
-
| `deadpan-narrator` | Neutral, no character |
|
|
131
|
+
### Build once, promote the verified artifact
|
|
184
132
|
|
|
185
|
-
|
|
133
|
+
Where the deployment target supports immutable artifacts, PushCI's direction is build-once/promote-everywhere. Preview, staging, and production should refer to the same artifact digest rather than silently rebuilding different binaries at every step.
|
|
186
134
|
|
|
187
|
-
|
|
135
|
+
### Verify realistic environments
|
|
188
136
|
|
|
189
|
-
|
|
137
|
+
PushCI includes preview-environment lifecycle capabilities. Preview and staging can become structured verification evidence including provider/target identity, database isolation, migration state, configuration/binding fingerprints, health checks, and the exact artifact deployed.
|
|
190
138
|
|
|
191
|
-
|
|
192
|
-
personas:
|
|
193
|
-
- name: pirate-style
|
|
194
|
-
voice: Daniel # macOS voice; run `say -v ?` to enumerate
|
|
195
|
-
description: Pirate-themed deploy commentary
|
|
196
|
-
phrases:
|
|
197
|
-
start: ["Aye, hoist the colors. Deploying."]
|
|
198
|
-
pass: ["Ye scurvy tests passed."]
|
|
199
|
-
fail: ["Avast, the build hath sunk."]
|
|
200
|
-
```
|
|
139
|
+
### Govern human and AI-generated changes
|
|
201
140
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
PushCI resolves secret references inline in `pushci.yml` env blocks.
|
|
205
|
-
Three schemes are supported today; PushCI never writes a plaintext
|
|
206
|
-
secret to disk it didn't already encrypt.
|
|
207
|
-
|
|
208
|
-
| Scheme | Backed by | Best for |
|
|
209
|
-
|---|---|---|
|
|
210
|
-
| `keychain://service[#account]` | macOS Keychain / Windows Credential Manager / Linux Secret Service, with AES-encrypted fallback at `~/.pushci/keychain.enc` for headless CI | Local dev, individual machines |
|
|
211
|
-
| `vault://path#field` | HashiCorp Vault AppRole (`VAULT_ADDR` + `VAULT_ROLE_ID` + `VAULT_SECRET_ID`) | Teams, audited environments |
|
|
212
|
-
| `pushci secrets set KEY VAL` | Per-project AES file at `.pushci/secrets.enc`, machine-bound | Quick one-offs, throwaway scripts |
|
|
213
|
-
|
|
214
|
-
```yaml
|
|
215
|
-
# pushci.yml
|
|
216
|
-
stages:
|
|
217
|
-
- name: publish
|
|
218
|
-
env:
|
|
219
|
-
NPM_TOKEN: keychain://npm-publish-token
|
|
220
|
-
DEPLOY_KEY: keychain://deploy-bot#prod
|
|
221
|
-
DB_PASSWORD: vault://secret/data/prod/db#password
|
|
222
|
-
checks:
|
|
223
|
-
- name: publish
|
|
224
|
-
run: npm publish
|
|
225
|
-
```
|
|
141
|
+
Humans and agents use the same delivery primitives but can receive different policy. PushCI can record actor/provenance when available, apply stricter requirements to autonomous changes, and preserve an audit trail of what an agent actually built, provisioned, changed, and deployed.
|
|
226
142
|
|
|
227
|
-
|
|
143
|
+
## Quick start
|
|
228
144
|
|
|
229
145
|
```bash
|
|
230
|
-
|
|
231
|
-
pushci
|
|
232
|
-
pushci
|
|
233
|
-
pushci secrets keychain list # fallback-file entries only
|
|
234
|
-
pushci secrets keychain rm npm-publish-token
|
|
146
|
+
npm install -g pushci
|
|
147
|
+
pushci init
|
|
148
|
+
pushci verify
|
|
235
149
|
```
|
|
236
150
|
|
|
237
|
-
|
|
238
|
-
common `.zshrc` helper functions work side-by-side:
|
|
151
|
+
Other install options:
|
|
239
152
|
|
|
240
153
|
```bash
|
|
241
|
-
|
|
242
|
-
|
|
154
|
+
brew install finsavvyai/tap/pushci
|
|
155
|
+
curl -fsSL https://pushci.dev/install.sh | sh
|
|
243
156
|
```
|
|
244
157
|
|
|
245
|
-
|
|
246
|
-
get`, and vice versa — no `go-keyring-base64:` prefix gymnastics.
|
|
247
|
-
|
|
248
|
-
**Headless Linux CI:** when D-Bus and Secret Service aren't running,
|
|
249
|
-
PushCI falls back transparently to an AES-encrypted file at
|
|
250
|
-
`~/.pushci/keychain.enc` with a machine-bound key. A one-time stderr
|
|
251
|
-
warning fires the first time a fallback read or write happens, so the
|
|
252
|
-
behavior is never silent. Override account default with the `#account`
|
|
253
|
-
suffix; the current OS user is used when omitted.
|
|
254
|
-
|
|
255
|
-
## Configuration
|
|
256
|
-
|
|
257
|
-
`pushci.yml` is optional — `pushci init` generates one that works, and
|
|
258
|
-
zero-config mode auto-detects your stack. When you want more control,
|
|
259
|
-
PushCI supports three authoring styles. Full reference is at
|
|
260
|
-
[pushci.dev/docs/pushci-yaml](https://pushci.dev/docs/pushci-yaml).
|
|
261
|
-
|
|
262
|
-
### Simple example
|
|
263
|
-
|
|
264
|
-
Zero-config Node.js app with linear stages, single-target deploy on
|
|
265
|
-
`main`, and Slack notifications. Drop this into your repo as
|
|
266
|
-
`pushci.yml` and run `pushci run`.
|
|
267
|
-
|
|
268
|
-
```yaml
|
|
269
|
-
on: [push, pull_request]
|
|
270
|
-
|
|
271
|
-
stages:
|
|
272
|
-
- name: install
|
|
273
|
-
checks:
|
|
274
|
-
- name: deps
|
|
275
|
-
run: pnpm install --frozen-lockfile
|
|
276
|
-
|
|
277
|
-
- name: lint
|
|
278
|
-
depends_on: [install]
|
|
279
|
-
checks:
|
|
280
|
-
- name: eslint
|
|
281
|
-
run: pnpm lint
|
|
282
|
-
|
|
283
|
-
- name: test
|
|
284
|
-
depends_on: [install]
|
|
285
|
-
checks:
|
|
286
|
-
- name: vitest
|
|
287
|
-
run: pnpm test
|
|
288
|
-
|
|
289
|
-
- name: build
|
|
290
|
-
depends_on: [install, lint, test]
|
|
291
|
-
checks:
|
|
292
|
-
- name: next-build
|
|
293
|
-
run: pnpm build
|
|
294
|
-
|
|
295
|
-
deploy:
|
|
296
|
-
trigger: push
|
|
297
|
-
only_on: [main]
|
|
298
|
-
run: npx wrangler pages deploy dist --project-name=my-app
|
|
299
|
-
|
|
300
|
-
notify:
|
|
301
|
-
slack: "${{ secrets.SLACK_WEBHOOK }}"
|
|
302
|
-
```
|
|
158
|
+
Useful commands:
|
|
303
159
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
run: pnpm install --frozen-lockfile
|
|
318
|
-
retry: 2
|
|
319
|
-
timeout: 3m
|
|
320
|
-
|
|
321
|
-
- name: quality
|
|
322
|
-
depends_on: [install]
|
|
323
|
-
parallel: true # every check runs concurrently
|
|
324
|
-
env:
|
|
325
|
-
NODE_ENV: test
|
|
326
|
-
checks:
|
|
327
|
-
- name: typecheck
|
|
328
|
-
run: pnpm tsc --noEmit
|
|
329
|
-
- name: lint
|
|
330
|
-
run: pnpm lint
|
|
331
|
-
- name: format
|
|
332
|
-
run: pnpm prettier --check .
|
|
333
|
-
- name: audit
|
|
334
|
-
run: pnpm audit --audit-level=high
|
|
335
|
-
on_fail: warn # log but don't fail the stage
|
|
336
|
-
|
|
337
|
-
- name: test
|
|
338
|
-
depends_on: [install]
|
|
339
|
-
parallel: true
|
|
340
|
-
env:
|
|
341
|
-
DATABASE_URL: postgres://test:test@localhost:5432/test
|
|
342
|
-
checks:
|
|
343
|
-
- name: unit
|
|
344
|
-
run: pnpm test:unit --coverage
|
|
345
|
-
- name: integration
|
|
346
|
-
run: pnpm test:integration
|
|
347
|
-
retry: 1
|
|
348
|
-
timeout: 5m
|
|
349
|
-
- name: e2e
|
|
350
|
-
if: branch == 'main' || branch =~ '^release/'
|
|
351
|
-
run: pnpm test:e2e
|
|
352
|
-
docker: mcr.microsoft.com/playwright:v1.49.0-focal
|
|
353
|
-
timeout: 10m
|
|
354
|
-
|
|
355
|
-
- name: security
|
|
356
|
-
depends_on: [install]
|
|
357
|
-
checks:
|
|
358
|
-
- name: secret-scan
|
|
359
|
-
run: npx gitleaks detect --no-git
|
|
360
|
-
- name: sast
|
|
361
|
-
run: pushci scan --engine claude --fail-on high
|
|
362
|
-
|
|
363
|
-
- name: build
|
|
364
|
-
depends_on: [quality, test, security]
|
|
365
|
-
checks:
|
|
366
|
-
- name: next-build
|
|
367
|
-
run: pnpm build
|
|
368
|
-
- name: bundle-size
|
|
369
|
-
run: npx size-limit
|
|
370
|
-
line-limit: 10
|
|
371
|
-
|
|
372
|
-
deploy:
|
|
373
|
-
trigger: push
|
|
374
|
-
environments:
|
|
375
|
-
- name: staging
|
|
376
|
-
only_on: [develop]
|
|
377
|
-
run: npx wrangler pages deploy dist --project-name=app-staging
|
|
378
|
-
env:
|
|
379
|
-
CF_API_TOKEN: "${{ secrets.CF_API_TOKEN_STAGING }}"
|
|
380
|
-
- name: production
|
|
381
|
-
only_on: [main]
|
|
382
|
-
approve: true # requires interactive approval
|
|
383
|
-
run: npx wrangler pages deploy dist --project-name=app-prod
|
|
384
|
-
env:
|
|
385
|
-
CF_API_TOKEN: "${{ secrets.CF_API_TOKEN_PROD }}"
|
|
386
|
-
|
|
387
|
-
notify:
|
|
388
|
-
slack: "${{ secrets.SLACK_WEBHOOK }}"
|
|
389
|
-
discord: "${{ secrets.DISCORD_WEBHOOK }}"
|
|
390
|
-
email: oncall@example.com
|
|
160
|
+
```text
|
|
161
|
+
pushci init detect the stack and configure/migrate validation
|
|
162
|
+
pushci verify verify the current change and produce evidence
|
|
163
|
+
pushci run execute the pipeline directly
|
|
164
|
+
pushci preview manage realistic preview environments
|
|
165
|
+
pushci migrate migrate an existing GitHub Actions workflow
|
|
166
|
+
pushci deploy validate and execute deployments
|
|
167
|
+
pushci troubleshoot diagnose failures with actionable fixes
|
|
168
|
+
pushci index build the dependency graph / blast-radius model
|
|
169
|
+
pushci mcp expose PushCI delivery capabilities to AI coding agents
|
|
170
|
+
pushci mcp configure hermes install a governed Hermes delivery operator
|
|
171
|
+
pushci agent run PushCI agent workflows
|
|
172
|
+
pushci runner manage execution capacity
|
|
391
173
|
```
|
|
392
174
|
|
|
393
|
-
|
|
394
|
-
sensitive `candidate → staging → candidate → sandbox → candidate → production`
|
|
395
|
-
path. See [Release Flow Policies](docs/RELEASE_FLOWS.md).
|
|
396
|
-
|
|
397
|
-
### GitHub Actions parity — no rewrite needed
|
|
175
|
+
## AI-agent integration
|
|
398
176
|
|
|
399
|
-
PushCI
|
|
400
|
-
end-to-end via the embedded [nektos/act](https://github.com/nektos/act)
|
|
401
|
-
runtime. `actions/checkout@v4`, matrix builds, service containers,
|
|
402
|
-
composite actions, secret masking, `needs.*.outputs.*` — all work.
|
|
403
|
-
Just drop in a workflow and run:
|
|
404
|
-
|
|
405
|
-
```bash
|
|
406
|
-
pushci actions run # runs all .github/workflows/*.yml
|
|
407
|
-
pushci actions run --job test # run one job
|
|
408
|
-
pushci actions run --dry-run # validate without containers
|
|
409
|
-
pushci actions doctor # check act + docker + workflow status
|
|
410
|
-
```
|
|
177
|
+
PushCI includes an MCP server for coding agents such as Claude Code, Cursor, Windsurf, Cline, and other MCP-compatible clients.
|
|
411
178
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
strategy:
|
|
422
|
-
fail-fast: false
|
|
423
|
-
matrix:
|
|
424
|
-
node: [20, 22]
|
|
425
|
-
services:
|
|
426
|
-
postgres:
|
|
427
|
-
image: postgres:16
|
|
428
|
-
env:
|
|
429
|
-
POSTGRES_PASSWORD: test
|
|
430
|
-
ports: ['5432:5432']
|
|
431
|
-
options: >-
|
|
432
|
-
--health-cmd pg_isready --health-interval 10s
|
|
433
|
-
--health-timeout 5s --health-retries 5
|
|
434
|
-
steps:
|
|
435
|
-
- uses: actions/checkout@v4
|
|
436
|
-
- uses: actions/setup-node@v4
|
|
437
|
-
with:
|
|
438
|
-
node-version: ${{ matrix.node }}
|
|
439
|
-
- run: npm ci
|
|
440
|
-
- run: npm test
|
|
441
|
-
env:
|
|
442
|
-
DATABASE_URL: postgres://postgres:test@localhost:5432/postgres
|
|
443
|
-
- id: coverage
|
|
444
|
-
run: echo "pct=$(npm test --silent)" >> $GITHUB_OUTPUT
|
|
445
|
-
outputs:
|
|
446
|
-
coverage: ${{ steps.coverage.outputs.pct }}
|
|
447
|
-
|
|
448
|
-
deploy:
|
|
449
|
-
needs: test
|
|
450
|
-
runs-on: ubuntu-latest
|
|
451
|
-
if: github.ref == 'refs/heads/main'
|
|
452
|
-
steps:
|
|
453
|
-
- uses: actions/checkout@v4
|
|
454
|
-
- name: Deploy
|
|
455
|
-
run: echo "coverage was ${{ needs.test.outputs.coverage }}"
|
|
456
|
-
env:
|
|
457
|
-
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"mcpServers": {
|
|
182
|
+
"pushci": {
|
|
183
|
+
"command": "pushci",
|
|
184
|
+
"args": ["mcp"]
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
458
188
|
```
|
|
459
189
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
## Git Hook
|
|
463
|
-
|
|
464
|
-
`pushci init` installs a pre-push hook that runs checks before every push.
|
|
465
|
-
The hook is designed to never block your workflow:
|
|
466
|
-
|
|
467
|
-
- **Skip once**: `git push --no-verify`
|
|
468
|
-
- **Disable permanently**: `export PUSHCI_SKIP_HOOK=1`
|
|
469
|
-
- **Auto-skips** if the pushci binary is unavailable (no download hang)
|
|
190
|
+
Available MCP capabilities include stack detection, pipeline initialization, pipeline execution, status, environment diagnosis, secret management, security scanning, migration recommendations, healing/diagnosis, and agent workflows. The product direction is to expose provisioning, preview, verification, and promotion through the same governed agent interface wherever the underlying PushCI capability is already available and safe to expose.
|
|
470
191
|
|
|
471
|
-
##
|
|
192
|
+
## Verification model
|
|
472
193
|
|
|
473
|
-
|
|
474
|
-
|------|-----------|-------------------|------------|
|
|
475
|
-
| Unlimited local runs | Unlimited repos | Everything in Pro | Everything in Team |
|
|
476
|
-
| AI stack detection | AI diagnosis (100/mo) | 2000 cloud minutes | Unlimited cloud minutes |
|
|
477
|
-
| 2 deploy targets | 22 deploy targets | SSO / SAML | SCIM + 7-year audit |
|
|
478
|
-
| Community support | Dashboard + analytics | Audit logs + governance | Dedicated tenant option |
|
|
194
|
+
The core product primitive is a software-change **verification**. A verification binds evidence not only to code, but to the delivery path an agent or developer executed: exact repository/commit and dirty-tree state, actor, checks, artifact, environment, migration state, policy, savings, and results.
|
|
479
195
|
|
|
480
|
-
|
|
196
|
+
Receipts have deterministic local identities and tamper-checked history. `pushci verify --publish` sends a completed receipt to the authenticated project, where the control plane independently recomputes its evidence hash, stores an audited ledger row, and returns a project-bound ECDSA P-256 attestation. In the immutable image-promotion path, artifact passports embed that receipt and production requires the exact published attestation. GitHub repositories can also receive one `PushCI / Verification` Check Run bound to the live PR HEAD; a new HEAD immediately makes the prior receipt ineligible. Locally asserted agent metadata remains distinguishable from provider-verified provenance.
|
|
481
197
|
|
|
482
|
-
|
|
483
|
-
- **AI Agents**: https://pushci.dev/ai
|
|
484
|
-
- **Cost Calculator**: https://pushci.dev/tools/cost-calculator
|
|
485
|
-
- **Compare**: [vs GitHub Actions](https://pushci.dev/vs/github-actions) | [vs GitLab CI](https://pushci.dev/vs/gitlab-ci) | [vs CircleCI](https://pushci.dev/vs/circleci) | [vs Jenkins](https://pushci.dev/vs/jenkins)
|
|
198
|
+
## Documentation
|
|
486
199
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
-
|
|
493
|
-
-
|
|
494
|
-
-
|
|
495
|
-
- Add tests
|
|
496
|
-
|
|
497
|
-
Please read our [Code of Conduct](CODE_OF_CONDUCT.md) before contributing.
|
|
498
|
-
|
|
499
|
-
## Security
|
|
500
|
-
|
|
501
|
-
Found a vulnerability? See [SECURITY.md](SECURITY.md) for our disclosure policy.
|
|
200
|
+
- [CLI reference](docs/CLI.md)
|
|
201
|
+
- [Verification evidence](docs/VERIFICATION_EVIDENCE.md)
|
|
202
|
+
- [Verification marketing claim matrix](docs/VERIFICATION_MARKETING_CLAIM_MATRIX.md)
|
|
203
|
+
- [AI / MCP integration](https://pushci.dev/ai)
|
|
204
|
+
- [pushci.yml guide](https://pushci.dev/docs/pushci-yaml)
|
|
205
|
+
- [Build roadmap](ROADMAP.md)
|
|
206
|
+
- [GitHub App and verification implementation plan](.planning/github-app-verification-plan.md)
|
|
207
|
+
- [Product refinement opportunities](.planning/product-refinement-opportunities.md)
|
|
502
208
|
|
|
503
209
|
## License
|
|
504
210
|
|
|
505
|
-
|
|
506
|
-
offering a competing hosted CI/CD service. Converts to MIT on 2029-04-06.
|
|
507
|
-
|
|
508
|
-
PushCI is a trademark of FinsavvyAI. See [LICENSE](LICENSE) for full terms.
|
|
211
|
+
PushCI is licensed under BUSL-1.1. See [LICENSE](LICENSE).
|