@openge/forge-release-vercel 0.1.0-rc.1 → 0.1.0-rc.2
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 +43 -6
- package/dist/cli-arguments.js +1 -1
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-runner.js +2 -2
- package/dist/cli-runner.js.map +1 -1
- package/dist/contracts.d.ts +58 -6
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +2 -0
- package/dist/contracts.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/node/config.d.ts.map +1 -1
- package/dist/node/config.js +27 -5
- package/dist/node/config.js.map +1 -1
- package/dist/node/execution.d.ts +4 -1
- package/dist/node/execution.d.ts.map +1 -1
- package/dist/node/execution.js +48 -10
- package/dist/node/execution.js.map +1 -1
- package/dist/node/git-context.d.ts +3 -0
- package/dist/node/git-context.d.ts.map +1 -0
- package/dist/node/git-context.js +9 -0
- package/dist/node/git-context.js.map +1 -0
- package/dist/node/git-stream.d.ts +5 -0
- package/dist/node/git-stream.d.ts.map +1 -0
- package/dist/node/git-stream.js +41 -0
- package/dist/node/git-stream.js.map +1 -0
- package/dist/node/git.js +1 -1
- package/dist/node/git.js.map +1 -1
- package/dist/node/lock.d.ts +7 -1
- package/dist/node/lock.d.ts.map +1 -1
- package/dist/node/lock.js +2 -2
- package/dist/node/lock.js.map +1 -1
- package/dist/node/managed-budget.d.ts +28 -0
- package/dist/node/managed-budget.d.ts.map +1 -0
- package/dist/node/managed-budget.js +131 -0
- package/dist/node/managed-budget.js.map +1 -0
- package/dist/node/managed-checkout.d.ts +5 -0
- package/dist/node/managed-checkout.d.ts.map +1 -0
- package/dist/node/managed-checkout.js +104 -0
- package/dist/node/managed-checkout.js.map +1 -0
- package/dist/node/managed-closure.d.ts +4 -0
- package/dist/node/managed-closure.d.ts.map +1 -0
- package/dist/node/managed-closure.js +10 -0
- package/dist/node/managed-closure.js.map +1 -0
- package/dist/node/managed-io.d.ts +23 -0
- package/dist/node/managed-io.d.ts.map +1 -0
- package/dist/node/managed-io.js +168 -0
- package/dist/node/managed-io.js.map +1 -0
- package/dist/node/managed-paths.d.ts +7 -0
- package/dist/node/managed-paths.d.ts.map +1 -0
- package/dist/node/managed-paths.js +191 -0
- package/dist/node/managed-paths.js.map +1 -0
- package/dist/node/managed-process.d.ts +3 -0
- package/dist/node/managed-process.d.ts.map +1 -0
- package/dist/node/managed-process.js +110 -0
- package/dist/node/managed-process.js.map +1 -0
- package/dist/node/managed-recovery-lock.d.ts +7 -0
- package/dist/node/managed-recovery-lock.d.ts.map +1 -0
- package/dist/node/managed-recovery-lock.js +61 -0
- package/dist/node/managed-recovery-lock.js.map +1 -0
- package/dist/node/managed-recovery.d.ts +13 -0
- package/dist/node/managed-recovery.d.ts.map +1 -0
- package/dist/node/managed-recovery.js +395 -0
- package/dist/node/managed-recovery.js.map +1 -0
- package/dist/node/managed-release.d.ts +3 -0
- package/dist/node/managed-release.d.ts.map +1 -0
- package/dist/node/managed-release.js +102 -0
- package/dist/node/managed-release.js.map +1 -0
- package/dist/node/managed-state.d.ts +7 -0
- package/dist/node/managed-state.d.ts.map +1 -0
- package/dist/node/managed-state.js +110 -0
- package/dist/node/managed-state.js.map +1 -0
- package/dist/node/owned-command-runner.d.ts +3 -0
- package/dist/node/owned-command-runner.d.ts.map +1 -0
- package/dist/node/owned-command-runner.js +10 -0
- package/dist/node/owned-command-runner.js.map +1 -0
- package/dist/node/process-identities.d.ts +5 -0
- package/dist/node/process-identities.d.ts.map +1 -0
- package/dist/node/process-identities.js +23 -0
- package/dist/node/process-identities.js.map +1 -0
- package/dist/node/publication.d.ts +5 -0
- package/dist/node/publication.d.ts.map +1 -0
- package/dist/node/publication.js +57 -0
- package/dist/node/publication.js.map +1 -0
- package/dist/node/release-commands.d.ts +4 -0
- package/dist/node/release-commands.d.ts.map +1 -0
- package/dist/node/release-commands.js +6 -0
- package/dist/node/release-commands.js.map +1 -0
- package/dist/node/release-context.d.ts +128 -0
- package/dist/node/release-context.d.ts.map +1 -0
- package/dist/node/release-context.js +2 -0
- package/dist/node/release-context.js.map +1 -0
- package/dist/node/release.d.ts.map +1 -1
- package/dist/node/release.js +20 -139
- package/dist/node/release.js.map +1 -1
- package/dist/node/source.d.ts +14 -0
- package/dist/node/source.d.ts.map +1 -0
- package/dist/node/source.js +95 -0
- package/dist/node/source.js.map +1 -0
- package/dist/node/workspace-release.d.ts +5 -0
- package/dist/node/workspace-release.d.ts.map +1 -0
- package/dist/node/workspace-release.js +122 -0
- package/dist/node/workspace-release.js.map +1 -0
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@ pnpm exec forge-vercel-release login
|
|
|
9
9
|
pnpm exec forge-vercel-release publish
|
|
10
10
|
pnpm exec forge-vercel-release status
|
|
11
11
|
pnpm exec forge-vercel-release verify --sha <full-40-character-sha>
|
|
12
|
+
pnpm exec forge-vercel-release recover
|
|
12
13
|
```
|
|
13
14
|
|
|
14
15
|
## Configuration
|
|
@@ -17,7 +18,8 @@ The default file is `release.config.json`, relative to `--cwd` (default: the cur
|
|
|
17
18
|
|
|
18
19
|
```json
|
|
19
20
|
{
|
|
20
|
-
"schemaVersion":
|
|
21
|
+
"schemaVersion": 2,
|
|
22
|
+
"source": { "mode": "workspace" },
|
|
21
23
|
"git": {
|
|
22
24
|
"remote": "origin",
|
|
23
25
|
"repository": "github.com/example/site",
|
|
@@ -46,7 +48,35 @@ The default file is `release.config.json`, relative to `--cwd` (default: the cur
|
|
|
46
48
|
|
|
47
49
|
Both command arrays contain 1–32 entries. Each entry accepts only `command`, optional `args` (up to 128 arguments), and optional `timeoutMs`. Times are positive safe integers: commands and deployment waits are capped at one hour, requests at five minutes, and `pollMs` cannot exceed `deploymentMs`. Command-specific timeouts are capped by `commandMs`. Output is bounded per stream to `maxOutputBytes` (at most 1 MiB); configured job output may be truncated, while truncated Git/API protocol output fails closed. Add `.tmp/` to the consuming repository's ignore rules.
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
Prepare/check/acceptance commands receive protected `FORGE_RELEASE_COMMAND=check|publish|verify` and `FORGE_RELEASE_SHA`; acceptance also receives `FORGE_RELEASE_URL` and `FORGE_RELEASE_DEPLOYMENT_ID`. Inherited values cannot override this metadata. It describes intent, not business authorization. Consumers own business assertions and any idempotent remote preparation. The build marker must be deployed from source and contain the full SHA; do not fabricate it during verification.
|
|
52
|
+
|
|
53
|
+
## Managed commit mode
|
|
54
|
+
|
|
55
|
+
Schema 2 requires an explicit source; schema 1 is rejected without conversion. The example above executes directly in the existing clean workspace. To use one reusable checkout, replace `source` with:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"mode": "managed-commit",
|
|
60
|
+
"slotPath": ".tmp/release-slot",
|
|
61
|
+
"maxBytes": 2147483648,
|
|
62
|
+
"minFreeBytes": 5368709120,
|
|
63
|
+
"sampleIntervalMs": 1000,
|
|
64
|
+
"install": { "packageManager": "pnpm" },
|
|
65
|
+
"prepare": []
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Commit ignore rules for the slot and `.tmp/forge-vercel-release/` first. `slotPath` uses relative ASCII components without `.`, `..`, `.git` or overlap with management metadata. Byte limits are positive safe integers; the example allows 2 GiB logical bytes and requires 5 GiB free. Sampling intervals are 250–5000 ms. `prepare` permits 0–32 foreground commands with the same command schema as checks. The public package does not bind a drive, project, or business permission.
|
|
70
|
+
|
|
71
|
+
Managed inputs come from one full SHA on the development branch: committed config, scripts, lockfile and exact `packageManager: "pnpm@<version>"`. Tracked files/index/config must be clean; unrelated untracked files remain untouched. Config objects cannot override managed inputs. A real independent clone fetches unpushed candidate objects from the frozen source, runs `pnpm install --frozen-lockfile`, prepare and checks, and only then permits pushes. The installed pnpm version must match; the tool does not download another pnpm version. It never copies source `.git/config`, creates worktrees, switches the source branch, resets/stashes/cleans, forces installation or relocates the shared store.
|
|
72
|
+
|
|
73
|
+
One owned slot reuses dependencies and same-SHA output; later commits require a clean fast-forward. Dirty/diverged checkouts fail without a second slot. Source symlinks, gitlinks, LFS pointers, unsupported encodings/filenames, external Git object dependencies and replaced/junction roots are rejected. Git tree listings are streamed with bounded records, rather than accepted after capture truncation. Inherited Git directory/index/object-database/namespace overrides are rejected; trusted authentication/routing still applies. An existing anchor cannot silently rebind to a different slot/config, or switch execution to workspace mode.
|
|
74
|
+
|
|
75
|
+
Logical-byte accounting includes every slot entry plus the source anchor; hardlinks count separately, internal links are not traversed, and external/unknown links fail. Each observation visits at most 500000 entries. Metadata writes reserve their temporary peak. Admission, command monitoring and stage observations cancel on limit violations or incomplete observations. Reports expose observed maxima, free-space minima and observation gaps. **Finite sampling is not an OS quota:** writes may briefly exceed a limit between observations. The tool does not modify host quotas or clean shared stores.
|
|
76
|
+
|
|
77
|
+
Commands must finish in the foreground. Managed execution requires Windows x64 Job Objects or Linux/glibc x64 subreaper/wait/pidfd support. A runner manual gate persists the real identity, scope ID and exact run/command binding, rechecks budget/ownership, then authorizes the job. Only matching OS-proven normal/empty closure permits another command or lock release. Cancellation, crash gaps, identity changes or surviving descendants remain unknown even if force cleanup proves emptiness. Historical schema-2 polling witnesses remain readable but cannot establish closure or release a lock. Old gate/result files are never executed or automatically removed.
|
|
78
|
+
|
|
79
|
+
Koffi 3.3.3 is a pinned, lazy native dependency. This repository and tarball consumers disable its install script with `allowBuilds.koffi: false`; consumers should do the same. Missing prebuilds/capabilities fail before the job, with no runtime download, compilation or fallback. Owned scopes manage trusted commands, not a security sandbox: do not delegate work to WMI/system services or other external process owners. Workspace mode retains its existing behavior.
|
|
50
80
|
|
|
51
81
|
## Commands and side effects
|
|
52
82
|
|
|
@@ -57,10 +87,13 @@ Acceptance commands receive `FORGE_RELEASE_SHA`, `FORGE_RELEASE_URL`, and `FORGE
|
|
|
57
87
|
| `status` | Read a deployment for `--sha`, otherwise the latest publish receipt's frozen SHA, otherwise local HEAD if no receipt exists. Returns deployment state; successful querying alone does not imply READY. No checks, acceptance, or pushes. |
|
|
58
88
|
| `verify` | Independently query project and deployment, require READY and correct Git source, then verify production alias, anonymous build marker, and acceptance jobs. Uses the same SHA selection as `status`. No pushes. |
|
|
59
89
|
| `login` | Explicitly delegate to the pinned official Vercel CLI and let the user authorize it. No release config is required. Bounded to ten minutes. The CLI prints login instructions to stderr. |
|
|
90
|
+
| `recover` | Managed mode only: claim recovery, inspect owner/processes/real refs/deployment, reconcile proven facts and release the exact old lock only when closure is established. No install, checks, acceptance, pushes, deployment creation or rollback. |
|
|
91
|
+
|
|
92
|
+
Options are `--cwd DIR`, `--config FILE`, and `--sha SHA` (only `status`/`verify`). `--help` prints JSON usage. Standard output is one structured JSON report. Exit codes: `0` successful command, `1` operational failure, `2` invalid CLI arguments. SIGINT/SIGTERM cancel active work; managed locks are released only with proven closure/effects. No command automatically commits, switches branches, force-pushes, creates/uploads deployments, rolls back, or rewrites history. Vercel requests are GET through `vercel api --raw --non-interactive`, reusing the official CLI session. Only `login` initiates login.
|
|
60
93
|
|
|
61
|
-
|
|
94
|
+
Same-SHA reruns use ordinary exact-SHA pushes and the server's porcelain up-to-date result, locating existing deployments without requesting another upload. Success survives later failure in `effects`. An ambiguous managed push retains `unknown` and its lock: use `recover` before retrying. With proven closure, candidate refs reconcile to `already-current`, ancestor refs to `not-current` (observed state, not “never attempted”). Later/diverged/unavailable refs retain the lock. Original publish effects/errors remain in the receipt; recovery appends observations and status checks current refs before showing reconciled facts. A crash before closure was recorded remains unknown even after processes disappear. No force-confirmation or automatic stale-lock deletion exists. Follow the quoted `recovery.nextCommand`; unresolved identity gaps require maintainer investigation of that exact run.
|
|
62
95
|
|
|
63
|
-
|
|
96
|
+
In managed mode, status/verify select the latest publish receipt even after later source/config/check changes; unknown requested SHAs fail. Verify locks and uses the original exact checkout/config/scripts. Missing/untrusted checkouts fail without installing or falling back to current source. Check never overwrites publish selection. The command table's direct-workspace SHA fallback applies only to workspace mode.
|
|
64
97
|
|
|
65
98
|
Project binding checks compare the configured repository and production branch against `project.link`. Deployment details are requested with `withGitRepoInfo=true`; only authoritative `gitSource` provider, repository identifier, SHA and ref establish source identity. GitHub custom-host identity additionally binds the normalized host and port from both link and source; the same repository ID on a different host is rejected. Deployment `source` metrics and caller-supplied `meta` never establish provenance; list metadata only locates detail candidates. Supported Git links are GitHub (including limited/custom-host variants), GitLab and Bitbucket. Missing authoritative identity and unsupported providers fail closed.
|
|
66
99
|
|
|
@@ -78,9 +111,9 @@ const report = await runRelease({
|
|
|
78
111
|
if (!report.ok) console.error(report.error);
|
|
79
112
|
```
|
|
80
113
|
|
|
81
|
-
The root exports only contracts and `releaseErrorCodes`, and is browser-safe. `./node` is explicitly `browser: null` and exports `runRelease`, `validateReleaseConfig`, and `ReleaseError`.
|
|
114
|
+
The root exports only contracts and `releaseErrorCodes`, and is browser-safe. `./node` is explicitly `browser: null` and exports `runRelease`, `validateReleaseConfig`, and `ReleaseError`. Options include `command`, `cwd`, `configPath`, workspace-only `config`, `sha`, `signal`, `transport`, and `onLoginOutput`. Config objects are cloned/validated; managed callers must use a committed file. `transport` supplies only explicit `api(path, signal)` and anonymous `buildInfo(url, signal)` boundaries and must honor abort signals. Node callers supply `onLoginOutput` to display redacted official login instructions.
|
|
82
115
|
|
|
83
|
-
Reports include schema
|
|
116
|
+
Reports include schema 2, timestamps, SHA/config digest, source/execution roots, run/slot identity, stage, budget/process summaries, bounded job steps, separate push effects, deployment and errors. Managed metadata lives in the slot: ownership, run/recovery locks, state and separate latest-check/latest-publish receipts. The source `.tmp/forge-vercel-release/managed.json` anchors slot/config/publish identity. A state/receipt is at most 1 MiB, anchor at most 64 KiB, and each persisted step stdout/stderr at most 2048 UTF-8 bytes with `truncated`; effects/diagnostics are never clipped. Writes reserve peak bytes and verify paths/index/HEAD/lock ownership. Foreign slots, stale locks and atomic-write remnants are not automatically removed. Workspace mode retains `.tmp/forge-vercel-release/latest-publish.json` and its config-digest/explicit-SHA selection; recover is unsupported there. Receipts are local recovery evidence, not signed authorization. Abrupt termination may retain locks. Live login output buffers partial lines for cross-chunk redaction and uses the same finite per-stream budget.
|
|
84
117
|
|
|
85
118
|
## Error codes
|
|
86
119
|
|
|
@@ -96,6 +129,10 @@ Reports include schema version, timestamps, candidate SHA, config SHA-256, bound
|
|
|
96
129
|
| `DEPLOYMENT_SOURCE`, `DEPLOYMENT_MISSING`, `DEPLOYMENT_FAILED`, `DEPLOYMENT_TIMEOUT` | Wrong project/team/SHA/branch/source/target, no exact matching deployment, terminal failure/not READY, or bounded wait exhausted. |
|
|
97
130
|
| `ALIAS_MISMATCH`, `BUILD_INFO`, `BUILD_REVISION` | Wrong production alias/project/deployment, anonymous marker unavailable/oversized/invalid, or wrong revision. |
|
|
98
131
|
| `IO_FAILED` | Local file/process/runtime failure outside a more specific contract. |
|
|
132
|
+
| `SOURCE_CHANGED`, `SOURCE_UNSUPPORTED`, `RECEIPT_SHA_MISMATCH` | Changed/unsupported frozen source or unknown receipt SHA. |
|
|
133
|
+
| `SLOT_PATH`, `SLOT_FOREIGN`, `SLOT_STATE`, `SLOT_NOT_FAST_FORWARD` | Unsafe/replaced path, unowned slot, invalid management evidence or non-fast-forward reuse. |
|
|
134
|
+
| `BUDGET_EXCEEDED`, `BUDGET_UNKNOWN` | Admission/observed limit violation or incomplete observation. |
|
|
135
|
+
| `PROCESS_STATE_UNKNOWN`, `RECOVERY_REQUIRED` | Unproven process closure/effects or retained run needing inspection. |
|
|
99
136
|
|
|
100
137
|
Known credential-shaped output is redacted; configured commands remain trusted executable code and must not print secrets. The official CLI is pinned to `64.7.0`; its required transitive WASM peers are explicitly pinned to preserve strict peer installation. This package reuses public Forge command-runner/process-control and artifact-integrity capabilities. No third-party implementation types appear in its public contract.
|
|
101
138
|
|
package/dist/cli-arguments.js
CHANGED
|
@@ -2,7 +2,7 @@ import { resolve } from 'node:path';
|
|
|
2
2
|
import { ReleaseError } from './node/errors.js';
|
|
3
3
|
export function parseArguments(args) {
|
|
4
4
|
const command = args[0];
|
|
5
|
-
if (!['check', 'publish', 'status', 'verify', 'login'].includes(command ?? ''))
|
|
5
|
+
if (!['check', 'publish', 'status', 'verify', 'recover', 'login'].includes(command ?? ''))
|
|
6
6
|
throw new ReleaseError('ARGUMENT_INVALID');
|
|
7
7
|
const values = new Map();
|
|
8
8
|
for (let index = 1; index < args.length; index += 2) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-arguments.js","sourceRoot":"","sources":["../src/cli-arguments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-arguments.js","sourceRoot":"","sources":["../src/cli-arguments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACtI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAChK,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACrJ,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1C,OAAO,EAAE,OAAO,EAAE,OAAyB,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC7F,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACjG,CAAC"}
|
package/dist/cli-runner.js
CHANGED
|
@@ -3,7 +3,7 @@ import { ReleaseError } from './node/errors.js';
|
|
|
3
3
|
import { runRelease } from './node/release.js';
|
|
4
4
|
export async function runCli(args) {
|
|
5
5
|
if (args.length === 1 && ['--help', '-h'].includes(args[0] ?? '')) {
|
|
6
|
-
process.stdout.write(`${JSON.stringify({ usage: 'forge-vercel-release <check|publish|status|verify|login> [--cwd DIR] [--config FILE] [--sha SHA]', config: 'release.config.json', sha: 'status/verify only; full 40-character SHA' })}\n`);
|
|
6
|
+
process.stdout.write(`${JSON.stringify({ usage: 'forge-vercel-release <check|publish|status|verify|recover|login> [--cwd DIR] [--config FILE] [--sha SHA]', config: 'release.config.json', sha: 'status/verify only; full 40-character SHA' })}\n`);
|
|
7
7
|
return;
|
|
8
8
|
}
|
|
9
9
|
const controller = new AbortController();
|
|
@@ -17,7 +17,7 @@ export async function runCli(args) {
|
|
|
17
17
|
process.exitCode = report.ok ? 0 : report.error?.code === 'ARGUMENT_INVALID' ? 2 : 1;
|
|
18
18
|
}
|
|
19
19
|
catch (error) {
|
|
20
|
-
process.stdout.write(`${JSON.stringify({ schemaVersion:
|
|
20
|
+
process.stdout.write(`${JSON.stringify({ schemaVersion: 2, ok: false, error: { code: error instanceof ReleaseError ? error.code : 'IO_FAILED', details: {} } })}\n`);
|
|
21
21
|
process.exitCode = error instanceof ReleaseError && error.code === 'ARGUMENT_INVALID' ? 2 : 1;
|
|
22
22
|
}
|
|
23
23
|
finally {
|
package/dist/cli-runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-runner.js","sourceRoot":"","sources":["../src/cli-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAuB;IAClD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"cli-runner.js","sourceRoot":"","sources":["../src/cli-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAuB;IAClD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0GAA0G,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,2CAA2C,EAAE,CAAC,IAAI,CAAC,CAAC;QACpP,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9H,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACrK,OAAO,CAAC,QAAQ,GAAG,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,CAAC;YAAS,CAAC;QAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAAC,CAAC;AACpG,CAAC"}
|
package/dist/contracts.d.ts
CHANGED
|
@@ -1,11 +1,36 @@
|
|
|
1
|
-
export type ReleaseCommand = 'check' | 'publish' | 'status' | 'verify' | 'login';
|
|
1
|
+
export type ReleaseCommand = 'check' | 'publish' | 'status' | 'verify' | 'recover' | 'login';
|
|
2
2
|
export interface ReleaseCheck {
|
|
3
3
|
readonly command: string;
|
|
4
4
|
readonly args?: readonly string[];
|
|
5
5
|
readonly timeoutMs?: number;
|
|
6
6
|
}
|
|
7
|
+
export type ReleaseSource = {
|
|
8
|
+
readonly mode: 'workspace';
|
|
9
|
+
} | {
|
|
10
|
+
readonly mode: 'managed-commit';
|
|
11
|
+
readonly slotPath: string;
|
|
12
|
+
readonly maxBytes: number;
|
|
13
|
+
readonly minFreeBytes: number;
|
|
14
|
+
readonly sampleIntervalMs: number;
|
|
15
|
+
readonly install: {
|
|
16
|
+
readonly packageManager: 'pnpm';
|
|
17
|
+
};
|
|
18
|
+
readonly prepare: readonly ReleaseCheck[];
|
|
19
|
+
};
|
|
20
|
+
export type ManagedSourceConfig = Extract<ReleaseSource, {
|
|
21
|
+
mode: 'managed-commit';
|
|
22
|
+
}>;
|
|
23
|
+
export type ReleaseStage = 'source' | 'admission' | 'checkout' | 'install' | 'prepare' | 'checks' | 'push-dev' | 'push-main' | 'deployment' | 'acceptance' | 'recover' | 'complete' | 'failed';
|
|
24
|
+
export interface ReleaseBudget {
|
|
25
|
+
readonly sampleCount: number;
|
|
26
|
+
readonly maxObservedBytes: number;
|
|
27
|
+
readonly minObservedFreeBytes: number;
|
|
28
|
+
readonly maxObservationGapMs: number;
|
|
29
|
+
readonly observationsComplete: boolean;
|
|
30
|
+
}
|
|
7
31
|
export interface ReleaseConfig {
|
|
8
|
-
readonly schemaVersion:
|
|
32
|
+
readonly schemaVersion: 2;
|
|
33
|
+
readonly source: ReleaseSource;
|
|
9
34
|
readonly git: {
|
|
10
35
|
readonly remote: string;
|
|
11
36
|
readonly repository: string;
|
|
@@ -31,7 +56,7 @@ export interface ReleaseConfig {
|
|
|
31
56
|
readonly maxOutputBytes: number;
|
|
32
57
|
};
|
|
33
58
|
}
|
|
34
|
-
export declare const releaseErrorCodes: readonly ["ARGUMENT_INVALID", "CONFIG_INVALID", "CONFIG_READ", "GIT_FAILED", "GIT_DIRTY", "GIT_BRANCH", "GIT_REPOSITORY", "GIT_DIVERGED", "CANDIDATE_CHANGED", "CHECK_FAILED", "ACCEPTANCE_FAILED", "COMMAND_TIMEOUT", "COMMAND_FAILED", "CANCELLED", "LOCKED", "LOCK_OWNERSHIP", "AUTH_REQUIRED", "VERCEL_API", "DEPLOYMENT_SOURCE", "DEPLOYMENT_FAILED", "DEPLOYMENT_TIMEOUT", "DEPLOYMENT_MISSING", "ALIAS_MISMATCH", "BUILD_REVISION", "BUILD_INFO", "IO_FAILED"];
|
|
59
|
+
export declare const releaseErrorCodes: readonly ["ARGUMENT_INVALID", "CONFIG_INVALID", "CONFIG_READ", "GIT_FAILED", "GIT_DIRTY", "GIT_BRANCH", "GIT_REPOSITORY", "GIT_DIVERGED", "CANDIDATE_CHANGED", "CHECK_FAILED", "ACCEPTANCE_FAILED", "COMMAND_TIMEOUT", "COMMAND_FAILED", "CANCELLED", "LOCKED", "LOCK_OWNERSHIP", "AUTH_REQUIRED", "VERCEL_API", "DEPLOYMENT_SOURCE", "DEPLOYMENT_FAILED", "DEPLOYMENT_TIMEOUT", "DEPLOYMENT_MISSING", "ALIAS_MISMATCH", "BUILD_REVISION", "BUILD_INFO", "IO_FAILED", "SOURCE_UNSUPPORTED", "SOURCE_CHANGED", "SLOT_PATH", "SLOT_FOREIGN", "SLOT_STATE", "SLOT_NOT_FAST_FORWARD", "BUDGET_EXCEEDED", "BUDGET_UNKNOWN", "PROCESS_STATE_UNKNOWN", "RECOVERY_REQUIRED", "RECEIPT_SHA_MISMATCH"];
|
|
35
60
|
export type ReleaseErrorCode = typeof releaseErrorCodes[number];
|
|
36
61
|
export interface ReleaseDiagnostic {
|
|
37
62
|
readonly code: ReleaseErrorCode;
|
|
@@ -53,8 +78,23 @@ export interface ReleaseStep {
|
|
|
53
78
|
readonly truncated?: boolean;
|
|
54
79
|
readonly exitCode?: number | null;
|
|
55
80
|
}
|
|
81
|
+
export type ReleasePushEffect = 'not-attempted' | 'pushed' | 'already-current' | 'unknown' | 'not-current';
|
|
82
|
+
export type ReleaseRefRelation = 'candidate' | 'before' | 'after' | 'diverged' | 'unknown';
|
|
83
|
+
export interface ReleaseRecoveryObservation {
|
|
84
|
+
readonly owner: 'inactive' | 'active' | 'unknown';
|
|
85
|
+
readonly processes: 'closed' | 'running' | 'unknown';
|
|
86
|
+
readonly observedAt: string;
|
|
87
|
+
readonly developmentRef?: {
|
|
88
|
+
readonly sha: string;
|
|
89
|
+
readonly relation: ReleaseRefRelation;
|
|
90
|
+
};
|
|
91
|
+
readonly releaseRef?: {
|
|
92
|
+
readonly sha: string;
|
|
93
|
+
readonly relation: ReleaseRefRelation;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
56
96
|
export interface ReleaseReport {
|
|
57
|
-
readonly schemaVersion:
|
|
97
|
+
readonly schemaVersion: 2;
|
|
58
98
|
readonly command: ReleaseCommand;
|
|
59
99
|
readonly ok: boolean;
|
|
60
100
|
readonly candidateSha?: string;
|
|
@@ -63,8 +103,8 @@ export interface ReleaseReport {
|
|
|
63
103
|
readonly finishedAt: string;
|
|
64
104
|
readonly steps: readonly ReleaseStep[];
|
|
65
105
|
readonly effects: {
|
|
66
|
-
developmentPush:
|
|
67
|
-
releasePush:
|
|
106
|
+
developmentPush: ReleasePushEffect;
|
|
107
|
+
releasePush: ReleasePushEffect;
|
|
68
108
|
};
|
|
69
109
|
readonly deployment?: ReleaseDeployment;
|
|
70
110
|
readonly error?: ReleaseDiagnostic;
|
|
@@ -72,6 +112,18 @@ export interface ReleaseReport {
|
|
|
72
112
|
readonly candidateSha: string;
|
|
73
113
|
readonly nextCommand: string;
|
|
74
114
|
readonly reportPath: string;
|
|
115
|
+
readonly observation?: ReleaseRecoveryObservation;
|
|
116
|
+
};
|
|
117
|
+
readonly runId?: string;
|
|
118
|
+
readonly sourceRoot?: string;
|
|
119
|
+
readonly executionRoot?: string;
|
|
120
|
+
readonly slotId?: string;
|
|
121
|
+
readonly configPath?: string;
|
|
122
|
+
readonly stage?: ReleaseStage;
|
|
123
|
+
readonly budget?: ReleaseBudget;
|
|
124
|
+
readonly processes?: {
|
|
125
|
+
readonly status: 'closed' | 'unknown' | 'running';
|
|
126
|
+
readonly knownCount: number;
|
|
75
127
|
};
|
|
76
128
|
}
|
|
77
129
|
export interface ReleaseTransport {
|
package/dist/contracts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
package/dist/contracts.js
CHANGED
|
@@ -3,5 +3,7 @@ export const releaseErrorCodes = [
|
|
|
3
3
|
'GIT_DIVERGED', 'CANDIDATE_CHANGED', 'CHECK_FAILED', 'ACCEPTANCE_FAILED', 'COMMAND_TIMEOUT', 'COMMAND_FAILED',
|
|
4
4
|
'CANCELLED', 'LOCKED', 'LOCK_OWNERSHIP', 'AUTH_REQUIRED', 'VERCEL_API', 'DEPLOYMENT_SOURCE', 'DEPLOYMENT_FAILED',
|
|
5
5
|
'DEPLOYMENT_TIMEOUT', 'DEPLOYMENT_MISSING', 'ALIAS_MISMATCH', 'BUILD_REVISION', 'BUILD_INFO', 'IO_FAILED',
|
|
6
|
+
'SOURCE_UNSUPPORTED', 'SOURCE_CHANGED', 'SLOT_PATH', 'SLOT_FOREIGN', 'SLOT_STATE', 'SLOT_NOT_FAST_FORWARD',
|
|
7
|
+
'BUDGET_EXCEEDED', 'BUDGET_UNKNOWN', 'PROCESS_STATE_UNKNOWN', 'RECOVERY_REQUIRED', 'RECEIPT_SHA_MISMATCH',
|
|
6
8
|
];
|
|
7
9
|
//# sourceMappingURL=contracts.js.map
|
package/dist/contracts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAmCA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB;IAC9G,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB;IAC7G,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,mBAAmB;IAChH,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW;IACzG,oBAAoB,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,uBAAuB;IAC1G,iBAAiB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,sBAAsB;CACjG,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { releaseErrorCodes } from './contracts.js';
|
|
2
|
-
export type { ReleaseCommand, ReleaseCheck, ReleaseConfig, ReleaseErrorCode, ReleaseDiagnostic, ReleaseDeployment, ReleaseStep, ReleaseReport, ReleaseTransport, RunReleaseOptions, } from './contracts.js';
|
|
2
|
+
export type { ReleaseCommand, ReleaseCheck, ReleaseConfig, ReleaseErrorCode, ReleaseDiagnostic, ReleaseDeployment, ReleaseStep, ReleaseReport, ReleaseTransport, RunReleaseOptions, ReleaseSource, ManagedSourceConfig, ReleaseStage, ReleaseBudget, ReleasePushEffect, ReleaseRefRelation, ReleaseRecoveryObservation, } from './contracts.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EACV,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAChF,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EACV,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAChF,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAClF,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,EAC/D,iBAAiB,EAAE,kBAAkB,EAAE,0BAA0B,GAClE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/node/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,aAAa,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/node/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AAiDlF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAiCnE"}
|
package/dist/node/config.js
CHANGED
|
@@ -18,8 +18,8 @@ function integer(value, maximum, field) {
|
|
|
18
18
|
invalid(field);
|
|
19
19
|
return value;
|
|
20
20
|
}
|
|
21
|
-
function commands(value, field) {
|
|
22
|
-
if (!Array.isArray(value) || value.length === 0 || value.length > 32)
|
|
21
|
+
function commands(value, field, empty = false) {
|
|
22
|
+
if (!Array.isArray(value) || (!empty && value.length === 0) || value.length > 32)
|
|
23
23
|
invalid(field);
|
|
24
24
|
return value.map((item) => {
|
|
25
25
|
const itemRecord = record(item);
|
|
@@ -35,9 +35,31 @@ function commands(value, field) {
|
|
|
35
35
|
...(itemRecord.timeoutMs === undefined ? {} : { timeoutMs: integer(itemRecord.timeoutMs, 3_600_000, `${field}.timeoutMs`) }) };
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
+
function source(value) {
|
|
39
|
+
if (record(value).mode === 'workspace') {
|
|
40
|
+
object(value, ['mode'], 'source');
|
|
41
|
+
return { mode: 'workspace' };
|
|
42
|
+
}
|
|
43
|
+
const entry = object(value, ['mode', 'slotPath', 'maxBytes', 'minFreeBytes', 'sampleIntervalMs', 'install', 'prepare'], 'source');
|
|
44
|
+
if (entry.mode !== 'managed-commit')
|
|
45
|
+
invalid('source.mode');
|
|
46
|
+
const slotPath = text(entry.slotPath, 'source.slotPath', /^[a-zA-Z0-9_.-]+(?:\/[a-zA-Z0-9_.-]+)*$/u);
|
|
47
|
+
if (slotPath.split('/').some(part => ['.', '..', '.git'].includes(part.toLowerCase())))
|
|
48
|
+
invalid('source.slotPath');
|
|
49
|
+
const install = object(entry.install, ['packageManager'], 'source.install');
|
|
50
|
+
if (install.packageManager !== 'pnpm')
|
|
51
|
+
invalid('source.install.packageManager');
|
|
52
|
+
const sampleIntervalMs = integer(entry.sampleIntervalMs, 5000, 'source.sampleIntervalMs');
|
|
53
|
+
if (sampleIntervalMs < 250)
|
|
54
|
+
invalid('source.sampleIntervalMs');
|
|
55
|
+
return { mode: 'managed-commit', slotPath,
|
|
56
|
+
maxBytes: integer(entry.maxBytes, Number.MAX_SAFE_INTEGER, 'source.maxBytes'),
|
|
57
|
+
minFreeBytes: integer(entry.minFreeBytes, Number.MAX_SAFE_INTEGER, 'source.minFreeBytes'),
|
|
58
|
+
sampleIntervalMs, install: { packageManager: 'pnpm' }, prepare: commands(entry.prepare, 'source.prepare', true) };
|
|
59
|
+
}
|
|
38
60
|
export function validateReleaseConfig(value) {
|
|
39
|
-
const root = object(value, ['schemaVersion', 'git', 'vercel', 'checks', 'acceptance', 'buildInfo', 'limits'], 'config');
|
|
40
|
-
if (root.schemaVersion !==
|
|
61
|
+
const root = object(value, ['schemaVersion', 'source', 'git', 'vercel', 'checks', 'acceptance', 'buildInfo', 'limits'], 'config');
|
|
62
|
+
if (root.schemaVersion !== 2)
|
|
41
63
|
invalid('schemaVersion');
|
|
42
64
|
const git = object(root.git, ['remote', 'repository', 'developmentBranch', 'releaseBranch'], 'git');
|
|
43
65
|
const branch = (value, field) => {
|
|
@@ -69,7 +91,7 @@ export function validateReleaseConfig(value) {
|
|
|
69
91
|
invalid('buildInfo.path');
|
|
70
92
|
const limits = object(root.limits, ['commandMs', 'deploymentMs', 'pollMs', 'requestMs', 'maxOutputBytes'], 'limits');
|
|
71
93
|
const deploymentMs = integer(limits.deploymentMs, 3_600_000, 'limits.deploymentMs');
|
|
72
|
-
return { schemaVersion:
|
|
94
|
+
return { schemaVersion: 2, source: source(root.source),
|
|
73
95
|
git: { remote: text(git.remote, 'git.remote', /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/u),
|
|
74
96
|
repository: text(git.repository, 'git.repository'), developmentBranch, releaseBranch },
|
|
75
97
|
vercel: { teamId: text(vercel.teamId, 'vercel.teamId', /^team_[a-zA-Z0-9]+$/u),
|
package/dist/node/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/node/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnD,SAAS,OAAO,CAAC,KAAa,IAAW,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/F,SAAS,MAAM,CAAC,KAAc,EAAE,IAAuB,EAAE,KAAa;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;WAClE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAChH,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,IAAI,CAAC,KAAc,EAAE,KAAa,EAAE,OAAO,GAAG,IAAI;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;WACrE,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5H,OAAO,KAAK,CAAC;AACf,CAAC;AACD,SAAS,OAAO,CAAC,KAAc,EAAE,OAAe,EAAE,KAAa;IAC7D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/G,OAAO,KAAK,CAAC;AACf,CAAC;AACD,SAAS,QAAQ,CAAC,KAAc,EAAE,KAAa;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/node/config.ts"],"names":[],"mappings":"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"}
|
package/dist/node/execution.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ReleaseCheck, ReleaseConfig, ReleaseErrorCode, ReleaseStep } from '../contracts.js';
|
|
2
|
+
import type { ExecutionLifecycle } from './release-context.js';
|
|
2
3
|
export declare function resolveInvocation(command: string, args: readonly string[]): {
|
|
3
4
|
command: string;
|
|
4
5
|
args: readonly string[];
|
|
@@ -12,9 +13,11 @@ export declare class Execution {
|
|
|
12
13
|
readonly config: Pick<ReleaseConfig, 'limits'>;
|
|
13
14
|
readonly signal: AbortSignal | undefined;
|
|
14
15
|
readonly steps: ReleaseStep[];
|
|
16
|
+
private readonly lifecycle?;
|
|
15
17
|
private readonly runner;
|
|
16
|
-
constructor(cwd: string, config: Pick<ReleaseConfig, 'limits'>, signal: AbortSignal | undefined, steps: ReleaseStep[]);
|
|
18
|
+
constructor(cwd: string, config: Pick<ReleaseConfig, 'limits'>, signal: AbortSignal | undefined, steps: ReleaseStep[], lifecycle?: ExecutionLifecycle | undefined);
|
|
17
19
|
run(name: string, check: ReleaseCheck, errorCode: ReleaseErrorCode, values?: Readonly<Record<string, string>>, signal?: AbortSignal | undefined, captureStep?: boolean, onOutput?: (text: string) => void): Promise<string>;
|
|
18
20
|
git(args: readonly string[]): Promise<string>;
|
|
21
|
+
streamGit(args: readonly string[], onChunk: (chunk: Uint8Array) => void, allowedExitCodes?: readonly number[]): Promise<void>;
|
|
19
22
|
}
|
|
20
23
|
//# sourceMappingURL=execution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/node/execution.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/node/execution.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGlG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAmBxH;AACD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAGtG;AACD,qBAAa,SAAS;IAER,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS;IACxH,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE;IAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAF5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAC/C,GAAG,EAAE,MAAM,EAAW,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAW,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/G,KAAK,EAAE,WAAW,EAAE,EAAmB,SAAS,CAAC,EAAE,kBAAkB,YAAA;IAgB1E,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACjH,MAAM,0BAAc,EAAE,WAAW,UAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B/F,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAGvC,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EAAE,gBAAgB,GAAE,SAAS,MAAM,EAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBzI"}
|
package/dist/node/execution.js
CHANGED
|
@@ -2,9 +2,10 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { delimiter, dirname, resolve, win32 } from 'node:path';
|
|
4
4
|
import { createNodeCommandRunner } from '@openge/forge-command-runner/node';
|
|
5
|
-
import { createPosixProcessControl, createWindowsProcessControl } from '@openge/forge-process-control-node';
|
|
5
|
+
import { createPosixProcessControl, createPosixProcessIdentityReader, createWindowsProcessControl, createWindowsProcessIdentityReader } from '@openge/forge-process-control-node';
|
|
6
6
|
import { assertActive, redact, ReleaseError } from './errors.js';
|
|
7
7
|
import { LiveOutput } from './live-output.js';
|
|
8
|
+
import { managedOwnedScopeProvider } from './owned-command-runner.js';
|
|
8
9
|
export function resolveInvocation(command, args) {
|
|
9
10
|
if (command === 'node')
|
|
10
11
|
return { command: process.execPath, args };
|
|
@@ -40,24 +41,35 @@ export class Execution {
|
|
|
40
41
|
config;
|
|
41
42
|
signal;
|
|
42
43
|
steps;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
: createPosixProcessControl({ listenerBackend: 'lsof' }),
|
|
47
|
-
terminationPolicy: { mode: 'force' }, terminationTimeoutMs: 5000,
|
|
48
|
-
identityAcquisition: { timeoutMs: 2000, pollIntervalMs: 20 },
|
|
49
|
-
});
|
|
50
|
-
constructor(cwd, config, signal, steps) {
|
|
44
|
+
lifecycle;
|
|
45
|
+
runner;
|
|
46
|
+
constructor(cwd, config, signal, steps, lifecycle) {
|
|
51
47
|
this.cwd = cwd;
|
|
52
48
|
this.config = config;
|
|
53
49
|
this.signal = signal;
|
|
54
50
|
this.steps = steps;
|
|
51
|
+
this.lifecycle = lifecycle;
|
|
52
|
+
const control = process.platform === 'win32' ? createWindowsProcessControl({ listenerBackend: 'netstat' }) : createPosixProcessControl({ listenerBackend: 'lsof' });
|
|
53
|
+
const reader = process.platform === 'win32' ? createWindowsProcessIdentityReader() : createPosixProcessIdentityReader();
|
|
54
|
+
this.runner = createNodeCommandRunner({ platform: process.platform === 'win32' ? 'win32' : 'posix',
|
|
55
|
+
...(lifecycle ? { ownedScopeProvider: managedOwnedScopeProvider() } : {}),
|
|
56
|
+
processControl: { ...control, listProcesses: async (request) => {
|
|
57
|
+
const pid = request?.pids?.length === 1 ? request.pids[0] : undefined;
|
|
58
|
+
if (pid !== undefined) {
|
|
59
|
+
const observed = await reader.readIdentity({ pid, ...(request?.signal ? { signal: request.signal } : {}) });
|
|
60
|
+
return observed.status === 'FOUND' ? [observed.identity] : [];
|
|
61
|
+
}
|
|
62
|
+
return control.listProcesses(request);
|
|
63
|
+
} },
|
|
64
|
+
terminationPolicy: { mode: 'force' }, terminationTimeoutMs: 5000,
|
|
65
|
+
identityAcquisition: { timeoutMs: lifecycle ? Math.min(10_000, config.limits.commandMs) : 2000, pollIntervalMs: 20 } });
|
|
55
66
|
}
|
|
56
67
|
async run(name, check, errorCode, values, signal = this.signal, captureStep = true, onOutput) {
|
|
57
68
|
assertActive(signal);
|
|
58
69
|
const invocation = resolveInvocation(check.command, check.args ?? []);
|
|
59
70
|
const live = onOutput === undefined ? undefined : new LiveOutput(this.config.limits.maxOutputBytes, onOutput);
|
|
60
|
-
const
|
|
71
|
+
const execute = this.lifecycle ? this.lifecycle.execute.bind(this.lifecycle, this.runner, name) : this.runner.run.bind(this.runner);
|
|
72
|
+
const result = await execute({ ...invocation, cwd: this.cwd,
|
|
61
73
|
environment: { mode: 'inherit', values: { GIT_TERMINAL_PROMPT: '0', VERCEL_TELEMETRY_DISABLED: '1', ...values } },
|
|
62
74
|
output: { mode: 'capture', maxBytesPerStream: this.config.limits.maxOutputBytes, overflow: 'truncate' },
|
|
63
75
|
timeoutMs: Math.min(check.timeoutMs ?? this.config.limits.commandMs, this.config.limits.commandMs),
|
|
@@ -90,5 +102,31 @@ export class Execution {
|
|
|
90
102
|
git(args) {
|
|
91
103
|
return this.run('git', { command: 'git', args }, 'GIT_FAILED', undefined, this.signal, false);
|
|
92
104
|
}
|
|
105
|
+
async streamGit(args, onChunk, allowedExitCodes = [0]) {
|
|
106
|
+
assertActive(this.signal);
|
|
107
|
+
const controller = new AbortController();
|
|
108
|
+
const signal = this.signal ? AbortSignal.any([this.signal, controller.signal]) : controller.signal;
|
|
109
|
+
let failure;
|
|
110
|
+
const execute = this.lifecycle ? this.lifecycle.execute.bind(this.lifecycle, this.runner, 'git-stream') : this.runner.run.bind(this.runner);
|
|
111
|
+
const result = await execute({ command: 'git', args, cwd: this.cwd,
|
|
112
|
+
environment: { mode: 'inherit', values: { GIT_TERMINAL_PROMPT: '0' } }, output: { mode: 'events' },
|
|
113
|
+
timeoutMs: this.config.limits.commandMs, signal }, event => {
|
|
114
|
+
if (event.type === 'stdout' && failure === undefined) {
|
|
115
|
+
try {
|
|
116
|
+
onChunk(event.chunk);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
failure = error;
|
|
120
|
+
controller.abort();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
if (failure !== undefined)
|
|
125
|
+
throw failure;
|
|
126
|
+
assertActive(this.signal);
|
|
127
|
+
if (result.exitCode === null || !allowedExitCodes.includes(result.exitCode) || result.terminationReason !== 'exit') {
|
|
128
|
+
throw new ReleaseError('GIT_FAILED', { reason: 'STREAM_FAILED', exitCode: result.exitCode, termination: result.terminationReason });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
93
131
|
}
|
|
94
132
|
//# sourceMappingURL=execution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/node/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/node/execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-context.d.ts","sourceRoot":"","sources":["../../src/node/git-context.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,QAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAA6D,CAAC;AAC1I,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReleaseError } from './errors.js';
|
|
2
|
+
const names = ['GIT_DIR', 'GIT_WORK_TREE', 'GIT_COMMON_DIR', 'GIT_INDEX_FILE', 'GIT_OBJECT_DIRECTORY', 'GIT_ALTERNATE_OBJECT_DIRECTORIES', 'GIT_SHALLOW_FILE', 'GIT_NAMESPACE'];
|
|
3
|
+
export const isolatedGitEnvironment = () => Object.fromEntries(names.map(name => [name, undefined]));
|
|
4
|
+
export function assertNoGitContext() {
|
|
5
|
+
const active = Object.keys(process.env).filter(key => names.some(name => (process.platform === 'win32' ? key.toUpperCase() : key) === name) && process.env[key]);
|
|
6
|
+
if (active.length > 0)
|
|
7
|
+
throw new ReleaseError('SOURCE_UNSUPPORTED', { reason: 'GIT_CONTEXT_ENV', names: active.map(name => name.toUpperCase()) });
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=git-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-context.js","sourceRoot":"","sources":["../../src/node/git-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kCAAkC,EAAE,kBAAkB,EAAE,eAAe,CAAU,CAAC;AACzL,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAwC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1I,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACjK,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACpJ,CAAC"}
|