rampway 0.3.1 → 0.4.0
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 +4 -2
- package/build/src/velocious/control-plane.d.ts +27 -5
- package/build/src/velocious/control-plane.d.ts.map +1 -1
- package/build/src/velocious/control-plane.js +24 -9
- package/build/src/velocious/control-plane.js.map +1 -1
- package/build/src/velocious/controller.d.ts +27 -8
- package/build/src/velocious/controller.d.ts.map +1 -1
- package/build/src/velocious/controller.js +68 -11
- package/build/src/velocious/controller.js.map +1 -1
- package/build/src/velocious/index.d.ts +5 -2
- package/build/src/velocious/index.d.ts.map +1 -1
- package/build/src/velocious/index.js +7 -4
- package/build/src/velocious/index.js.map +1 -1
- package/build/src/velocious/registry.d.ts +6 -0
- package/build/src/velocious/registry.d.ts.map +1 -1
- package/build/src/velocious/registry.js +12 -0
- package/build/src/velocious/registry.js.map +1 -1
- package/build/src/velocious/run-store.d.ts +52 -2
- package/build/src/velocious/run-store.d.ts.map +1 -1
- package/build/src/velocious/run-store.js +90 -3
- package/build/src/velocious/run-store.js.map +1 -1
- package/build/src/velocious/worker.d.ts +48 -0
- package/build/src/velocious/worker.d.ts.map +1 -0
- package/build/src/velocious/worker.js +165 -0
- package/build/src/velocious/worker.js.map +1 -0
- package/docs/velocious-deployment-api.md +45 -8
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/velocious/worker.js"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
Velocious application. Rampway owns every deployment-specific decision and
|
|
5
5
|
calls its normal deploy lifecycle; Velocious supplies only route mounting,
|
|
6
6
|
request/connection scopes, database persistence, background execution, and
|
|
7
|
-
framework error events.
|
|
7
|
+
framework error events. Each admitted run is executed by a package-owned
|
|
8
|
+
detached Node worker, not by the request process.
|
|
8
9
|
|
|
9
10
|
The API accepts no command, path, repository, branch, environment value, log
|
|
10
11
|
request, or arbitrary Git ref. A caller can select only a configured
|
|
@@ -38,6 +39,7 @@ routes.draw((route) => {
|
|
|
38
39
|
route.mount(RampwayDeploymentApi, {
|
|
39
40
|
at: "/rampway/deployments",
|
|
40
41
|
accessTokens: deploymentSecrets.rampwayAccessTokens,
|
|
42
|
+
workerBootstrapPath: "/srv/my-app/control/rampway-velocious-worker.mjs",
|
|
41
43
|
projects: {
|
|
42
44
|
"my-app": {
|
|
43
45
|
stages: {
|
|
@@ -55,6 +57,25 @@ export default {routes}
|
|
|
55
57
|
```
|
|
56
58
|
|
|
57
59
|
`accessTokens` and every `configPath` are explicit backend configuration.
|
|
60
|
+
`workerBootstrapPath` is also explicit backend configuration. It must be an
|
|
61
|
+
absolute regular module file available in the deployed application release; the
|
|
62
|
+
mount resolves it to its real path before accepting requests. The module is
|
|
63
|
+
loaded only by Rampway's package-owned worker and must default-export a factory
|
|
64
|
+
that reconstructs the host application's Velocious configuration:
|
|
65
|
+
|
|
66
|
+
```js
|
|
67
|
+
import configurationResolver from "velocious/build/src/configuration-resolver.js"
|
|
68
|
+
|
|
69
|
+
export default async function createRampwayDeploymentWorkerContext() {
|
|
70
|
+
return {
|
|
71
|
+
configuration: await configurationResolver({directory: "/srv/my-app"})
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The factory receives only the bounded stable mount and run identifiers. It must
|
|
77
|
+
load backend-owned configuration and secrets itself; neither bearer tokens nor
|
|
78
|
+
deployment targets are passed to the worker.
|
|
58
79
|
Provision the secrets module outside source control using the application's
|
|
59
80
|
normal secret mechanism. There is deliberately no environment-variable
|
|
60
81
|
fallback. `configPath` must be absolute, and its selected Rampway stage must
|
|
@@ -72,6 +93,7 @@ Mount options:
|
|
|
72
93
|
| `projects` | yes | Explicit project/stage allowlist with absolute Rampway config paths and approved release branches. |
|
|
73
94
|
| `databaseIdentifier` | no | Velocious database used for runs/audits; default `default`. |
|
|
74
95
|
| `staleRunTimeoutMs` | no | Ownership lease; default `60000`, minimum `4`. |
|
|
96
|
+
| `workerBootstrapPath` | yes | Absolute backend module that reconstructs the Velocious configuration in the detached worker. |
|
|
75
97
|
|
|
76
98
|
## Client calls
|
|
77
99
|
|
|
@@ -119,7 +141,7 @@ context.
|
|
|
119
141
|
|
|
120
142
|
Create responses are bounded:
|
|
121
143
|
|
|
122
|
-
- `202`: created; execution continues in a
|
|
144
|
+
- `202`: created; execution continues in a separate detached Node process.
|
|
123
145
|
- `200`: matching idempotent replay; the original run is returned.
|
|
124
146
|
- `401`: missing or invalid bearer token.
|
|
125
147
|
- `404`: project/stage is not allowlisted.
|
|
@@ -137,6 +159,15 @@ is also sent to Velocious framework error reporting.
|
|
|
137
159
|
|
|
138
160
|
## Execution and recovery guarantees
|
|
139
161
|
|
|
162
|
+
Rampway serializes durable admission and writes the request audit before
|
|
163
|
+
launching the worker. The parent waits for the operating system's child-spawn
|
|
164
|
+
acknowledgement before returning `202`; the worker then claims the pending run
|
|
165
|
+
and writes the heartbeat, lifecycle audits, terminal result, and database
|
|
166
|
+
connections from its own process. Its stdio is ignored rather than inherited,
|
|
167
|
+
and its invocation contains only the immutable bootstrap path and bounded
|
|
168
|
+
mount/run identifiers. A launch error fences the pending run as failed and is
|
|
169
|
+
not retried in the request process.
|
|
170
|
+
|
|
140
171
|
Rampway serializes durable admission before validating reachability on the
|
|
141
172
|
deployment target, so an idempotent retry storm performs the Git fetch only for
|
|
142
173
|
the created run. It then invokes the same `deploy()` used by the CLI: deploy
|
|
@@ -156,12 +187,18 @@ are fenced by mount, run, owner, status, and (for stale reconciliation) the
|
|
|
156
187
|
observed heartbeat. A renewed live owner therefore cannot be reclaimed, and an
|
|
157
188
|
expired owner cannot overwrite a reconciled run.
|
|
158
189
|
|
|
159
|
-
Pending work
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
190
|
+
Pending work is protected by a separate durable launch-to-claim lease while the
|
|
191
|
+
worker imports its bootstrap and reconstructs Velocious. Status polling and
|
|
192
|
+
other admission processes therefore cannot interrupt a legitimately booting
|
|
193
|
+
worker; the lease is cleared atomically by claim or pre-claim failure. If that
|
|
194
|
+
launch lease expires without a claim, the pending run becomes `interrupted` and
|
|
195
|
+
no longer blocks a new run. A stale running run, or a known successful
|
|
196
|
+
activation whose success record could not be persisted, becomes
|
|
197
|
+
`reconciliation_required` and continues to block duplicates until an operator
|
|
198
|
+
verifies live state. Bootstrap failures are recorded as failed and audited when
|
|
199
|
+
the host configuration can still be reconstructed. Audit persistence failure is
|
|
200
|
+
reported through both Velocious `framework-error` and `all-error` events and
|
|
201
|
+
never strands deployment execution.
|
|
165
202
|
Keyed retries and run-status polling evaluate the lease before returning, so a
|
|
166
203
|
dead owner's stale `pending` or `running` state is reconciled without requiring
|
|
167
204
|
a different-key deployment attempt.
|