@forgezero/agent 0.1.133 → 0.1.135
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/dist/agent-heartbeat.js +1 -1
- package/dist/bootstrap.js +1 -1
- package/dist/community-rehearsal-host.js +17 -0
- package/dist/definition.js +17 -0
- package/dist/deploy-compiler.d.ts +1 -0
- package/dist/deploy-compiler.js +18 -2
- package/dist/deploy-file.js +17 -0
- package/dist/deploy-plan-runner.js +13 -2
- package/dist/deploy-plan.d.ts +3 -1
- package/dist/deploy-plan.js +14 -2
- package/dist/deploy.d.ts +4 -0
- package/dist/deployment-pull.d.ts +1 -0
- package/dist/deployment.d.ts +2 -0
- package/dist/fz-agent.js +34 -5
- package/dist/fz.js +20 -3
- package/dist/metal-bootstrap.js +1 -1
- package/dist/metal-helper-socket.js +17 -0
- package/dist/metal-provision.js +17 -0
- package/dist/operator-bootstrap.js +1 -1
- package/dist/platform-bootstrap-runtime.js +17 -0
- package/dist/platform-fleet-verification.js +18 -1
- package/dist/platform-genesis.js +17 -0
- package/dist/provision.js +18 -1
- package/dist/software-helper.js +17 -0
- package/dist/software.js +17 -0
- package/dist/ubuntu.js +17 -0
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
package/dist/agent-heartbeat.js
CHANGED
package/dist/bootstrap.js
CHANGED
|
@@ -28,6 +28,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
28
28
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
29
29
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
30
30
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
31
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
32
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
31
33
|
var OS_CATALOG = [
|
|
32
34
|
{
|
|
33
35
|
id: "ubuntu",
|
|
@@ -414,6 +416,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
414
416
|
if (universe.exitCode !== 0)
|
|
415
417
|
return universe;
|
|
416
418
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
419
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
420
|
+
const core = await aptInstall("nginx");
|
|
421
|
+
if (core.exitCode !== 0)
|
|
422
|
+
return core;
|
|
423
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
424
|
+
try {
|
|
425
|
+
const module = join(directory2, "headers-more.deb");
|
|
426
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
427
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
428
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
429
|
+
});
|
|
430
|
+
} finally {
|
|
431
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
432
|
+
}
|
|
433
|
+
}
|
|
417
434
|
} else
|
|
418
435
|
installed = await aptInstall(packageName);
|
|
419
436
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
package/dist/definition.js
CHANGED
|
@@ -28,6 +28,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
28
28
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
29
29
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
30
30
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
31
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
32
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
31
33
|
var OS_CATALOG = [
|
|
32
34
|
{
|
|
33
35
|
id: "ubuntu",
|
|
@@ -414,6 +416,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
414
416
|
if (universe.exitCode !== 0)
|
|
415
417
|
return universe;
|
|
416
418
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
419
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
420
|
+
const core = await aptInstall("nginx");
|
|
421
|
+
if (core.exitCode !== 0)
|
|
422
|
+
return core;
|
|
423
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
424
|
+
try {
|
|
425
|
+
const module = join(directory2, "headers-more.deb");
|
|
426
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
427
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
428
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
429
|
+
});
|
|
430
|
+
} finally {
|
|
431
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
432
|
+
}
|
|
433
|
+
}
|
|
417
434
|
} else
|
|
418
435
|
installed = await aptInstall(packageName);
|
|
419
436
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
|
@@ -28,6 +28,7 @@ export interface DeploymentInitProvisioning {
|
|
|
28
28
|
maxMonthlySpendMinor: string;
|
|
29
29
|
}
|
|
30
30
|
export interface DeploymentInitOptions {
|
|
31
|
+
branch?: string;
|
|
31
32
|
runtime?: DeploymentInitRuntime;
|
|
32
33
|
operatingSystem?: 'ubuntu-24.04' | 'ubuntu-26.04';
|
|
33
34
|
isolation?: 'standard' | 'sev-snp';
|
package/dist/deploy-compiler.js
CHANGED
|
@@ -172,7 +172,7 @@ function validateCapacityCalibrationOptions(options) {
|
|
|
172
172
|
|
|
173
173
|
// src/deploy-plan.ts
|
|
174
174
|
var DEPLOY_PLAN_FORMAT = "forgezero-deployment-plan";
|
|
175
|
-
var DEPLOY_PLAN_VERSION =
|
|
175
|
+
var DEPLOY_PLAN_VERSION = 2;
|
|
176
176
|
|
|
177
177
|
class DeploymentPlanError extends Error {
|
|
178
178
|
constructor(message) {
|
|
@@ -186,6 +186,13 @@ var ACTION = /^[a-z][a-z0-9.-]{0,127}\/[a-z][a-z0-9.-]{0,127}@[1-9][0-9]{0,5}$/;
|
|
|
186
186
|
var VERSION = /^[A-Za-z0-9][A-Za-z0-9.+_-]{0,63}$/;
|
|
187
187
|
var ABSOLUTE_PATH = /^\/(?:[A-Za-z0-9._-]+\/?)*$/;
|
|
188
188
|
var HEALTH_PATH = /^\/[A-Za-z0-9._~!$&'()*+,;=:@%/-]{0,255}$/;
|
|
189
|
+
function deploymentBranch(value, where = "deployment.spec.source.branch") {
|
|
190
|
+
const branch = boundedString(value, where, 255);
|
|
191
|
+
if (branch === "@" || branch.startsWith("/") || branch.endsWith("/") || branch.startsWith(".") || branch.endsWith(".") || branch.endsWith(".lock") || branch.includes("..") || branch.includes("//") || branch.includes("@{") || /[\x00-\x20~^:?*\[\\]/.test(branch)) {
|
|
192
|
+
fail(where, "must be one exact valid Git branch name.");
|
|
193
|
+
}
|
|
194
|
+
return branch;
|
|
195
|
+
}
|
|
189
196
|
var fail = (where, message) => {
|
|
190
197
|
throw new DeploymentPlanError(`${where} ${message}`);
|
|
191
198
|
};
|
|
@@ -821,7 +828,10 @@ function compileDeployment(sourceValue) {
|
|
|
821
828
|
if (metadata.description !== undefined)
|
|
822
829
|
boundedString(metadata.description, "deployment.metadata.description", 1024);
|
|
823
830
|
const spec = object(source.spec, "deployment.spec");
|
|
824
|
-
exact3(spec, ["security", "inputs", "credentials", "targets", "requirements", "components", "workflows"], "deployment.spec");
|
|
831
|
+
exact3(spec, ["source", "security", "inputs", "credentials", "targets", "requirements", "components", "workflows"], "deployment.spec");
|
|
832
|
+
const sourceSelector = object(spec.source, "deployment.spec.source");
|
|
833
|
+
exact3(sourceSelector, ["branch"], "deployment.spec.source");
|
|
834
|
+
deploymentBranch(sourceSelector.branch);
|
|
825
835
|
if (spec.security !== undefined) {
|
|
826
836
|
const security = object(spec.security, "deployment.spec.security");
|
|
827
837
|
exact3(security, ["attestation"], "deployment.spec.security");
|
|
@@ -1152,6 +1162,7 @@ function compileDeployment(sourceValue) {
|
|
|
1152
1162
|
...metadata.description ? { description: metadata.description } : {},
|
|
1153
1163
|
requiredProviders: [...requiredProviders.values()].sort((left, right) => `${left.provider}:${left.contract}:${left.capability}`.localeCompare(`${right.provider}:${right.contract}:${right.capability}`)),
|
|
1154
1164
|
spec: {
|
|
1165
|
+
source: sourceSelector,
|
|
1155
1166
|
...spec.security ? { security: spec.security } : {},
|
|
1156
1167
|
inputs,
|
|
1157
1168
|
credentials,
|
|
@@ -1248,6 +1259,7 @@ function initCoordinates(options) {
|
|
|
1248
1259
|
const isolation = options.isolation ?? (runtime === "kata-snp" ? "sev-snp" : "standard");
|
|
1249
1260
|
const operatingSystem = options.operatingSystem ?? (isolation === "sev-snp" ? "ubuntu-26.04" : "ubuntu-24.04");
|
|
1250
1261
|
const result = {
|
|
1262
|
+
branch: options.branch ?? "main",
|
|
1251
1263
|
runtime,
|
|
1252
1264
|
isolation,
|
|
1253
1265
|
operatingSystem,
|
|
@@ -1261,6 +1273,9 @@ function initCoordinates(options) {
|
|
|
1261
1273
|
};
|
|
1262
1274
|
if (!/^[a-z][a-z0-9-]{0,62}$/.test(result.profile))
|
|
1263
1275
|
throw new Error("deployment profile must be a lowercase typed name");
|
|
1276
|
+
if (result.branch.length < 1 || result.branch.length > 255 || result.branch === "@" || result.branch.startsWith("/") || result.branch.endsWith("/") || result.branch.startsWith(".") || result.branch.endsWith(".") || result.branch.endsWith(".lock") || result.branch.includes("..") || result.branch.includes("//") || result.branch.includes("@{") || /[\x00-\x20~^:?*\[\\]/.test(result.branch)) {
|
|
1277
|
+
throw new Error("deployment branch must be one exact valid Git branch name");
|
|
1278
|
+
}
|
|
1264
1279
|
if (!Number.isSafeInteger(result.replicas) || result.replicas < 1 || result.replicas > 1024)
|
|
1265
1280
|
throw new Error("deployment replicas must be an integer from 1 to 1024");
|
|
1266
1281
|
if (!Number.isSafeInteger(result.cpuCores) || result.cpuCores < 1 || result.cpuCores > 1024)
|
|
@@ -1379,6 +1394,7 @@ export default defineDeployment({
|
|
|
1379
1394
|
kind: 'Deployment',
|
|
1380
1395
|
metadata: { name: '${safeName(name)}' },
|
|
1381
1396
|
spec: {
|
|
1397
|
+
source: { branch: '${selected.branch}' },
|
|
1382
1398
|
security: { attestation: '${selected.isolation === "sev-snp" ? "required" : "preferred"}' },
|
|
1383
1399
|
targets: {
|
|
1384
1400
|
app: target.compute({
|
package/dist/deploy-file.js
CHANGED
|
@@ -28,6 +28,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
28
28
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
29
29
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
30
30
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
31
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
32
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
31
33
|
var OS_CATALOG = [
|
|
32
34
|
{
|
|
33
35
|
id: "ubuntu",
|
|
@@ -414,6 +416,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
414
416
|
if (universe.exitCode !== 0)
|
|
415
417
|
return universe;
|
|
416
418
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
419
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
420
|
+
const core = await aptInstall("nginx");
|
|
421
|
+
if (core.exitCode !== 0)
|
|
422
|
+
return core;
|
|
423
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
424
|
+
try {
|
|
425
|
+
const module = join(directory2, "headers-more.deb");
|
|
426
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
427
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
428
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
429
|
+
});
|
|
430
|
+
} finally {
|
|
431
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
432
|
+
}
|
|
433
|
+
}
|
|
417
434
|
} else
|
|
418
435
|
installed = await aptInstall(packageName);
|
|
419
436
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
|
@@ -172,7 +172,7 @@ function validateCapacityCalibrationOptions(options) {
|
|
|
172
172
|
|
|
173
173
|
// src/deploy-plan.ts
|
|
174
174
|
var DEPLOY_PLAN_FORMAT = "forgezero-deployment-plan";
|
|
175
|
-
var DEPLOY_PLAN_VERSION =
|
|
175
|
+
var DEPLOY_PLAN_VERSION = 2;
|
|
176
176
|
|
|
177
177
|
class DeploymentPlanError extends Error {
|
|
178
178
|
constructor(message) {
|
|
@@ -186,6 +186,13 @@ var ACTION = /^[a-z][a-z0-9.-]{0,127}\/[a-z][a-z0-9.-]{0,127}@[1-9][0-9]{0,5}$/;
|
|
|
186
186
|
var VERSION = /^[A-Za-z0-9][A-Za-z0-9.+_-]{0,63}$/;
|
|
187
187
|
var ABSOLUTE_PATH = /^\/(?:[A-Za-z0-9._-]+\/?)*$/;
|
|
188
188
|
var HEALTH_PATH = /^\/[A-Za-z0-9._~!$&'()*+,;=:@%/-]{0,255}$/;
|
|
189
|
+
function deploymentBranch(value, where = "deployment.spec.source.branch") {
|
|
190
|
+
const branch = boundedString(value, where, 255);
|
|
191
|
+
if (branch === "@" || branch.startsWith("/") || branch.endsWith("/") || branch.startsWith(".") || branch.endsWith(".") || branch.endsWith(".lock") || branch.includes("..") || branch.includes("//") || branch.includes("@{") || /[\x00-\x20~^:?*\[\\]/.test(branch)) {
|
|
192
|
+
fail(where, "must be one exact valid Git branch name.");
|
|
193
|
+
}
|
|
194
|
+
return branch;
|
|
195
|
+
}
|
|
189
196
|
var fail = (where, message) => {
|
|
190
197
|
throw new DeploymentPlanError(`${where} ${message}`);
|
|
191
198
|
};
|
|
@@ -821,7 +828,10 @@ function compileDeployment(sourceValue) {
|
|
|
821
828
|
if (metadata.description !== undefined)
|
|
822
829
|
boundedString(metadata.description, "deployment.metadata.description", 1024);
|
|
823
830
|
const spec = object(source.spec, "deployment.spec");
|
|
824
|
-
exact3(spec, ["security", "inputs", "credentials", "targets", "requirements", "components", "workflows"], "deployment.spec");
|
|
831
|
+
exact3(spec, ["source", "security", "inputs", "credentials", "targets", "requirements", "components", "workflows"], "deployment.spec");
|
|
832
|
+
const sourceSelector = object(spec.source, "deployment.spec.source");
|
|
833
|
+
exact3(sourceSelector, ["branch"], "deployment.spec.source");
|
|
834
|
+
deploymentBranch(sourceSelector.branch);
|
|
825
835
|
if (spec.security !== undefined) {
|
|
826
836
|
const security = object(spec.security, "deployment.spec.security");
|
|
827
837
|
exact3(security, ["attestation"], "deployment.spec.security");
|
|
@@ -1152,6 +1162,7 @@ function compileDeployment(sourceValue) {
|
|
|
1152
1162
|
...metadata.description ? { description: metadata.description } : {},
|
|
1153
1163
|
requiredProviders: [...requiredProviders.values()].sort((left, right) => `${left.provider}:${left.contract}:${left.capability}`.localeCompare(`${right.provider}:${right.contract}:${right.capability}`)),
|
|
1154
1164
|
spec: {
|
|
1165
|
+
source: sourceSelector,
|
|
1155
1166
|
...spec.security ? { security: spec.security } : {},
|
|
1156
1167
|
inputs,
|
|
1157
1168
|
credentials,
|
package/dist/deploy-plan.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DeploymentSource, StageDefinition, WorkflowStepDefinition } from './deploy';
|
|
2
2
|
export declare const DEPLOY_PLAN_FORMAT: "forgezero-deployment-plan";
|
|
3
|
-
export declare const DEPLOY_PLAN_VERSION:
|
|
3
|
+
export declare const DEPLOY_PLAN_VERSION: 2;
|
|
4
4
|
export interface PlannedStep extends WorkflowStepDefinition {
|
|
5
5
|
id: string;
|
|
6
6
|
}
|
|
@@ -34,6 +34,8 @@ export interface DeploymentPlan {
|
|
|
34
34
|
export declare class DeploymentPlanError extends Error {
|
|
35
35
|
constructor(message: string);
|
|
36
36
|
}
|
|
37
|
+
/** Git check-ref-format compatible branch subset accepted by every source adapter. */
|
|
38
|
+
export declare function deploymentBranch(value: unknown, where?: string): string;
|
|
37
39
|
export declare function canonicalJson(value: unknown): string;
|
|
38
40
|
export declare function deploymentSourceDigest(source: DeploymentSource): `sha256:${string}`;
|
|
39
41
|
export declare function compileDeployment(sourceValue: unknown): DeploymentPlan;
|
package/dist/deploy-plan.js
CHANGED
|
@@ -172,7 +172,7 @@ function validateCapacityCalibrationOptions(options) {
|
|
|
172
172
|
|
|
173
173
|
// src/deploy-plan.ts
|
|
174
174
|
var DEPLOY_PLAN_FORMAT = "forgezero-deployment-plan";
|
|
175
|
-
var DEPLOY_PLAN_VERSION =
|
|
175
|
+
var DEPLOY_PLAN_VERSION = 2;
|
|
176
176
|
|
|
177
177
|
class DeploymentPlanError extends Error {
|
|
178
178
|
constructor(message) {
|
|
@@ -186,6 +186,13 @@ var ACTION = /^[a-z][a-z0-9.-]{0,127}\/[a-z][a-z0-9.-]{0,127}@[1-9][0-9]{0,5}$/;
|
|
|
186
186
|
var VERSION = /^[A-Za-z0-9][A-Za-z0-9.+_-]{0,63}$/;
|
|
187
187
|
var ABSOLUTE_PATH = /^\/(?:[A-Za-z0-9._-]+\/?)*$/;
|
|
188
188
|
var HEALTH_PATH = /^\/[A-Za-z0-9._~!$&'()*+,;=:@%/-]{0,255}$/;
|
|
189
|
+
function deploymentBranch(value, where = "deployment.spec.source.branch") {
|
|
190
|
+
const branch = boundedString(value, where, 255);
|
|
191
|
+
if (branch === "@" || branch.startsWith("/") || branch.endsWith("/") || branch.startsWith(".") || branch.endsWith(".") || branch.endsWith(".lock") || branch.includes("..") || branch.includes("//") || branch.includes("@{") || /[\x00-\x20~^:?*\[\\]/.test(branch)) {
|
|
192
|
+
fail(where, "must be one exact valid Git branch name.");
|
|
193
|
+
}
|
|
194
|
+
return branch;
|
|
195
|
+
}
|
|
189
196
|
var fail = (where, message) => {
|
|
190
197
|
throw new DeploymentPlanError(`${where} ${message}`);
|
|
191
198
|
};
|
|
@@ -821,7 +828,10 @@ function compileDeployment(sourceValue) {
|
|
|
821
828
|
if (metadata.description !== undefined)
|
|
822
829
|
boundedString(metadata.description, "deployment.metadata.description", 1024);
|
|
823
830
|
const spec = object(source.spec, "deployment.spec");
|
|
824
|
-
exact3(spec, ["security", "inputs", "credentials", "targets", "requirements", "components", "workflows"], "deployment.spec");
|
|
831
|
+
exact3(spec, ["source", "security", "inputs", "credentials", "targets", "requirements", "components", "workflows"], "deployment.spec");
|
|
832
|
+
const sourceSelector = object(spec.source, "deployment.spec.source");
|
|
833
|
+
exact3(sourceSelector, ["branch"], "deployment.spec.source");
|
|
834
|
+
deploymentBranch(sourceSelector.branch);
|
|
825
835
|
if (spec.security !== undefined) {
|
|
826
836
|
const security = object(spec.security, "deployment.spec.security");
|
|
827
837
|
exact3(security, ["attestation"], "deployment.spec.security");
|
|
@@ -1152,6 +1162,7 @@ function compileDeployment(sourceValue) {
|
|
|
1152
1162
|
...metadata.description ? { description: metadata.description } : {},
|
|
1153
1163
|
requiredProviders: [...requiredProviders.values()].sort((left, right) => `${left.provider}:${left.contract}:${left.capability}`.localeCompare(`${right.provider}:${right.contract}:${right.capability}`)),
|
|
1154
1164
|
spec: {
|
|
1165
|
+
source: sourceSelector,
|
|
1155
1166
|
...spec.security ? { security: spec.security } : {},
|
|
1156
1167
|
inputs,
|
|
1157
1168
|
credentials,
|
|
@@ -1235,6 +1246,7 @@ export {
|
|
|
1235
1246
|
parseDeploymentPlan,
|
|
1236
1247
|
deploymentSourceDigest,
|
|
1237
1248
|
deploymentPlanDigest,
|
|
1249
|
+
deploymentBranch,
|
|
1238
1250
|
compileDeployment,
|
|
1239
1251
|
canonicalJson,
|
|
1240
1252
|
DeploymentPlanError,
|
package/dist/deploy.d.ts
CHANGED
|
@@ -466,6 +466,10 @@ export interface DeploymentSource {
|
|
|
466
466
|
description?: string;
|
|
467
467
|
};
|
|
468
468
|
spec: {
|
|
469
|
+
/** Exact Git branch this checked-in plan is valid for. */
|
|
470
|
+
source: {
|
|
471
|
+
branch: string;
|
|
472
|
+
};
|
|
469
473
|
security?: {
|
|
470
474
|
attestation?: 'required' | 'preferred' | 'disabled';
|
|
471
475
|
};
|
|
@@ -12,6 +12,7 @@ export interface RemoteDeploymentClaim {
|
|
|
12
12
|
releaseExecutor: boolean;
|
|
13
13
|
assignment?: NonNullable<import('./deployment').DeploymentRequest['assignment']>;
|
|
14
14
|
connectivityCapabilities?: import('./deployment-connectivity').DeploymentConnectivityCapabilities;
|
|
15
|
+
credentialBindings?: Readonly<Record<string, string>>;
|
|
15
16
|
source: {
|
|
16
17
|
repository: string;
|
|
17
18
|
branch: string;
|
package/dist/deployment.d.ts
CHANGED
|
@@ -62,6 +62,8 @@ export interface DeploymentRequest {
|
|
|
62
62
|
};
|
|
63
63
|
/** Connector-scoped, one-claim capabilities. Never the project Cloudflare management token. */
|
|
64
64
|
connectivityCapabilities?: DeploymentConnectivityCapabilities;
|
|
65
|
+
/** Server-owned alias to scoped Vault entry-name overrides. */
|
|
66
|
+
credentialBindings?: Readonly<Record<string, string>>;
|
|
65
67
|
}
|
|
66
68
|
export interface DeploymentResult {
|
|
67
69
|
key: string;
|
package/dist/fz-agent.js
CHANGED
|
@@ -5024,6 +5024,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
5024
5024
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
5025
5025
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
5026
5026
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
5027
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
5028
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
5027
5029
|
var OS_CATALOG = [
|
|
5028
5030
|
{
|
|
5029
5031
|
id: "ubuntu",
|
|
@@ -5410,6 +5412,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
5410
5412
|
if (universe.exitCode !== 0)
|
|
5411
5413
|
return universe;
|
|
5412
5414
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
5415
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
5416
|
+
const core = await aptInstall("nginx");
|
|
5417
|
+
if (core.exitCode !== 0)
|
|
5418
|
+
return core;
|
|
5419
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
5420
|
+
try {
|
|
5421
|
+
const module = join(directory2, "headers-more.deb");
|
|
5422
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
5423
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
5424
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
5425
|
+
});
|
|
5426
|
+
} finally {
|
|
5427
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
5428
|
+
}
|
|
5429
|
+
}
|
|
5413
5430
|
} else
|
|
5414
5431
|
installed = await aptInstall(packageName);
|
|
5415
5432
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
|
@@ -6445,7 +6462,7 @@ function validateBuiltInProvider(requirement2, where) {
|
|
|
6445
6462
|
|
|
6446
6463
|
// src/deploy-plan.ts
|
|
6447
6464
|
var DEPLOY_PLAN_FORMAT = "forgezero-deployment-plan";
|
|
6448
|
-
var DEPLOY_PLAN_VERSION =
|
|
6465
|
+
var DEPLOY_PLAN_VERSION = 2;
|
|
6449
6466
|
|
|
6450
6467
|
class DeploymentPlanError extends Error {
|
|
6451
6468
|
constructor(message) {
|
|
@@ -6459,6 +6476,13 @@ var ACTION = /^[a-z][a-z0-9.-]{0,127}\/[a-z][a-z0-9.-]{0,127}@[1-9][0-9]{0,5}$/;
|
|
|
6459
6476
|
var VERSION = /^[A-Za-z0-9][A-Za-z0-9.+_-]{0,63}$/;
|
|
6460
6477
|
var ABSOLUTE_PATH = /^\/(?:[A-Za-z0-9._-]+\/?)*$/;
|
|
6461
6478
|
var HEALTH_PATH = /^\/[A-Za-z0-9._~!$&'()*+,;=:@%/-]{0,255}$/;
|
|
6479
|
+
function deploymentBranch(value, where = "deployment.spec.source.branch") {
|
|
6480
|
+
const branch = boundedString(value, where, 255);
|
|
6481
|
+
if (branch === "@" || branch.startsWith("/") || branch.endsWith("/") || branch.startsWith(".") || branch.endsWith(".") || branch.endsWith(".lock") || branch.includes("..") || branch.includes("//") || branch.includes("@{") || /[\x00-\x20~^:?*\[\\]/.test(branch)) {
|
|
6482
|
+
fail(where, "must be one exact valid Git branch name.");
|
|
6483
|
+
}
|
|
6484
|
+
return branch;
|
|
6485
|
+
}
|
|
6462
6486
|
var fail = (where, message) => {
|
|
6463
6487
|
throw new DeploymentPlanError(`${where} ${message}`);
|
|
6464
6488
|
};
|
|
@@ -7094,7 +7118,10 @@ function compileDeployment(sourceValue) {
|
|
|
7094
7118
|
if (metadata.description !== undefined)
|
|
7095
7119
|
boundedString(metadata.description, "deployment.metadata.description", 1024);
|
|
7096
7120
|
const spec = object(source.spec, "deployment.spec");
|
|
7097
|
-
exact3(spec, ["security", "inputs", "credentials", "targets", "requirements", "components", "workflows"], "deployment.spec");
|
|
7121
|
+
exact3(spec, ["source", "security", "inputs", "credentials", "targets", "requirements", "components", "workflows"], "deployment.spec");
|
|
7122
|
+
const sourceSelector = object(spec.source, "deployment.spec.source");
|
|
7123
|
+
exact3(sourceSelector, ["branch"], "deployment.spec.source");
|
|
7124
|
+
deploymentBranch(sourceSelector.branch);
|
|
7098
7125
|
if (spec.security !== undefined) {
|
|
7099
7126
|
const security = object(spec.security, "deployment.spec.security");
|
|
7100
7127
|
exact3(security, ["attestation"], "deployment.spec.security");
|
|
@@ -7425,6 +7452,7 @@ function compileDeployment(sourceValue) {
|
|
|
7425
7452
|
...metadata.description ? { description: metadata.description } : {},
|
|
7426
7453
|
requiredProviders: [...requiredProviders.values()].sort((left, right) => `${left.provider}:${left.contract}:${left.capability}`.localeCompare(`${right.provider}:${right.contract}:${right.capability}`)),
|
|
7427
7454
|
spec: {
|
|
7455
|
+
source: sourceSelector,
|
|
7428
7456
|
...spec.security ? { security: spec.security } : {},
|
|
7429
7457
|
inputs,
|
|
7430
7458
|
credentials,
|
|
@@ -8551,7 +8579,7 @@ function createDeploymentManager(options) {
|
|
|
8551
8579
|
const credential = plan.spec.credentials?.[credentialName];
|
|
8552
8580
|
if (!credential || !options.cache)
|
|
8553
8581
|
throw new DeploymentActionError("refused", `credential ${credentialName} is unavailable`);
|
|
8554
|
-
environment[environmentName] = await options.cache.get(credential.source.name);
|
|
8582
|
+
environment[environmentName] = await options.cache.get(request.credentialBindings?.[credentialName] ?? credential.source.name);
|
|
8555
8583
|
credentialValues.push(environment[environmentName]);
|
|
8556
8584
|
}
|
|
8557
8585
|
}
|
|
@@ -9101,7 +9129,8 @@ async function deployClaim(options, claim) {
|
|
|
9101
9129
|
revision: claim.revision,
|
|
9102
9130
|
releaseExecutor: claim.releaseExecutor,
|
|
9103
9131
|
...claim.assignment ? { assignment: claim.assignment } : {},
|
|
9104
|
-
...claim.connectivityCapabilities ? { connectivityCapabilities: claim.connectivityCapabilities } : {}
|
|
9132
|
+
...claim.connectivityCapabilities ? { connectivityCapabilities: claim.connectivityCapabilities } : {},
|
|
9133
|
+
...claim.credentialBindings ? { credentialBindings: claim.credentialBindings } : {}
|
|
9105
9134
|
}).result;
|
|
9106
9135
|
result = options.telemetry ? await options.telemetry.observe("deployment.run", run2) : await run2();
|
|
9107
9136
|
} finally {
|
|
@@ -9652,7 +9681,7 @@ async function writeAndCloseProcessInput(input, value) {
|
|
|
9652
9681
|
}
|
|
9653
9682
|
|
|
9654
9683
|
// src/version.ts
|
|
9655
|
-
var VERSION2 = "0.1.
|
|
9684
|
+
var VERSION2 = "0.1.135";
|
|
9656
9685
|
|
|
9657
9686
|
// src/ssh-bootstrap.ts
|
|
9658
9687
|
function deriveMetalAdmissionProvisioning(lscpu) {
|
package/dist/fz.js
CHANGED
|
@@ -6007,7 +6007,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
|
|
|
6007
6007
|
var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
|
|
6008
6008
|
|
|
6009
6009
|
// src/version.ts
|
|
6010
|
-
var VERSION2 = "0.1.
|
|
6010
|
+
var VERSION2 = "0.1.135";
|
|
6011
6011
|
|
|
6012
6012
|
// src/software.ts
|
|
6013
6013
|
var PINNED_BUN_VERSION = "1.3.14";
|
|
@@ -10816,7 +10816,7 @@ function validateBuiltInProvider(requirement2, where) {
|
|
|
10816
10816
|
|
|
10817
10817
|
// src/deploy-plan.ts
|
|
10818
10818
|
var DEPLOY_PLAN_FORMAT = "forgezero-deployment-plan";
|
|
10819
|
-
var DEPLOY_PLAN_VERSION =
|
|
10819
|
+
var DEPLOY_PLAN_VERSION = 2;
|
|
10820
10820
|
|
|
10821
10821
|
class DeploymentPlanError extends Error {
|
|
10822
10822
|
constructor(message) {
|
|
@@ -10830,6 +10830,13 @@ var ACTION = /^[a-z][a-z0-9.-]{0,127}\/[a-z][a-z0-9.-]{0,127}@[1-9][0-9]{0,5}$/;
|
|
|
10830
10830
|
var VERSION3 = /^[A-Za-z0-9][A-Za-z0-9.+_-]{0,63}$/;
|
|
10831
10831
|
var ABSOLUTE_PATH = /^\/(?:[A-Za-z0-9._-]+\/?)*$/;
|
|
10832
10832
|
var HEALTH_PATH = /^\/[A-Za-z0-9._~!$&'()*+,;=:@%/-]{0,255}$/;
|
|
10833
|
+
function deploymentBranch(value, where = "deployment.spec.source.branch") {
|
|
10834
|
+
const branch = boundedString(value, where, 255);
|
|
10835
|
+
if (branch === "@" || branch.startsWith("/") || branch.endsWith("/") || branch.startsWith(".") || branch.endsWith(".") || branch.endsWith(".lock") || branch.includes("..") || branch.includes("//") || branch.includes("@{") || /[\x00-\x20~^:?*\[\\]/.test(branch)) {
|
|
10836
|
+
fail2(where, "must be one exact valid Git branch name.");
|
|
10837
|
+
}
|
|
10838
|
+
return branch;
|
|
10839
|
+
}
|
|
10833
10840
|
var fail2 = (where, message) => {
|
|
10834
10841
|
throw new DeploymentPlanError(`${where} ${message}`);
|
|
10835
10842
|
};
|
|
@@ -11465,7 +11472,10 @@ function compileDeployment(sourceValue) {
|
|
|
11465
11472
|
if (metadata.description !== undefined)
|
|
11466
11473
|
boundedString(metadata.description, "deployment.metadata.description", 1024);
|
|
11467
11474
|
const spec = object(source.spec, "deployment.spec");
|
|
11468
|
-
exact3(spec, ["security", "inputs", "credentials", "targets", "requirements", "components", "workflows"], "deployment.spec");
|
|
11475
|
+
exact3(spec, ["source", "security", "inputs", "credentials", "targets", "requirements", "components", "workflows"], "deployment.spec");
|
|
11476
|
+
const sourceSelector = object(spec.source, "deployment.spec.source");
|
|
11477
|
+
exact3(sourceSelector, ["branch"], "deployment.spec.source");
|
|
11478
|
+
deploymentBranch(sourceSelector.branch);
|
|
11469
11479
|
if (spec.security !== undefined) {
|
|
11470
11480
|
const security = object(spec.security, "deployment.spec.security");
|
|
11471
11481
|
exact3(security, ["attestation"], "deployment.spec.security");
|
|
@@ -11796,6 +11806,7 @@ function compileDeployment(sourceValue) {
|
|
|
11796
11806
|
...metadata.description ? { description: metadata.description } : {},
|
|
11797
11807
|
requiredProviders: [...requiredProviders.values()].sort((left, right) => `${left.provider}:${left.contract}:${left.capability}`.localeCompare(`${right.provider}:${right.contract}:${right.capability}`)),
|
|
11798
11808
|
spec: {
|
|
11809
|
+
source: sourceSelector,
|
|
11799
11810
|
...spec.security ? { security: spec.security } : {},
|
|
11800
11811
|
inputs,
|
|
11801
11812
|
credentials,
|
|
@@ -11888,6 +11899,7 @@ function initCoordinates(options) {
|
|
|
11888
11899
|
const isolation = options.isolation ?? (runtime === "kata-snp" ? "sev-snp" : "standard");
|
|
11889
11900
|
const operatingSystem = options.operatingSystem ?? (isolation === "sev-snp" ? "ubuntu-26.04" : "ubuntu-24.04");
|
|
11890
11901
|
const result = {
|
|
11902
|
+
branch: options.branch ?? "main",
|
|
11891
11903
|
runtime,
|
|
11892
11904
|
isolation,
|
|
11893
11905
|
operatingSystem,
|
|
@@ -11901,6 +11913,9 @@ function initCoordinates(options) {
|
|
|
11901
11913
|
};
|
|
11902
11914
|
if (!/^[a-z][a-z0-9-]{0,62}$/.test(result.profile))
|
|
11903
11915
|
throw new Error("deployment profile must be a lowercase typed name");
|
|
11916
|
+
if (result.branch.length < 1 || result.branch.length > 255 || result.branch === "@" || result.branch.startsWith("/") || result.branch.endsWith("/") || result.branch.startsWith(".") || result.branch.endsWith(".") || result.branch.endsWith(".lock") || result.branch.includes("..") || result.branch.includes("//") || result.branch.includes("@{") || /[\x00-\x20~^:?*\[\\]/.test(result.branch)) {
|
|
11917
|
+
throw new Error("deployment branch must be one exact valid Git branch name");
|
|
11918
|
+
}
|
|
11904
11919
|
if (!Number.isSafeInteger(result.replicas) || result.replicas < 1 || result.replicas > 1024)
|
|
11905
11920
|
throw new Error("deployment replicas must be an integer from 1 to 1024");
|
|
11906
11921
|
if (!Number.isSafeInteger(result.cpuCores) || result.cpuCores < 1 || result.cpuCores > 1024)
|
|
@@ -12019,6 +12034,7 @@ export default defineDeployment({
|
|
|
12019
12034
|
kind: 'Deployment',
|
|
12020
12035
|
metadata: { name: '${safeName2(name)}' },
|
|
12021
12036
|
spec: {
|
|
12037
|
+
source: { branch: '${selected.branch}' },
|
|
12022
12038
|
security: { attestation: '${selected.isolation === "sev-snp" ? "required" : "preferred"}' },
|
|
12023
12039
|
targets: {
|
|
12024
12040
|
app: target.compute({
|
|
@@ -20977,6 +20993,7 @@ async function cmdDeploy(options, args) {
|
|
|
20977
20993
|
initializeTypeScriptDeployment(options.projectRoot, {
|
|
20978
20994
|
name: options.projectName ?? basename3(resolve13(options.projectRoot)),
|
|
20979
20995
|
force: options.force,
|
|
20996
|
+
branch: options.branch,
|
|
20980
20997
|
runtime: options.deployRuntime,
|
|
20981
20998
|
operatingSystem: options.deployOperatingSystem,
|
|
20982
20999
|
isolation: options.deployIsolation,
|
package/dist/metal-bootstrap.js
CHANGED
|
@@ -366,7 +366,7 @@ function systemdAgentEgressDirectives(loopbackTcpPorts = []) {
|
|
|
366
366
|
}
|
|
367
367
|
|
|
368
368
|
// src/version.ts
|
|
369
|
-
var VERSION = "0.1.
|
|
369
|
+
var VERSION = "0.1.135";
|
|
370
370
|
|
|
371
371
|
// src/otel-collector.ts
|
|
372
372
|
var FORGEZERO_OTEL_COLLECTOR_UNIT = "forgezero-otel-collector.service";
|
|
@@ -168,6 +168,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
168
168
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
169
169
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
170
170
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
171
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
172
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
171
173
|
var OS_CATALOG = [
|
|
172
174
|
{
|
|
173
175
|
id: "ubuntu",
|
|
@@ -554,6 +556,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
554
556
|
if (universe.exitCode !== 0)
|
|
555
557
|
return universe;
|
|
556
558
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
559
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
560
|
+
const core = await aptInstall("nginx");
|
|
561
|
+
if (core.exitCode !== 0)
|
|
562
|
+
return core;
|
|
563
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
564
|
+
try {
|
|
565
|
+
const module = join(directory2, "headers-more.deb");
|
|
566
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
567
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
568
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
569
|
+
});
|
|
570
|
+
} finally {
|
|
571
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
572
|
+
}
|
|
573
|
+
}
|
|
557
574
|
} else
|
|
558
575
|
installed = await aptInstall(packageName);
|
|
559
576
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
package/dist/metal-provision.js
CHANGED
|
@@ -168,6 +168,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
168
168
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
169
169
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
170
170
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
171
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
172
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
171
173
|
var OS_CATALOG = [
|
|
172
174
|
{
|
|
173
175
|
id: "ubuntu",
|
|
@@ -554,6 +556,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
554
556
|
if (universe.exitCode !== 0)
|
|
555
557
|
return universe;
|
|
556
558
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
559
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
560
|
+
const core = await aptInstall("nginx");
|
|
561
|
+
if (core.exitCode !== 0)
|
|
562
|
+
return core;
|
|
563
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
564
|
+
try {
|
|
565
|
+
const module = join(directory2, "headers-more.deb");
|
|
566
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
567
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
568
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
569
|
+
});
|
|
570
|
+
} finally {
|
|
571
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
572
|
+
}
|
|
573
|
+
}
|
|
557
574
|
} else
|
|
558
575
|
installed = await aptInstall(packageName);
|
|
559
576
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
|
@@ -28,6 +28,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
28
28
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
29
29
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
30
30
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
31
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
32
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
31
33
|
var OS_CATALOG = [
|
|
32
34
|
{
|
|
33
35
|
id: "ubuntu",
|
|
@@ -414,6 +416,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
414
416
|
if (universe.exitCode !== 0)
|
|
415
417
|
return universe;
|
|
416
418
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
419
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
420
|
+
const core = await aptInstall("nginx");
|
|
421
|
+
if (core.exitCode !== 0)
|
|
422
|
+
return core;
|
|
423
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
424
|
+
try {
|
|
425
|
+
const module = join(directory2, "headers-more.deb");
|
|
426
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
427
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
428
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
429
|
+
});
|
|
430
|
+
} finally {
|
|
431
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
432
|
+
}
|
|
433
|
+
}
|
|
417
434
|
} else
|
|
418
435
|
installed = await aptInstall(packageName);
|
|
419
436
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
|
@@ -871,6 +871,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
871
871
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
872
872
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
873
873
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
874
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
875
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
874
876
|
var OS_CATALOG = [
|
|
875
877
|
{
|
|
876
878
|
id: "ubuntu",
|
|
@@ -1257,6 +1259,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
1257
1259
|
if (universe.exitCode !== 0)
|
|
1258
1260
|
return universe;
|
|
1259
1261
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
1262
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
1263
|
+
const core = await aptInstall("nginx");
|
|
1264
|
+
if (core.exitCode !== 0)
|
|
1265
|
+
return core;
|
|
1266
|
+
const directory2 = mkdtempSync(join3(tmpdir(), "forgezero-nginx-"));
|
|
1267
|
+
try {
|
|
1268
|
+
const module = join3(directory2, "headers-more.deb");
|
|
1269
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
1270
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
1271
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
1272
|
+
});
|
|
1273
|
+
} finally {
|
|
1274
|
+
rmSync4(directory2, { recursive: true, force: true });
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1260
1277
|
} else
|
|
1261
1278
|
installed = await aptInstall(packageName);
|
|
1262
1279
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
|
@@ -3032,7 +3049,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
|
|
|
3032
3049
|
}
|
|
3033
3050
|
|
|
3034
3051
|
// src/version.ts
|
|
3035
|
-
var VERSION3 = "0.1.
|
|
3052
|
+
var VERSION3 = "0.1.135";
|
|
3036
3053
|
|
|
3037
3054
|
// src/egress-policy.ts
|
|
3038
3055
|
import { realpathSync as realpathSync3 } from "node:fs";
|
package/dist/platform-genesis.js
CHANGED
|
@@ -28,6 +28,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
28
28
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
29
29
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
30
30
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
31
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
32
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
31
33
|
var OS_CATALOG = [
|
|
32
34
|
{
|
|
33
35
|
id: "ubuntu",
|
|
@@ -414,6 +416,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
414
416
|
if (universe.exitCode !== 0)
|
|
415
417
|
return universe;
|
|
416
418
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
419
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
420
|
+
const core = await aptInstall("nginx");
|
|
421
|
+
if (core.exitCode !== 0)
|
|
422
|
+
return core;
|
|
423
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
424
|
+
try {
|
|
425
|
+
const module = join(directory2, "headers-more.deb");
|
|
426
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
427
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
428
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
429
|
+
});
|
|
430
|
+
} finally {
|
|
431
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
432
|
+
}
|
|
433
|
+
}
|
|
417
434
|
} else
|
|
418
435
|
installed = await aptInstall(packageName);
|
|
419
436
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
package/dist/provision.js
CHANGED
|
@@ -871,6 +871,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
871
871
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
872
872
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
873
873
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
874
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
875
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
874
876
|
var OS_CATALOG = [
|
|
875
877
|
{
|
|
876
878
|
id: "ubuntu",
|
|
@@ -1257,6 +1259,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
1257
1259
|
if (universe.exitCode !== 0)
|
|
1258
1260
|
return universe;
|
|
1259
1261
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
1262
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
1263
|
+
const core = await aptInstall("nginx");
|
|
1264
|
+
if (core.exitCode !== 0)
|
|
1265
|
+
return core;
|
|
1266
|
+
const directory2 = mkdtempSync(join3(tmpdir(), "forgezero-nginx-"));
|
|
1267
|
+
try {
|
|
1268
|
+
const module = join3(directory2, "headers-more.deb");
|
|
1269
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
1270
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
1271
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
1272
|
+
});
|
|
1273
|
+
} finally {
|
|
1274
|
+
rmSync4(directory2, { recursive: true, force: true });
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1260
1277
|
} else
|
|
1261
1278
|
installed = await aptInstall(packageName);
|
|
1262
1279
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
|
@@ -3032,7 +3049,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
|
|
|
3032
3049
|
}
|
|
3033
3050
|
|
|
3034
3051
|
// src/version.ts
|
|
3035
|
-
var VERSION3 = "0.1.
|
|
3052
|
+
var VERSION3 = "0.1.135";
|
|
3036
3053
|
|
|
3037
3054
|
// src/egress-policy.ts
|
|
3038
3055
|
import { realpathSync as realpathSync3 } from "node:fs";
|
package/dist/software-helper.js
CHANGED
|
@@ -28,6 +28,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
28
28
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
29
29
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
30
30
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
31
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
32
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
31
33
|
var OS_CATALOG = [
|
|
32
34
|
{
|
|
33
35
|
id: "ubuntu",
|
|
@@ -414,6 +416,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
414
416
|
if (universe.exitCode !== 0)
|
|
415
417
|
return universe;
|
|
416
418
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
419
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
420
|
+
const core = await aptInstall("nginx");
|
|
421
|
+
if (core.exitCode !== 0)
|
|
422
|
+
return core;
|
|
423
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
424
|
+
try {
|
|
425
|
+
const module = join(directory2, "headers-more.deb");
|
|
426
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
427
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
428
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
429
|
+
});
|
|
430
|
+
} finally {
|
|
431
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
432
|
+
}
|
|
433
|
+
}
|
|
417
434
|
} else
|
|
418
435
|
installed = await aptInstall(packageName);
|
|
419
436
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
package/dist/software.js
CHANGED
|
@@ -28,6 +28,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
28
28
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
29
29
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
30
30
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
31
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
32
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
31
33
|
var OS_CATALOG = [
|
|
32
34
|
{
|
|
33
35
|
id: "ubuntu",
|
|
@@ -414,6 +416,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
414
416
|
if (universe.exitCode !== 0)
|
|
415
417
|
return universe;
|
|
416
418
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
419
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
420
|
+
const core = await aptInstall("nginx");
|
|
421
|
+
if (core.exitCode !== 0)
|
|
422
|
+
return core;
|
|
423
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
424
|
+
try {
|
|
425
|
+
const module = join(directory2, "headers-more.deb");
|
|
426
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
427
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
428
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
429
|
+
});
|
|
430
|
+
} finally {
|
|
431
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
432
|
+
}
|
|
433
|
+
}
|
|
417
434
|
} else
|
|
418
435
|
installed = await aptInstall(packageName);
|
|
419
436
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
package/dist/ubuntu.js
CHANGED
|
@@ -28,6 +28,8 @@ var KATA_CONTAINERS_VERSION = "4.0.0";
|
|
|
28
28
|
var NERDCTL_SHA256 = "de3206aeb7cbd5f20f5fb1f55c1e3bf2db1be567812a8a3f5e65eba2488347ee";
|
|
29
29
|
var BUILDKIT_SHA256 = "2975d0f651ad96ba8b80b9992ae1f9a964f4408569af5b6dc36544165c3926af";
|
|
30
30
|
var KATA_SHA256 = "2c3b9dfeba355582b40aee462b12916c9740654d0230f696adf719d67b063a8c";
|
|
31
|
+
var RESOLUTE_HEADERS_MORE_URL = "https://archive.ubuntu.com/ubuntu/pool/universe/libn/libnginx-mod-http-headers-more-filter/libnginx-mod-http-headers-more-filter_0.39-2build3_amd64.deb";
|
|
32
|
+
var RESOLUTE_HEADERS_MORE_SHA256 = "ead6e05183c89c0b6059bb15a493545b84aa4fc1cf05a0b54f825cd540c68bae";
|
|
31
33
|
var OS_CATALOG = [
|
|
32
34
|
{
|
|
33
35
|
id: "ubuntu",
|
|
@@ -414,6 +416,21 @@ async function executeSoftwareOperation(operation) {
|
|
|
414
416
|
if (universe.exitCode !== 0)
|
|
415
417
|
return universe;
|
|
416
418
|
installed = await aptInstallMany(["nginx", "libnginx-mod-http-headers-more-filter"]);
|
|
419
|
+
if (installed.exitCode !== 0 && version === "ubuntu-26.04") {
|
|
420
|
+
const core = await aptInstall("nginx");
|
|
421
|
+
if (core.exitCode !== 0)
|
|
422
|
+
return core;
|
|
423
|
+
const directory2 = mkdtempSync(join(tmpdir(), "forgezero-nginx-"));
|
|
424
|
+
try {
|
|
425
|
+
const module = join(directory2, "headers-more.deb");
|
|
426
|
+
await download(RESOLUTE_HEADERS_MORE_URL, module, RESOLUTE_HEADERS_MORE_SHA256, 1024 * 1024);
|
|
427
|
+
installed = await run(["/usr/bin/apt-get", "install", "-y", module], {
|
|
428
|
+
DEBIAN_FRONTEND: "noninteractive"
|
|
429
|
+
});
|
|
430
|
+
} finally {
|
|
431
|
+
rmSync(directory2, { recursive: true, force: true });
|
|
432
|
+
}
|
|
433
|
+
}
|
|
417
434
|
} else
|
|
418
435
|
installed = await aptInstall(packageName);
|
|
419
436
|
if (installed.exitCode !== 0 || software !== "nginx" && software !== "docker")
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** One package version shared by both public binaries. Pinned to package.json by tests. */
|
|
2
|
-
export declare const VERSION = "0.1.
|
|
2
|
+
export declare const VERSION = "0.1.135";
|