@intentius/chant-lexicon-fly 0.124.63 → 0.124.65
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 +1 -0
- package/dist/components/fly-release.d.ts +14 -0
- package/dist/components/fly-release.d.ts.map +1 -1
- package/dist/components/fly-release.js +38 -2
- package/dist/integrity.json +5 -4
- package/dist/lint/audit-catalog.d.ts +1 -1
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/audit-catalog.js +2 -1
- package/dist/lint/audit-lineage.d.ts.map +1 -1
- package/dist/lint/audit-lineage.js +3 -0
- package/dist/lint/post-synth/fly012-machine-schedule.d.ts +11 -0
- package/dist/lint/post-synth/fly012-machine-schedule.d.ts.map +1 -0
- package/dist/lint/post-synth/fly012-machine-schedule.js +37 -0
- package/dist/lint/post-synth/index.d.ts.map +1 -1
- package/dist/lint/post-synth/index.js +2 -0
- package/dist/manifest.json +1 -1
- package/dist/okf/index.md +1 -0
- package/dist/okf/rules/FLY012.md +15 -0
- package/dist/okf/types/Machine.md +1 -0
- package/dist/op/activities/fly-apply.d.ts +25 -0
- package/dist/op/activities/fly-apply.d.ts.map +1 -1
- package/dist/op/activities/fly-apply.js +59 -3
- package/dist/op/activities/machine-release.d.ts +35 -3
- package/dist/op/activities/machine-release.d.ts.map +1 -1
- package/dist/op/activities/machine-release.js +70 -18
- package/dist/op/activities/machines-fake.d.ts.map +1 -1
- package/dist/op/activities/machines-fake.js +5 -2
- package/dist/rules/fly012-machine-schedule.ts +39 -0
- package/dist/skills/chant-fly-ops.md +47 -0
- package/dist/skills/chant-fly.md +3 -1
- package/package.json +3 -3
- package/src/components/fly-release.test.ts +79 -0
- package/src/components/fly-release.ts +41 -2
- package/src/lint/audit-catalog.ts +8 -1
- package/src/lint/audit-lineage.ts +3 -0
- package/src/lint/post-synth/fly012-machine-schedule.test.ts +30 -0
- package/src/lint/post-synth/fly012-machine-schedule.ts +39 -0
- package/src/lint/post-synth/index.ts +2 -0
- package/src/op/activities/fly-apply.test.ts +84 -0
- package/src/op/activities/fly-apply.ts +70 -3
- package/src/op/activities/machine-release.ts +86 -17
- package/src/op/activities/machines-fake.ts +5 -2
- package/src/skills/chant-fly-ops.md +47 -0
- package/src/skills/chant-fly.md +3 -1
package/README.md
CHANGED
|
@@ -73,6 +73,7 @@ export const web = new Machine({
|
|
|
73
73
|
`flyApply` speaks the Machines API directly. There is no `flyctl` shell-out and no state file to store, lock, or keep in sync. It reconciles what you declared against what is actually running:
|
|
74
74
|
|
|
75
75
|
- Creates and updates machines, then waits each one to `started` over the Machines API `/wait` endpoint.
|
|
76
|
+
- Leaves a scheduled machine (`config.schedule`: hourly, daily, weekly or monthly) stopped: it is created and updated with `skip_launch`, and Fly starts it on its schedule. `fly-release` moves one to a new image the same way.
|
|
76
77
|
- Prunes only what chant owns. Every machine chant creates carries a `managed-by: chant` marker, and a machine without it is never modified or deleted, so the applier is safe to point at an app that also holds resources you manage elsewhere.
|
|
77
78
|
- Speaks the Machines API lease protocol: acquire a lease, send the nonce on each mutation, re-acquire and retry if the lease is lost, so concurrent operators stay out of each other's way.
|
|
78
79
|
|
|
@@ -32,6 +32,14 @@
|
|
|
32
32
|
* goes back (or, on a first release, the Machine is stopped), and the step
|
|
33
33
|
* fails.
|
|
34
34
|
*
|
|
35
|
+
* A scheduled Machine (`config.schedule`, #4696) is released without being
|
|
36
|
+
* started, whether it is the one that serves or another Machine in the plan:
|
|
37
|
+
* its config and image change, and Fly starts it on its schedule. Verify
|
|
38
|
+
* accepts it stopped between runs. A scheduled Machine that serves takes no
|
|
39
|
+
* migrations and no health URL, since nothing runs in it between runs. The
|
|
40
|
+
* plan's other Machines take their images from `images`; one the release
|
|
41
|
+
* updated goes back to its old config when the release fails.
|
|
42
|
+
*
|
|
35
43
|
* Its output carries `uri` and `digest`, so `chant run --components` records
|
|
36
44
|
* the release in the ledger, and the Machine's metadata carries the same
|
|
37
45
|
* digest, which `chant components status --live` compares with it.
|
|
@@ -100,6 +108,12 @@ export interface FlyReleaseInput {
|
|
|
100
108
|
release?: string;
|
|
101
109
|
/** An image to run in place of the declared one. */
|
|
102
110
|
image?: string;
|
|
111
|
+
/**
|
|
112
|
+
* Images for the plan's other Machines, by entity or Machine name (#4696),
|
|
113
|
+
* such as a scheduled Machine built from the same commit. Each is applied
|
|
114
|
+
* with the release; a scheduled one is left stopped.
|
|
115
|
+
*/
|
|
116
|
+
images?: Record<string, string>;
|
|
103
117
|
/** Env added to the declared Machine's env, over `APP_REVISION` (the commit, #2834) unless this names its own. */
|
|
104
118
|
env?: Record<string, string>;
|
|
105
119
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fly-release.d.ts","sourceRoot":"","sources":["../../src/components/fly-release.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fly-release.d.ts","sourceRoot":"","sources":["../../src/components/fly-release.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,14 @@
|
|
|
32
32
|
* goes back (or, on a first release, the Machine is stopped), and the step
|
|
33
33
|
* fails.
|
|
34
34
|
*
|
|
35
|
+
* A scheduled Machine (`config.schedule`, #4696) is released without being
|
|
36
|
+
* started, whether it is the one that serves or another Machine in the plan:
|
|
37
|
+
* its config and image change, and Fly starts it on its schedule. Verify
|
|
38
|
+
* accepts it stopped between runs. A scheduled Machine that serves takes no
|
|
39
|
+
* migrations and no health URL, since nothing runs in it between runs. The
|
|
40
|
+
* plan's other Machines take their images from `images`; one the release
|
|
41
|
+
* updated goes back to its old config when the release fails.
|
|
42
|
+
*
|
|
35
43
|
* Its output carries `uri` and `digest`, so `chant run --components` records
|
|
36
44
|
* the release in the ledger, and the Machine's metadata carries the same
|
|
37
45
|
* digest, which `chant components status --live` compares with it.
|
|
@@ -45,7 +53,7 @@
|
|
|
45
53
|
*/
|
|
46
54
|
import { createHash } from "node:crypto";
|
|
47
55
|
import { findMachine, flyMachineExec, flyMachineRelease, flyMachineRestart, flyMachineRestore, flyMachineStop, flyMachineVerify, readMachineRelease, releaseTarget, } from "../op/activities/machine-release.js";
|
|
48
|
-
import { defaultFlyHttp, parsePlan, resolveEndpoint } from "../op/activities/fly-apply.js";
|
|
56
|
+
import { defaultFlyHttp, machineSchedule, parsePlan, resolveEndpoint, skipsLaunch } from "../op/activities/fly-apply.js";
|
|
49
57
|
import { readFileSync } from "node:fs";
|
|
50
58
|
import { releaseAttributesSuffix } from "@intentius/chant/telemetry-attribution";
|
|
51
59
|
/** Most bytes of files, base64, a release puts in a Machine's config (as chud's fly-site.mjs capped them). */
|
|
@@ -131,6 +139,20 @@ const uriOf = (app, machine) => `fly://${app}/${machine}`;
|
|
|
131
139
|
export function createFlyReleaseCapability(deps = {}) {
|
|
132
140
|
const log = deps.log ?? ((line) => console.error(line));
|
|
133
141
|
const httpFor = () => deps.http ?? defaultFlyHttp();
|
|
142
|
+
/** On a failed release, put the plan's other Machines it updated back on their old configs. */
|
|
143
|
+
async function restoreOthers(released, input, http) {
|
|
144
|
+
for (const other of released.others) {
|
|
145
|
+
if (other.action !== "updated" || !other.previous)
|
|
146
|
+
continue;
|
|
147
|
+
try {
|
|
148
|
+
await flyMachineRestore({ app: other.app, machine: other.name, config: other.previous, endpoint: input.endpoint, wait: input.wait }, undefined, http);
|
|
149
|
+
log(`fly-release: restored ${other.app}/${other.name} to its previous config`);
|
|
150
|
+
}
|
|
151
|
+
catch (restoreErr) {
|
|
152
|
+
log(`fly-release: restore of ${other.app}/${other.name} failed: ${restoreErr instanceof Error ? restoreErr.message : String(restoreErr)}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
134
156
|
async function rollBack(ctx, input, output) {
|
|
135
157
|
if (!output)
|
|
136
158
|
return;
|
|
@@ -157,6 +179,14 @@ export function createFlyReleaseCapability(deps = {}) {
|
|
|
157
179
|
throw new Error("fly-release: a release needs its digest");
|
|
158
180
|
const http = httpFor();
|
|
159
181
|
const { plan, target } = loadTarget(input.plan, input.machine);
|
|
182
|
+
// A scheduled Machine is stopped between runs: nothing can exec in it or answer a health check.
|
|
183
|
+
if (skipsLaunch(target.request.body)) {
|
|
184
|
+
const why = `${target.app}/${target.name} is scheduled (${machineSchedule(target.request.body.config) ?? "skip_launch"}) and stays stopped between runs`;
|
|
185
|
+
if (input.migrations?.length)
|
|
186
|
+
throw new Error(`fly-release: ${why}, so no migration can run in it`);
|
|
187
|
+
if (input.verify?.url)
|
|
188
|
+
throw new Error(`fly-release: ${why}, so it has no health endpoint to verify at ${input.verify.url}`);
|
|
189
|
+
}
|
|
160
190
|
const gitSha = input.gitSha ?? (await (deps.headCommit ?? defaultHeadCommit)());
|
|
161
191
|
const configs = await (deps.configStore ?? defaultConfigStore)(ctx);
|
|
162
192
|
// The tree is checked against its digest before the Machine changes.
|
|
@@ -178,13 +208,18 @@ export function createFlyReleaseCapability(deps = {}) {
|
|
|
178
208
|
machine: input.machine,
|
|
179
209
|
release: { digest: input.digest, gitSha, ...(input.release ? { release: input.release } : {}) },
|
|
180
210
|
image: input.image,
|
|
211
|
+
...(input.images ? { images: input.images } : {}),
|
|
181
212
|
env,
|
|
182
213
|
...(source ? { files: source.files, cmd: source.cmd } : {}),
|
|
183
214
|
endpoint: input.endpoint,
|
|
184
215
|
wait: input.wait,
|
|
185
216
|
}, undefined, http);
|
|
186
217
|
const where = { app: released.app, machine: released.machine.name, endpoint: input.endpoint };
|
|
187
|
-
log(`fly-release: ${released.app}/${released.machine.name} ${released.action}, serving ${input.digest}`);
|
|
218
|
+
log(`fly-release: ${released.app}/${released.machine.name} ${released.action}, serving ${input.digest}${released.unlaunched ? ", stopped until its schedule starts it" : ""}`);
|
|
219
|
+
for (const other of released.others) {
|
|
220
|
+
if (other.action !== "noop")
|
|
221
|
+
log(`fly-release: ${other.app}/${other.name} ${other.action}${other.unlaunched ? ", stopped until its schedule starts it" : ""}`);
|
|
222
|
+
}
|
|
188
223
|
// The config the Machine served before is kept too, so a Machine
|
|
189
224
|
// released before chant recorded configs can still be rolled back to.
|
|
190
225
|
const replaced = released.previous?.release;
|
|
@@ -233,6 +268,7 @@ export function createFlyReleaseCapability(deps = {}) {
|
|
|
233
268
|
catch (restoreErr) {
|
|
234
269
|
log(`fly-release: restore failed: ${restoreErr instanceof Error ? restoreErr.message : String(restoreErr)}`);
|
|
235
270
|
}
|
|
271
|
+
await restoreOthers(released, input, http);
|
|
236
272
|
throw err;
|
|
237
273
|
}
|
|
238
274
|
await configs.write({ app: released.app, machine: released.machine.name, digest: input.digest }, released.config);
|
package/dist/integrity.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"algorithm": "sha256",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"manifest.json": "
|
|
4
|
+
"manifest.json": "16ce2bc354fb151535ac49542a1a026db2816d395e2ebfe37545df5cec0561fe",
|
|
5
5
|
"meta.json": "273f2a523b66f08ca91642dba2592c44765ab59ddf7329998884a0b08c6c3f24",
|
|
6
6
|
"types/index.d.ts": "75c29d3ba9faa7c2792a0a25c51dc13df011906ffbd4c9e3ccc80023f5f32667",
|
|
7
7
|
"rules/guest-sizing.ts": "8dd2db79a47ceab3d488f84f560aed1b1e4a66b4e36bf11f3baf6a8544d6e126",
|
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
"rules/fly-helpers.ts": "dd29d4b520727210a56ef604a89df380f91f8b35770bc28f5c51d0f99ca92dff",
|
|
11
11
|
"rules/fly010-machine-requires-image.ts": "dd9b70ee604867a9f02334013476afcf44a78b49bbba3d66296b8ccc2b02c8a0",
|
|
12
12
|
"rules/fly011-mount-references-declared-volume.ts": "4698f73b85954a4094a1445d42336698440bf99a4004c067529c5f9fa1047cc6",
|
|
13
|
-
"
|
|
13
|
+
"rules/fly012-machine-schedule.ts": "f94c75d64dd3888797c89da4e5dd11d95c47d45ff19a69a725cf098f705003b1",
|
|
14
|
+
"skills/chant-fly.md": "7346fd12cffcb4ce39feb0655550f47e330bf0cafc679dee1b08e4db5140969a",
|
|
14
15
|
"skills/chant-fly-patterns.md": "adc3c4432344c833e23d41ab470b7e12eb8d55e512cf856ac3ddda5b199e2a90",
|
|
15
|
-
"skills/chant-fly-ops.md": "
|
|
16
|
+
"skills/chant-fly-ops.md": "e2ec53f55d89ffaace9183c348d80a6c2f13da3ef3ac3987a0e4f17b62264b20",
|
|
16
17
|
"skills/chant-fly-sprites.md": "3d100680422151b58d082c3a7b30a286edfc52faa4887995c9ad5553873bab95"
|
|
17
18
|
},
|
|
18
|
-
"composite": "
|
|
19
|
+
"composite": "fdbd2e36f9bd236336b572f3986620f628651dc183ed5d367ab16d72b94f2d9a"
|
|
19
20
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The fly lexicon's chant audit catalog — metadata for the FLY post-synth
|
|
3
3
|
* checks, contributed via `flyPlugin.auditCatalog()` (#687).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Every entry carries `yamlBased: false`: each check reads the chant model
|
|
6
6
|
* (`ctx.entities`) rather than the emitted manifest, because what they need —
|
|
7
7
|
* whether a mount's volume is declared in the same stack — lives in the typed
|
|
8
8
|
* graph and is gone by the time `fly.toml` exists. So they fire on
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAe/D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAe/D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAsBpD,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The fly lexicon's chant audit catalog — metadata for the FLY post-synth
|
|
3
3
|
* checks, contributed via `flyPlugin.auditCatalog()` (#687).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Every entry carries `yamlBased: false`: each check reads the chant model
|
|
6
6
|
* (`ctx.entities`) rather than the emitted manifest, because what they need —
|
|
7
7
|
* whether a mount's volume is declared in the same stack — lives in the typed
|
|
8
8
|
* graph and is gone by the time `fly.toml` exists. So they fire on
|
|
@@ -23,6 +23,7 @@ function rule(id, tier, category, title, remediation) {
|
|
|
23
23
|
export const flyAuditCatalog = {
|
|
24
24
|
FLY010: rule("FLY010", "merge-worthy", "correctness", "Machine config has no image", "Set `config.image` on the Machine — a Machine cannot boot without one."),
|
|
25
25
|
FLY011: rule("FLY011", "merge-worthy", "correctness", "Machine mount references an undeclared volume", "Declare the Volume in the same stack, or point the mount at one that is."),
|
|
26
|
+
FLY012: rule("FLY012", "merge-worthy", "correctness", "Machine schedule is not one Fly runs", "Set `config.schedule` to `hourly`, `daily`, `weekly` or `monthly`; the Machines API takes no cron expression."),
|
|
26
27
|
};
|
|
27
28
|
// Prior art credits live beside the rules in ./audit-lineage.ts (see core audit/prior-art.ts).
|
|
28
29
|
applyLineage(flyAuditCatalog, flyAuditLineage);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-lineage.d.ts","sourceRoot":"","sources":["../../src/lint/audit-lineage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"audit-lineage.d.ts","sourceRoot":"","sources":["../../src/lint/audit-lineage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAOrD,CAAC"}
|
|
@@ -2,4 +2,7 @@ export const flyAuditLineage = {
|
|
|
2
2
|
FLY010: [
|
|
3
3
|
{ tool: "fly-docs", rule: "Create a Machine: config.image required", url: "https://fly.io/docs/machines/api/machines-resource/#create-a-machine", relation: "overlaps" },
|
|
4
4
|
],
|
|
5
|
+
FLY012: [
|
|
6
|
+
{ tool: "fly-docs", rule: "Machine config: schedule is hourly, daily, weekly or monthly", url: "https://fly.io/docs/machines/api/machines-resource/#machine-config-object-properties", relation: "overlaps" },
|
|
7
|
+
],
|
|
5
8
|
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FLY012: a Machine's `schedule` is one the Machines API runs (#4696).
|
|
3
|
+
*
|
|
4
|
+
* Fly runs a scheduled Machine `hourly`, `daily`, `weekly` or `monthly`, and
|
|
5
|
+
* rejects anything else when the Machine is created or updated. A cron
|
|
6
|
+
* expression is the usual mistake, so name the four values at build time
|
|
7
|
+
* rather than at the first release.
|
|
8
|
+
*/
|
|
9
|
+
import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
10
|
+
export declare const fly012: PostSynthCheck;
|
|
11
|
+
//# sourceMappingURL=fly012-machine-schedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fly012-machine-schedule.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/fly012-machine-schedule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,kCAAkC,CAAC;AAK9G,eAAO,MAAM,MAAM,EAAE,cAwBpB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FLY012: a Machine's `schedule` is one the Machines API runs (#4696).
|
|
3
|
+
*
|
|
4
|
+
* Fly runs a scheduled Machine `hourly`, `daily`, `weekly` or `monthly`, and
|
|
5
|
+
* rejects anything else when the Machine is created or updated. A cron
|
|
6
|
+
* expression is the usual mistake, so name the four values at build time
|
|
7
|
+
* rather than at the first release.
|
|
8
|
+
*/
|
|
9
|
+
import { readProps, entityTypeOf } from "./fly-helpers.js";
|
|
10
|
+
const SCHEDULES = ["hourly", "daily", "weekly", "monthly"];
|
|
11
|
+
export const fly012 = {
|
|
12
|
+
id: "FLY012",
|
|
13
|
+
description: "Machine schedule must be hourly, daily, weekly or monthly",
|
|
14
|
+
check(ctx) {
|
|
15
|
+
const diagnostics = [];
|
|
16
|
+
for (const [name, entity] of ctx.entities) {
|
|
17
|
+
if (entityTypeOf(entity) !== "Fly::Machines::Machine")
|
|
18
|
+
continue;
|
|
19
|
+
const config = readProps(entity).config;
|
|
20
|
+
if (!config)
|
|
21
|
+
continue;
|
|
22
|
+
const schedule = readProps(config).schedule;
|
|
23
|
+
if (schedule === undefined)
|
|
24
|
+
continue;
|
|
25
|
+
if (typeof schedule !== "string" || !SCHEDULES.includes(schedule)) {
|
|
26
|
+
diagnostics.push({
|
|
27
|
+
checkId: "FLY012",
|
|
28
|
+
severity: "error",
|
|
29
|
+
message: `Machine "${name}" has schedule ${JSON.stringify(schedule)}; Fly runs a Machine ${SCHEDULES.join(", ")}`,
|
|
30
|
+
entity: name,
|
|
31
|
+
lexicon: "fly",
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return diagnostics;
|
|
36
|
+
},
|
|
37
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAKvE,eAAO,MAAM,eAAe,EAAE,cAAc,EAI3C,CAAC"}
|
package/dist/manifest.json
CHANGED
package/dist/okf/index.md
CHANGED
|
@@ -18,3 +18,4 @@ okf_version: '0.2'
|
|
|
18
18
|
* [FLY004](/rules/FLY004.md) - No secret literals in machine config
|
|
19
19
|
* [FLY010](/rules/FLY010.md) - Machine config must specify an image — a Machine cannot boot without one
|
|
20
20
|
* [FLY011](/rules/FLY011.md) - A machine mount's volume must resolve to a Volume declared in the stack
|
|
21
|
+
* [FLY012](/rules/FLY012.md) - Machine schedule must be hourly, daily, weekly or monthly
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: FLY012
|
|
4
|
+
description: Machine schedule must be hourly, daily, weekly or monthly
|
|
5
|
+
id: FLY012
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: fly
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/fly/rules/
|
|
10
|
+
---
|
|
11
|
+
Machine schedule must be hourly, daily, weekly or monthly
|
|
12
|
+
|
|
13
|
+
## Applies to
|
|
14
|
+
|
|
15
|
+
- [Machine](/types/Machine.md)
|
|
@@ -23,3 +23,4 @@ resource_type: Fly::Machines::Machine
|
|
|
23
23
|
|
|
24
24
|
- [FLY010](/rules/FLY010.md): Machine config must specify an image — a Machine cannot boot without one
|
|
25
25
|
- [FLY011](/rules/FLY011.md): A machine mount's volume must resolve to a Volume declared in the stack
|
|
26
|
+
- [FLY012](/rules/FLY012.md): Machine schedule must be hourly, daily, weekly or monthly
|
|
@@ -176,6 +176,28 @@ export declare function withLease(ctx: ApplyCtx, app: string, id: string, http:
|
|
|
176
176
|
export declare function waitForMachine(ctx: ApplyCtx, app: string, id: string, version: string, http: FlyHttp, signal?: AbortSignal, opts?: WaitOpts & {
|
|
177
177
|
state?: string;
|
|
178
178
|
}): Promise<void>;
|
|
179
|
+
/**
|
|
180
|
+
* The Machines API's `schedule` values: Fly runs the Machine once per
|
|
181
|
+
* interval, counted from when the Machine was created or last updated.
|
|
182
|
+
*/
|
|
183
|
+
export declare const MACHINE_SCHEDULES: readonly ["hourly", "daily", "weekly", "monthly"];
|
|
184
|
+
/** A Machine config's `schedule`, or undefined when it runs no schedule. Pure. */
|
|
185
|
+
export declare function machineSchedule(config: unknown): string | undefined;
|
|
186
|
+
/**
|
|
187
|
+
* True when creating or updating the Machine leaves it unstarted: its
|
|
188
|
+
* request sets `skip_launch: true`, or its config has a `schedule` and the
|
|
189
|
+
* request doesn't set `skip_launch: false`. A scheduled Machine is stopped
|
|
190
|
+
* between runs, so an apply moves it to its new config and leaves the next
|
|
191
|
+
* run to Fly. Pure.
|
|
192
|
+
*/
|
|
193
|
+
export declare function skipsLaunch(body: Record<string, unknown>): boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Poll the Machine until it rests unstarted (`created`, `stopped` or
|
|
196
|
+
* `suspended`) at `version` (its new `instance_id`, when known): what a
|
|
197
|
+
* create or update with `skip_launch` settles in. flaps' `/wait` can't wait
|
|
198
|
+
* for this, since a Machine created without launching stays `created`.
|
|
199
|
+
*/
|
|
200
|
+
export declare function waitForUnlaunched(ctx: ApplyCtx, app: string, id: string, version: string, http: FlyHttp, signal?: AbortSignal, opts?: WaitOpts): Promise<string>;
|
|
179
201
|
/** Create the app if absent (idempotent). A create-time conflict means it exists. */
|
|
180
202
|
export declare function applyApp(ctx: ApplyCtx, req: FlapsRequest, http: FlyHttp, signal?: AbortSignal): Promise<{
|
|
181
203
|
app: string;
|
|
@@ -189,6 +211,9 @@ export declare function listMachines(ctx: ApplyCtx, app: string, http: FlyHttp,
|
|
|
189
211
|
* machine's new `instance_id`. Updates go through a lease. The declared machine
|
|
190
212
|
* is identified by name (falling back to the plan entity name), so re-applying
|
|
191
213
|
* an unchanged machine is a no-op.
|
|
214
|
+
*
|
|
215
|
+
* A Machine that {@link skipsLaunch} (a scheduled one, #4696) is created and
|
|
216
|
+
* updated with `skip_launch: true`, and the wait is for it to rest unstarted.
|
|
192
217
|
*/
|
|
193
218
|
export declare function applyMachine(ctx: ApplyCtx, app: string, entityName: string, req: FlapsRequest, http: FlyHttp, signal?: AbortSignal, opts?: WaitOpts): Promise<{
|
|
194
219
|
action: "created" | "updated" | "noop";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fly-apply.d.ts","sourceRoot":"","sources":["../../../src/op/activities/fly-apply.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fly-apply.d.ts","sourceRoot":"","sources":["../../../src/op/activities/fly-apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -303,6 +303,55 @@ export async function waitForMachine(ctx, app, id, version, http, signal, opts =
|
|
|
303
303
|
}
|
|
304
304
|
throw new Error(`machine ${app}/${id} did not reach ${state} within the deadline`);
|
|
305
305
|
}
|
|
306
|
+
// ── Scheduled Machines (#4696) ──────────────────────────────────────────────────
|
|
307
|
+
/**
|
|
308
|
+
* The Machines API's `schedule` values: Fly runs the Machine once per
|
|
309
|
+
* interval, counted from when the Machine was created or last updated.
|
|
310
|
+
*/
|
|
311
|
+
export const MACHINE_SCHEDULES = ["hourly", "daily", "weekly", "monthly"];
|
|
312
|
+
/** A Machine config's `schedule`, or undefined when it runs no schedule. Pure. */
|
|
313
|
+
export function machineSchedule(config) {
|
|
314
|
+
const schedule = config?.schedule;
|
|
315
|
+
return typeof schedule === "string" && schedule ? schedule : undefined;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* True when creating or updating the Machine leaves it unstarted: its
|
|
319
|
+
* request sets `skip_launch: true`, or its config has a `schedule` and the
|
|
320
|
+
* request doesn't set `skip_launch: false`. A scheduled Machine is stopped
|
|
321
|
+
* between runs, so an apply moves it to its new config and leaves the next
|
|
322
|
+
* run to Fly. Pure.
|
|
323
|
+
*/
|
|
324
|
+
export function skipsLaunch(body) {
|
|
325
|
+
if (typeof body.skip_launch === "boolean")
|
|
326
|
+
return body.skip_launch;
|
|
327
|
+
return machineSchedule(body.config) !== undefined;
|
|
328
|
+
}
|
|
329
|
+
/** The states a Machine rests in when nothing started it. */
|
|
330
|
+
const UNLAUNCHED_STATES = new Set(["created", "stopped", "suspended"]);
|
|
331
|
+
/**
|
|
332
|
+
* Poll the Machine until it rests unstarted (`created`, `stopped` or
|
|
333
|
+
* `suspended`) at `version` (its new `instance_id`, when known): what a
|
|
334
|
+
* create or update with `skip_launch` settles in. flaps' `/wait` can't wait
|
|
335
|
+
* for this, since a Machine created without launching stays `created`.
|
|
336
|
+
*/
|
|
337
|
+
export async function waitForUnlaunched(ctx, app, id, version, http, signal, opts = {}) {
|
|
338
|
+
const interval = opts.intervalMs ?? 1000;
|
|
339
|
+
const deadline = Date.now() + (opts.deadlineMs ?? 300000);
|
|
340
|
+
let seen = "";
|
|
341
|
+
while (Date.now() < deadline) {
|
|
342
|
+
if (signal?.aborted)
|
|
343
|
+
throw new Error("waitForUnlaunched aborted");
|
|
344
|
+
const res = await http("GET", machineUrl(ctx.base, app, id), undefined, undefined, signal);
|
|
345
|
+
if (res.status >= 300)
|
|
346
|
+
throw new Error(`machine ${app}/${id} lookup failed (${res.status}): ${res.text}`);
|
|
347
|
+
const m = parseMachine(res.text);
|
|
348
|
+
seen = m.state;
|
|
349
|
+
if (UNLAUNCHED_STATES.has(m.state) && (!version || m.instance_id === version))
|
|
350
|
+
return m.state;
|
|
351
|
+
await sleep(interval, signal);
|
|
352
|
+
}
|
|
353
|
+
throw new Error(`machine ${app}/${id} did not settle unstarted within the deadline (last ${seen || "unknown"})`);
|
|
354
|
+
}
|
|
306
355
|
// ── Resource operations ────────────────────────────────────────────────────────
|
|
307
356
|
/** Create the app if absent (idempotent). A create-time conflict means it exists. */
|
|
308
357
|
export async function applyApp(ctx, req, http, signal) {
|
|
@@ -335,18 +384,25 @@ export async function listMachines(ctx, app, http, signal) {
|
|
|
335
384
|
* machine's new `instance_id`. Updates go through a lease. The declared machine
|
|
336
385
|
* is identified by name (falling back to the plan entity name), so re-applying
|
|
337
386
|
* an unchanged machine is a no-op.
|
|
387
|
+
*
|
|
388
|
+
* A Machine that {@link skipsLaunch} (a scheduled one, #4696) is created and
|
|
389
|
+
* updated with `skip_launch: true`, and the wait is for it to rest unstarted.
|
|
338
390
|
*/
|
|
339
391
|
export async function applyMachine(ctx, app, entityName, req, http, signal, opts = {}) {
|
|
340
392
|
const name = typeof req.body.name === "string" && req.body.name ? req.body.name : entityName;
|
|
341
|
-
const
|
|
393
|
+
const unlaunched = skipsLaunch(req.body);
|
|
394
|
+
const body = { ...req.body, name, ...(unlaunched ? { skip_launch: true } : {}) };
|
|
342
395
|
const desiredConfig = req.body.config;
|
|
396
|
+
const settle = (m) => unlaunched
|
|
397
|
+
? waitForUnlaunched(ctx, app, m.id, m.instance_id, http, signal, opts)
|
|
398
|
+
: waitForMachine(ctx, app, m.id, m.instance_id, http, signal, opts);
|
|
343
399
|
const live = (await listMachines(ctx, app, http, signal)).find((m) => m.name === name);
|
|
344
400
|
if (!live) {
|
|
345
401
|
const res = await http("POST", machinesUrl(ctx.base, app), body, undefined, signal);
|
|
346
402
|
if (res.status >= 300)
|
|
347
403
|
throw new Error(`machine ${app}/${name} create failed (${res.status}): ${res.text}`);
|
|
348
404
|
const m = parseMachine(res.text);
|
|
349
|
-
await
|
|
405
|
+
await settle(m);
|
|
350
406
|
return { action: "created", id: m.id, name };
|
|
351
407
|
}
|
|
352
408
|
if (configEqual(desiredConfig, live.config)) {
|
|
@@ -356,7 +412,7 @@ export async function applyMachine(ctx, app, entityName, req, http, signal, opts
|
|
|
356
412
|
if (res.status >= 300)
|
|
357
413
|
throw new Error(`machine ${app}/${name} update failed (${res.status}): ${res.text}`);
|
|
358
414
|
const m = parseMachine(res.text);
|
|
359
|
-
await
|
|
415
|
+
await settle(m);
|
|
360
416
|
return { action: "updated", id: m.id, name };
|
|
361
417
|
}
|
|
362
418
|
/**
|
|
@@ -16,7 +16,10 @@
|
|
|
16
16
|
*
|
|
17
17
|
* - {@link flyMachineRelease}: upload and start. Apply the declared plan with
|
|
18
18
|
* the Machine serving the release (its image or env overridden when the
|
|
19
|
-
* release says so), and report the release and config it replaced.
|
|
19
|
+
* release says so), and report the release and config it replaced. A
|
|
20
|
+
* scheduled Machine (`config.schedule`, #4696) is updated without starting:
|
|
21
|
+
* it runs on its schedule. The plan's other Machines can take images of
|
|
22
|
+
* their own (`images`).
|
|
20
23
|
* - {@link flyMachineExec}: run a command inside the Machine (a migration).
|
|
21
24
|
* - {@link flyMachineRestart}, {@link flyMachineStop}: under a lease, then
|
|
22
25
|
* wait for the Machine to settle.
|
|
@@ -42,6 +45,8 @@ export interface ReleaseTarget {
|
|
|
42
45
|
name: string;
|
|
43
46
|
request: FlapsRequest;
|
|
44
47
|
}
|
|
48
|
+
/** Every Machine the plan declares, with its App resolved. Pure. */
|
|
49
|
+
export declare function planMachines(plan: FlyPlan): ReleaseTarget[];
|
|
45
50
|
/**
|
|
46
51
|
* The Machine a release targets: the plan's one Machine, or the one `machine`
|
|
47
52
|
* names (an entity name or a Machine name). Pure.
|
|
@@ -77,6 +82,12 @@ export interface FlyMachineReleaseArgs extends FlapsTarget {
|
|
|
77
82
|
files?: MachineFile[];
|
|
78
83
|
/** The command the Machine starts, in place of the image's: an argv, or a string run with `sh -c`. */
|
|
79
84
|
cmd?: string[] | string;
|
|
85
|
+
/**
|
|
86
|
+
* Images for the plan's other Machines, by entity or Machine name (#4696):
|
|
87
|
+
* a scheduled Machine beside the one that serves, say, built from the same
|
|
88
|
+
* commit. A name that is no other Machine in the plan is refused.
|
|
89
|
+
*/
|
|
90
|
+
images?: Record<string, string>;
|
|
80
91
|
wait?: WaitOpts;
|
|
81
92
|
}
|
|
82
93
|
/** One file a Machine's config carries, as the Machines API takes it. */
|
|
@@ -104,6 +115,19 @@ export interface FlyMachineReleaseResult {
|
|
|
104
115
|
release?: MachineRelease;
|
|
105
116
|
config: MachineConfig;
|
|
106
117
|
} | null;
|
|
118
|
+
/** True when the Machine was left unstarted: a scheduled Machine, which runs on its schedule (#4696). */
|
|
119
|
+
unlaunched: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* The plan's other Machines: what the apply did to each, whether it was
|
|
122
|
+
* left unstarted, and the config it had before (null when it was created).
|
|
123
|
+
*/
|
|
124
|
+
others: Array<{
|
|
125
|
+
name: string;
|
|
126
|
+
app: string;
|
|
127
|
+
action: "created" | "updated" | "noop";
|
|
128
|
+
unlaunched: boolean;
|
|
129
|
+
previous: MachineConfig | null;
|
|
130
|
+
}>;
|
|
107
131
|
}
|
|
108
132
|
/**
|
|
109
133
|
* Upload and start: apply the declared plan (the App, its Volumes, IPs,
|
|
@@ -111,6 +135,11 @@ export interface FlyMachineReleaseResult {
|
|
|
111
135
|
* under a lease, so the release serves from here on. A Machine that already
|
|
112
136
|
* serves this release keeps the `previousDigest` it shipped with, so running a
|
|
113
137
|
* release twice never makes it its own predecessor.
|
|
138
|
+
*
|
|
139
|
+
* A scheduled Machine (its config has a `schedule`, #4696), the target or
|
|
140
|
+
* another in the plan, is created or updated with `skip_launch` and left
|
|
141
|
+
* unstarted: Fly starts it on its schedule. Fly counts the interval from the
|
|
142
|
+
* update, so each release pushes the next run back by up to one interval.
|
|
114
143
|
*/
|
|
115
144
|
export declare function flyMachineRelease(args: FlyMachineReleaseArgs, signal?: AbortSignal, http?: FlyHttp): Promise<FlyMachineReleaseResult>;
|
|
116
145
|
export interface FlyMachineExecArgs extends FlapsTarget {
|
|
@@ -164,8 +193,9 @@ export interface FlyMachineVerifyArgs extends FlapsTarget {
|
|
|
164
193
|
intervalMs?: number;
|
|
165
194
|
}
|
|
166
195
|
/**
|
|
167
|
-
* The Machine is started and its metadata names release `digest`.
|
|
168
|
-
*
|
|
196
|
+
* The Machine is started and its metadata names release `digest`. A scheduled
|
|
197
|
+
* Machine (#4696) may also be resting unstarted (`created`, `stopped` or
|
|
198
|
+
* `suspended`) between runs. Given a `url`, its health endpoint answers 2xx too, and when that answer is JSON
|
|
169
199
|
* naming a `revision` or `digest`, it is this release's (the commit or the
|
|
170
200
|
* digest). Retries until `timeoutMs`, then throws the last reason.
|
|
171
201
|
*/
|
|
@@ -184,6 +214,8 @@ export interface FlyMachineRestoreArgs extends FlapsTarget {
|
|
|
184
214
|
* Put a recorded Machine config back: update the Machine to exactly `config`
|
|
185
215
|
* under a lease and wait for it to be started. Used on a failed release (the
|
|
186
216
|
* config it replaced) and by a rollback (the config an earlier release applied).
|
|
217
|
+
* A scheduled config (#4696) goes back with `skip_launch`, and the wait is for
|
|
218
|
+
* the Machine to rest unstarted.
|
|
187
219
|
*/
|
|
188
220
|
export declare function flyMachineRestore(args: FlyMachineRestoreArgs, signal?: AbortSignal, http?: FlyHttp): Promise<{
|
|
189
221
|
id: string;
|