@styleflow.app/flowpress-deploy 1.0.0-beta.1 → 1.0.0-beta.10

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.
Files changed (99) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +6 -29
  3. package/containers/cms/Dockerfile +35 -0
  4. package/containers/cms/Dockerfile.dockerignore +20 -0
  5. package/containers/cms/healthz.php +17 -0
  6. package/containers/cms/install-languages.sh +16 -0
  7. package/containers/cms/mpm.conf +10 -0
  8. package/containers/cms/php.ini +16 -0
  9. package/containers/cms/sanitize.php +37 -0
  10. package/containers/cms/smtp.php +13 -0
  11. package/containers/cms/vhost.conf +61 -0
  12. package/containers/cms/wp-cli.yml +1 -0
  13. package/containers/php-runtime/Dockerfile +21 -0
  14. package/containers/web-ssr/Dockerfile +25 -0
  15. package/containers/web-ssr/Dockerfile.dockerignore +10 -0
  16. package/containers/web-static/Caddyfile +40 -0
  17. package/containers/web-static/Dockerfile +15 -0
  18. package/containers/web-static/Dockerfile.dockerignore +7 -0
  19. package/dist/frontend-assets.d.ts +2 -0
  20. package/dist/frontend-assets.d.ts.map +1 -0
  21. package/dist/frontend-assets.js +44 -0
  22. package/dist/frontend-assets.js.map +1 -0
  23. package/dist/frontend-links.d.ts +14 -0
  24. package/dist/frontend-links.d.ts.map +1 -0
  25. package/dist/frontend-links.js +82 -0
  26. package/dist/frontend-links.js.map +1 -0
  27. package/dist/ops/bootstrap.d.ts +21 -0
  28. package/dist/ops/bootstrap.d.ts.map +1 -0
  29. package/dist/ops/bootstrap.js +123 -0
  30. package/dist/ops/bootstrap.js.map +1 -0
  31. package/dist/ops/build.d.ts +30 -0
  32. package/dist/ops/build.d.ts.map +1 -0
  33. package/dist/ops/build.js +99 -0
  34. package/dist/ops/build.js.map +1 -0
  35. package/dist/ops/cli.d.ts +3 -0
  36. package/dist/ops/cli.d.ts.map +1 -0
  37. package/dist/ops/cli.js +140 -0
  38. package/dist/ops/cli.js.map +1 -0
  39. package/dist/ops/config.d.ts +54 -0
  40. package/dist/ops/config.d.ts.map +1 -0
  41. package/dist/ops/config.js +163 -0
  42. package/dist/ops/config.js.map +1 -0
  43. package/dist/ops/coolify.d.ts +2 -0
  44. package/dist/ops/coolify.d.ts.map +1 -0
  45. package/dist/ops/coolify.js +44 -0
  46. package/dist/ops/coolify.js.map +1 -0
  47. package/dist/ops/data.d.ts +27 -0
  48. package/dist/ops/data.d.ts.map +1 -0
  49. package/dist/ops/data.js +148 -0
  50. package/dist/ops/data.js.map +1 -0
  51. package/dist/ops/deploy.d.ts +18 -0
  52. package/dist/ops/deploy.d.ts.map +1 -0
  53. package/dist/ops/deploy.js +100 -0
  54. package/dist/ops/deploy.js.map +1 -0
  55. package/dist/ops/editorial.d.ts +23 -0
  56. package/dist/ops/editorial.d.ts.map +1 -0
  57. package/dist/ops/editorial.js +79 -0
  58. package/dist/ops/editorial.js.map +1 -0
  59. package/dist/ops/environment.d.ts +29 -0
  60. package/dist/ops/environment.d.ts.map +1 -0
  61. package/dist/ops/environment.js +159 -0
  62. package/dist/ops/environment.js.map +1 -0
  63. package/dist/ops/health.d.ts +25 -0
  64. package/dist/ops/health.d.ts.map +1 -0
  65. package/dist/ops/health.js +22 -0
  66. package/dist/ops/health.js.map +1 -0
  67. package/dist/ops/monitor.d.ts +23 -0
  68. package/dist/ops/monitor.d.ts.map +1 -0
  69. package/dist/ops/monitor.js +142 -0
  70. package/dist/ops/monitor.js.map +1 -0
  71. package/dist/ops/process.d.ts +9 -0
  72. package/dist/ops/process.d.ts.map +1 -0
  73. package/dist/ops/process.js +48 -0
  74. package/dist/ops/process.js.map +1 -0
  75. package/dist/ops/provision.d.ts +41 -0
  76. package/dist/ops/provision.d.ts.map +1 -0
  77. package/dist/ops/provision.js +257 -0
  78. package/dist/ops/provision.js.map +1 -0
  79. package/dist/ops/release.d.ts +26 -0
  80. package/dist/ops/release.d.ts.map +1 -0
  81. package/dist/ops/release.js +79 -0
  82. package/dist/ops/release.js.map +1 -0
  83. package/dist/ops/s3.d.ts +8 -0
  84. package/dist/ops/s3.d.ts.map +1 -0
  85. package/dist/ops/s3.js +38 -0
  86. package/dist/ops/s3.js.map +1 -0
  87. package/dist/ops/static-config.d.ts +14 -0
  88. package/dist/ops/static-config.d.ts.map +1 -0
  89. package/dist/ops/static-config.js +96 -0
  90. package/dist/ops/static-config.js.map +1 -0
  91. package/dist/worker-assets.d.ts +5 -0
  92. package/dist/worker-assets.d.ts.map +1 -0
  93. package/dist/worker-assets.js +35 -0
  94. package/dist/worker-assets.js.map +1 -0
  95. package/flowpress-deploy.php +3 -2
  96. package/includes/automatic-build.php +98 -0
  97. package/includes/queue-provider.php +2 -0
  98. package/package.json +50 -7
  99. package/schema/deployment.schema.json +45 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend-links.js","sourceRoot":"","sources":["../src/frontend-links.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export function provisionRegistry(root: any, manifest: any, { file, apply }?: {
2
+ apply?: boolean | undefined;
3
+ }): Promise<{
4
+ changes: string[];
5
+ applied: boolean;
6
+ credentials?: undefined;
7
+ } | {
8
+ changes: string[];
9
+ applied: boolean;
10
+ credentials: string;
11
+ }>;
12
+ export function provisionDns(root: any, manifest: any, name: any, { file, apply }?: {
13
+ apply?: boolean | undefined;
14
+ }): Promise<{
15
+ host: string;
16
+ exists: boolean;
17
+ applied: boolean;
18
+ target: any;
19
+ frontendChanged: boolean;
20
+ }>;
21
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/ops/bootstrap.js"],"names":[],"mappings":"AAIA;;;;;;;;;;GA+EC;AACD;;;;;;;;GAqBC"}
@@ -0,0 +1,123 @@
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { identity, operatorEnvironment, platformConfig, publicPlatform, writeJson, readJson } from "./config.js";
4
+ export async function provisionRegistry(root, manifest, { file, apply = false } = {}) {
5
+ const platform = platformConfig(root, manifest, file), operator = operatorEnvironment(root);
6
+ const username = operator.HARBOR_ADMIN_USER, password = operator.HARBOR_ADMIN_PASSWORD;
7
+ if (!username || !password || !operator.HARBOR_API_URL)
8
+ throw new Error("Set private HARBOR_API_URL/HARBOR_ADMIN_USER/HARBOR_ADMIN_PASSWORD.");
9
+ const api = async (method, path, body) => {
10
+ const response = await fetch(operator.HARBOR_API_URL.replace(/\/$/, "") + "/api/v2.0" + path, {
11
+ method, redirect: "error", signal: AbortSignal.timeout(30000),
12
+ headers: { authorization: "Basic " + Buffer.from(username + ":" + password).toString("base64"), "content-type": "application/json" },
13
+ ...(body ? { body: JSON.stringify(body) } : {}),
14
+ });
15
+ if (!response.ok)
16
+ throw new Error("Harbor " + method + " " + path + " refused (HTTP " + response.status + ").");
17
+ const text = await response.text();
18
+ return text ? JSON.parse(text) : {};
19
+ };
20
+ const projects = [platform.registryProject, "flowpress"];
21
+ const changes = [];
22
+ const existing = await api("GET", "/projects?page_size=100");
23
+ for (const name of projects) {
24
+ if (!/^[a-z0-9][a-z0-9_.-]+$/.test(name))
25
+ throw new Error("Invalid Harbor project.");
26
+ if (!existing.some(project => project.name === name)) {
27
+ changes.push("Create private Harbor project " + name);
28
+ if (apply)
29
+ await api("POST", "/projects", { project_name: name, public: false, storage_limit: (name === "flowpress" ? 2 : 5) * 1024 ** 3 });
30
+ }
31
+ }
32
+ if (!apply)
33
+ return { changes, applied: false };
34
+ const current = await api("GET", "/projects?page_size=100");
35
+ const robots = await api("GET", "/robots?page_size=100");
36
+ const privateFile = join(root, ".secrets/registry-created.json");
37
+ const created = readJson(privateFile, {});
38
+ for (const name of projects) {
39
+ const project = current.find(item => item.name === name);
40
+ const robotName = name + "-ci";
41
+ const expected = "robot$" + robotName;
42
+ if (!robots.some(robot => robot.name === expected)) {
43
+ const robot = await api("POST", "/robots", {
44
+ name: robotName, description: "FlowPress build/push for " + name, duration: 365, level: "system",
45
+ permissions: [{ kind: "project", namespace: name, access: [{ resource: "repository", action: "pull" }, { resource: "repository", action: "push" }] },
46
+ ...(name === "flowpress" ? [] : [{ kind: "project", namespace: "flowpress", access: [{ resource: "repository", action: "pull" }] }])],
47
+ });
48
+ created[name] = { name: robot.name, secret: robot.secret };
49
+ writeJson(privateFile, created, 0o600);
50
+ }
51
+ const existingRobot = robots.find(robot => robot.name === expected);
52
+ if (name !== "flowpress" && existingRobot) {
53
+ const detail = await api("GET", "/robots/" + existingRobot.id);
54
+ if (!detail.permissions.some(permission => permission.namespace === "flowpress")) {
55
+ detail.permissions.push({ kind: "project", namespace: "flowpress", access: [{ resource: "repository", action: "pull" }] });
56
+ await api("PUT", "/robots/" + existingRobot.id, { name: detail.name, level: detail.level, description: detail.description, duration: detail.duration, disable: detail.disable, permissions: detail.permissions });
57
+ }
58
+ }
59
+ const metadata = await api("GET", "/projects/" + project.project_id);
60
+ if (metadata.metadata?.retention_id) {
61
+ const retention = await api("GET", "/retentions/" + metadata.metadata.retention_id);
62
+ const selector = retention.rules?.flatMap(rule => rule.tag_selectors || []).find(item => item.pattern === "{staging,production,preview,latest}");
63
+ if (selector) {
64
+ selector.pattern = "{staging,production,preview,latest,staging-previous,production-previous,preview-previous}";
65
+ await api("PUT", "/retentions/" + metadata.metadata.retention_id, retention);
66
+ }
67
+ }
68
+ if (!metadata.metadata?.retention_id)
69
+ await api("POST", "/retentions", {
70
+ algorithm: "or", scope: { level: "project", ref: project.project_id },
71
+ trigger: { kind: "Schedule", settings: { cron: "0 0 1 * * *" } },
72
+ rules: [
73
+ { id: 0, priority: 0, disabled: false, action: "retain", template: "always", tag_selectors: [{ kind: "doublestar", decoration: "matches", pattern: "{staging,production,preview,latest,staging-previous,production-previous,preview-previous}" }], scope_selectors: { repository: [{ kind: "doublestar", decoration: "repoMatches", pattern: "**" }] } },
74
+ { id: 0, priority: 0, disabled: false, action: "retain", template: "latestPushedK", params: { latestPushedK: 3 }, tag_selectors: [{ kind: "doublestar", decoration: "matches", pattern: "**" }], scope_selectors: { repository: [{ kind: "doublestar", decoration: "repoMatches", pattern: "**" }] } },
75
+ ],
76
+ });
77
+ }
78
+ // Add pull scope without replacing permissions belonging to existing installations.
79
+ const nodes = robots.find(robot => robot.name === "robot$nodes-pull");
80
+ if (!nodes)
81
+ throw new Error("The existing nodes-pull robot was not found.");
82
+ const detail = await api("GET", "/robots/" + nodes.id);
83
+ let changed = false;
84
+ for (const name of projects)
85
+ if (!detail.permissions.some(permission => permission.namespace === name)) {
86
+ detail.permissions.push({ kind: "project", namespace: name, access: [{ resource: "repository", action: "pull" }] });
87
+ changed = true;
88
+ }
89
+ if (changed)
90
+ await api("PUT", "/robots/" + nodes.id, { name: detail.name, level: detail.level, description: detail.description, duration: detail.duration, disable: detail.disable, permissions: detail.permissions });
91
+ if (Object.keys(created).length)
92
+ writeJson(privateFile, created, 0o600);
93
+ return { changes, applied: true, credentials: Object.keys(created).length ? ".secrets/registry-created.json" : "existing" };
94
+ }
95
+ export async function provisionDns(root, manifest, name, { file, apply = false } = {}) {
96
+ const target = manifest.environments[name];
97
+ if (!target?.publish.includes("cms"))
98
+ throw new Error("CMS publication is disabled.");
99
+ const platform = platformConfig(root, manifest, file), operator = operatorEnvironment(root);
100
+ const { coolifyClient } = await import("./coolify.js");
101
+ const server = await coolifyClient(platform.coolifyUrl, operator.COOLIFY_TOKEN)("GET", "/servers/" + platform.serverUuid);
102
+ const host = new URL(target.backendUrl).hostname;
103
+ const api = async (method, path, body) => {
104
+ const res = await fetch("https://api.cloudflare.com/client/v4" + path, { method, redirect: "error", signal: AbortSignal.timeout(30000), headers: { authorization: "Bearer " + operator.CLOUDFLARE_API_TOKEN, "content-type": "application/json" }, ...(body ? { body: JSON.stringify(body) } : {}) });
105
+ const data = await res.json();
106
+ if (!res.ok || !data.success)
107
+ throw new Error("DNS API refused " + method + " (HTTP " + res.status + ").");
108
+ return data.result;
109
+ };
110
+ let zone;
111
+ const labels = host.split(".");
112
+ for (let offset = 0; offset < labels.length - 1 && !zone; offset++)
113
+ zone = (await api("GET", "/zones?name=" + labels.slice(offset).join(".")))[0];
114
+ if (!zone)
115
+ throw new Error("No accessible DNS zone for the staging backend.");
116
+ const existing = await api("GET", "/zones/" + zone.id + "/dns_records?name=" + host);
117
+ if (existing.length && !existing.some(item => item.type === "A" && item.content === server.ip))
118
+ throw new Error("An existing DNS record has a different target; no record was changed.");
119
+ if (!existing.length && apply)
120
+ await api("POST", "/zones/" + zone.id + "/dns_records", { type: "A", name: host, content: server.ip, proxied: true, ttl: 1, comment: "FlowPress staging backend" });
121
+ return { host, exists: Boolean(existing.length), applied: apply, target: server.ip, frontendChanged: false };
122
+ }
123
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/ops/bootstrap.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export function registryLogin(platform: any, operator: any): void;
2
+ export function inspectDigest(image: any): any;
3
+ export function buildBase(root: any, platform: any, { push }?: {
4
+ push?: boolean | undefined;
5
+ }): {
6
+ image: string;
7
+ };
8
+ export function frontendBuild(root: any, manifest: any, name: any, { sha, buildId }: {
9
+ sha: any;
10
+ buildId: any;
11
+ }): {
12
+ env: any;
13
+ dist: any;
14
+ };
15
+ export function build(root: any, manifest: any, name: any, component: any, { sha, buildId, push, file, skipFrontend }?: {
16
+ push?: boolean | undefined;
17
+ skipFrontend?: boolean | undefined;
18
+ }): {
19
+ component: any;
20
+ environment: any;
21
+ repository: string;
22
+ tag: string;
23
+ digest: any;
24
+ sha: any;
25
+ buildId: any;
26
+ pushed: boolean;
27
+ };
28
+ export const packageRoot: string;
29
+ export const containers: string;
30
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/ops/build.js"],"names":[],"mappings":"AAUA,kEAGC;AACD,+CAKC;AACD;;;;EAMC;AACD;;;;;;EAqBC;AACD;;;;;;;;;;;;EAqCC;AA9ED,iCAA6E;AAC7E,gCAA0D"}
@@ -0,0 +1,99 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { allowedComponents, identity, imageRepository, loadState, operatorEnvironment, platformConfig, readJson, releaseTag, targetConfig, writeJson } from "./config.js";
5
+ import { manifestEnvironment, resolveFrontendEnvironment, shellEnvironment } from "./environment.js";
6
+ import { buildRoutesCaddy } from "./static-config.js";
7
+ import { capture, run } from "./process.js";
8
+ export const packageRoot = fileURLToPath(new URL("../../", import.meta.url));
9
+ export const containers = join(packageRoot, "containers");
10
+ export function registryLogin(platform, operator) {
11
+ if (!operator.REGISTRY_USERNAME || !operator.REGISTRY_PASSWORD)
12
+ throw new Error("Missing registry push/pull credentials.");
13
+ capture("docker", ["login", platform.registry, "--username", operator.REGISTRY_USERNAME, "--password-stdin"], { input: operator.REGISTRY_PASSWORD + "\n" });
14
+ }
15
+ export function inspectDigest(image) {
16
+ const result = capture("docker", ["buildx", "imagetools", "inspect", image, "--format", "{{json .Manifest}}"]);
17
+ const digest = JSON.parse(result).digest;
18
+ if (!/^sha256:[a-f0-9]{64}$/.test(digest || ""))
19
+ throw new Error("Registry returned no valid manifest digest.");
20
+ return digest;
21
+ }
22
+ export function buildBase(root, platform, { push = false } = {}) {
23
+ const version = readJson(join(packageRoot, "package.json")).version;
24
+ const image = platform.registry + "/flowpress/php-runtime:" + version;
25
+ if (push)
26
+ registryLogin(platform, operatorEnvironment(root));
27
+ run("docker", ["buildx", "build", "--platform", "linux/amd64", "--file", join(containers, "php-runtime", "Dockerfile"), "--tag", image, push ? "--push" : "--load", containers]);
28
+ return { image: push ? image.slice(0, image.lastIndexOf(":")) + "@" + inspectDigest(image) : image };
29
+ }
30
+ export function frontendBuild(root, manifest, name, { sha, buildId }) {
31
+ const values = manifestEnvironment(root, name, { ...process.env, RELEASE_SHA: sha, FRONTEND_BUILD_ID: buildId });
32
+ const env = resolveFrontendEnvironment(values, target => manifestEnvironment(root, target, {}));
33
+ const web = readJson(join(root, "apps/web/package.json"));
34
+ const childEnv = { ...process.env, ...shellEnvironment(env), RELEASE_SHA: sha, FRONTEND_BUILD_ID: buildId };
35
+ const dist = resolve(root, env.SF_DIST_DIR);
36
+ if (!dist.startsWith(root + "/"))
37
+ throw new Error("Build output must stay inside the project.");
38
+ run("pnpm", ["styleflow:build"], { cwd: root, env: childEnv });
39
+ run("pnpm", ["--filter", web.name, "build"], { cwd: root, env: childEnv });
40
+ if (env.ASTRO_OUTPUT_MODE === "static") {
41
+ if (!existsSync(join(dist, "index.html")))
42
+ throw new Error("Static build has no index.html.");
43
+ const read = name => existsSync(join(dist, name)) ? readFileSync(join(dist, name), "utf8") : "";
44
+ mkdirSync(join(dist, ".container"), { recursive: true });
45
+ writeFileSync(join(dist, ".container", "routes.caddy"), buildRoutesCaddy({
46
+ redirects: read("_redirects"), headers: read("_headers"),
47
+ media: manifest.media === "local" ? env.BACKEND_URL + "/app/uploads" : env.FLOWPRESS_MEDIA,
48
+ backend: env.BACKEND_URL,
49
+ }));
50
+ writeJson(join(dist, "healthz.json"), { status: "ok", release: sha, buildId, environment: name, output: "static", backendTarget: env.FRONTEND_BACKEND_TARGET });
51
+ }
52
+ return { env, dist: env.SF_DIST_DIR };
53
+ }
54
+ export function build(root, manifest, name, component, { sha, buildId, push = false, file, skipFrontend = false } = {}) {
55
+ const target = targetConfig(manifest, name);
56
+ const supported = component === "cms" ? ["backend", "headless-static", "headless-ssr"] : null;
57
+ if (supported && !supported.includes(target.profile || manifest.profile))
58
+ throw new Error("Profile does not contain a CMS.");
59
+ if (!["cms", "web-static", "web-ssr"].includes(component))
60
+ throw new Error("Unknown component.");
61
+ if (push)
62
+ allowedComponents(manifest, name, [component]);
63
+ const platform = platformConfig(root, manifest, file);
64
+ const project = identity(root);
65
+ const revision = sha || capture("git", ["rev-parse", "HEAD"], { cwd: root });
66
+ const id = buildId || String(Date.now());
67
+ const tag = releaseTag(component, name, revision, id);
68
+ const repository = imageRepository(platform, project.slug, component);
69
+ const operator = operatorEnvironment(root);
70
+ if (push)
71
+ registryLogin(platform, operator);
72
+ mkdirSync(join(root, ".local/flowpress"), { recursive: true, mode: 0o700 });
73
+ const metadata = join(root, ".local/flowpress", "build-" + name + "-" + component + ".json");
74
+ const args = ["buildx", "build", "--platform", "linux/amd64", "--file", join(containers, component, "Dockerfile"),
75
+ "--build-context", "flowpress=" + containers, "--tag", repository + ":" + tag,
76
+ "--build-arg", "RELEASE_SHA=" + revision, "--metadata-file", metadata, push ? "--push" : "--load"];
77
+ if (component === "cms") {
78
+ if (!platform.phpImage)
79
+ throw new Error("Build and pin the shared PHP runtime first.");
80
+ args.push("--build-arg", "FLOWPRESS_PHP_IMAGE=" + platform.phpImage);
81
+ const authFile = join(root, "apps/cms/auth.json");
82
+ const composerAuth = operator.COMPOSER_AUTH || (existsSync(authFile) ? readFileSync(authFile, "utf8") : "");
83
+ if (!composerAuth)
84
+ throw new Error("COMPOSER_AUTH or private apps/cms/auth.json is required.");
85
+ args.push("--secret", "id=composer_auth,env=COMPOSER_AUTH");
86
+ run("docker", [...args, "."], { cwd: root, env: { ...process.env, COMPOSER_AUTH: composerAuth } });
87
+ }
88
+ else {
89
+ const frontend = skipFrontend ? { dist: manifestEnvironment(root, name).SF_DIST_DIR } : frontendBuild(root, manifest, name, { sha: revision, buildId: id });
90
+ const web = readJson(join(root, "apps/web/package.json"));
91
+ args.push("--build-arg", "DIST_DIR=" + frontend.dist, "--build-arg", "WEB_PACKAGE=" + web.name);
92
+ run("docker", [...args, "."], { cwd: root });
93
+ }
94
+ const digest = push ? inspectDigest(repository + ":" + tag) : undefined;
95
+ const result = { component, environment: name, repository, tag, digest, sha: revision, buildId: component === "cms" ? undefined : id, pushed: push };
96
+ writeJson(join(root, ".local/flowpress", "release-" + name + "-" + component + ".json"), result, 0o600);
97
+ return result;
98
+ }
99
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/ops/build.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/ops/cli.js"],"names":[],"mappings":""}
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env node
2
+ import { allowedComponents, identity, loadState, operatorEnvironment, platformConfig, projectRoot, readManifest, saveState } from "./config.js";
3
+ import { argValue, containerFor, shellQuote, ssh } from "./process.js";
4
+ import { build, buildBase, frontendBuild } from "./build.js";
5
+ import { deploy } from "./deploy.js";
6
+ import { provision, provisionPlatform } from "./provision.js";
7
+ import { pullSource, prepareData, pushData, pushUploads } from "./data.js";
8
+ import { backupRun, backupVerify, status } from "./monitor.js";
9
+ import { coolifyClient } from "./coolify.js";
10
+ import { release, editorialCommit } from "./release.js";
11
+ import { readFileSync, appendFileSync } from "node:fs";
12
+ import { provisionRegistry, provisionDns } from "./bootstrap.js";
13
+ const args = process.argv.slice(2);
14
+ const [command, name, component] = args;
15
+ function help() {
16
+ return "FlowPress Ops\n\n"
17
+ + " flowpress-ops plan|provision <environment> [component] [--apply]\n"
18
+ + " flowpress-ops platform plan|provision|build-base [--apply] [--push]\n"
19
+ + " flowpress-ops registry [--apply] | dns <environment> [--apply]\n"
20
+ + " flowpress-ops build <environment> <cms|web-static|web-ssr> [--push] [--sha SHA]\n"
21
+ + " flowpress-ops frontend <environment> [--sha SHA] [--build-id ID]\n"
22
+ + " flowpress-ops deploy|rollback <environment> <component>\n"
23
+ + " flowpress-ops release <environment> [component] [--editorial]\n"
24
+ + " flowpress-ops db pull <source> | prepare <environment> --from FILE | push <environment> --from FILE\n"
25
+ + " flowpress-ops uploads <environment> --from ARCHIVE\n"
26
+ + " flowpress-ops backup run|verify <environment>\n"
27
+ + " flowpress-ops preview start|stop [--backend staging|production]\n"
28
+ + " flowpress-ops status [environment] [--check] [--json]\n"
29
+ + " flowpress-ops logs <environment> [component]\n\n"
30
+ + "Provisioning is read-only without --apply. Publish lists are enforced by every remote write.\n";
31
+ }
32
+ async function main() {
33
+ if (!command || ["--help", "-h"].includes(command)) {
34
+ console.log(help());
35
+ return;
36
+ }
37
+ const root = projectRoot(), manifest = readManifest(root);
38
+ const file = argValue(args, "--platform-file");
39
+ let result;
40
+ if (command === "validate") {
41
+ result = { project: identity(root).slug, profile: manifest.profile, environments: Object.fromEntries(Object.entries(manifest.environments).map(([key, value]) => [key, value.publish])) };
42
+ }
43
+ else if (command === "plan" || command === "provision") {
44
+ result = await provision(root, manifest, name, { file, apply: command === "provision" && args.includes("--apply"), components: component && !component.startsWith("--") ? [component] : [] });
45
+ }
46
+ else if (command === "platform") {
47
+ if (name === "build-base")
48
+ result = buildBase(root, platformConfig(root, manifest, file), { push: args.includes("--push") });
49
+ else if (["plan", "provision"].includes(name))
50
+ result = await provisionPlatform(root, manifest, { file, apply: name === "provision" && args.includes("--apply") });
51
+ else
52
+ throw new Error("Use platform plan|provision|build-base.");
53
+ }
54
+ else if (command === "registry") {
55
+ result = await provisionRegistry(root, manifest, { file, apply: args.includes("--apply") });
56
+ }
57
+ else if (command === "dns") {
58
+ result = await provisionDns(root, manifest, name, { file, apply: args.includes("--apply") });
59
+ }
60
+ else if (command === "build") {
61
+ result = build(root, manifest, name, component, { file, push: args.includes("--push"), sha: argValue(args, "--sha"), buildId: argValue(args, "--build-id"), skipFrontend: args.includes("--skip-frontend") });
62
+ }
63
+ else if (command === "frontend") {
64
+ result = frontendBuild(root, manifest, name, { sha: argValue(args, "--sha") || (await import("./process.js")).capture("git", ["rev-parse", "HEAD"], { cwd: root }), buildId: argValue(args, "--build-id") || String(Date.now()) });
65
+ result = { environment: name, output: result.dist };
66
+ }
67
+ else if (command === "deploy" || command === "rollback") {
68
+ result = await deploy(root, manifest, name, component, { rollback: command === "rollback" });
69
+ }
70
+ else if (command === "release") {
71
+ result = await release(root, manifest, name, { component: component && !component.startsWith("--") ? component : undefined, sha: argValue(args, "--sha"), buildId: argValue(args, "--build-id"), editorial: args.includes("--editorial") });
72
+ }
73
+ else if (command === "editorial") {
74
+ const event = JSON.parse(readFileSync(process.env.GITHUB_EVENT_PATH, "utf8"));
75
+ result = await editorialCommit(root, manifest, event.client_payload);
76
+ if (process.env.GITHUB_OUTPUT)
77
+ appendFileSync(process.env.GITHUB_OUTPUT, "sha=" + result.sha + "\ntarget=" + result.request.target + "\n");
78
+ }
79
+ else if (command === "db") {
80
+ const target = component;
81
+ if (name === "pull")
82
+ result = await pullSource(root, manifest, target);
83
+ else if (name === "prepare")
84
+ result = await prepareData(root, manifest, target, { file: argValue(args, "--from"), source: argValue(args, "--source") || "production", image: argValue(args, "--image") });
85
+ else if (name === "push")
86
+ result = await pushData(root, manifest, target, argValue(args, "--from"));
87
+ else
88
+ throw new Error("Use db pull|prepare|push.");
89
+ }
90
+ else if (command === "uploads")
91
+ result = await pushUploads(root, manifest, name, argValue(args, "--from"));
92
+ else if (command === "backup")
93
+ result = await (name === "run" ? backupRun : name === "verify" ? backupVerify : () => { throw new Error("Use backup run|verify."); })(root, manifest, component);
94
+ else if (command === "status") {
95
+ result = await status(root, manifest, name && !name.startsWith("--") ? name : undefined);
96
+ if (args.includes("--check") && !result.ok)
97
+ process.exitCode = 1;
98
+ }
99
+ else if (command === "logs") {
100
+ const state = loadState(root, name), app = state.apps?.[component || "cms"];
101
+ if (!app?.uuid)
102
+ throw new Error("Component not provisioned.");
103
+ console.log(ssh(state.platform, "docker logs --tail 100 " + shellQuote(containerFor(state.platform, app.uuid))));
104
+ return;
105
+ }
106
+ else if (command === "preview") {
107
+ allowedComponents(manifest, "preview", ["web-ssr"]);
108
+ const target = manifest.environments.preview;
109
+ if (argValue(args, "--backend") && argValue(args, "--backend") !== target.backend)
110
+ throw new Error("Update the manifest backend before starting preview.");
111
+ if (!["start", "stop"].includes(name))
112
+ throw new Error("Use preview start|stop.");
113
+ const state = loadState(root, "preview"), app = state.apps?.["web-ssr"];
114
+ if (!app?.uuid)
115
+ throw new Error("Provision preview first.");
116
+ if (name === "start") {
117
+ if (!app.current)
118
+ throw new Error("Build and deploy preview once before starting it.");
119
+ result = await deploy(root, manifest, "preview", "web-ssr", { release: app.current });
120
+ }
121
+ else {
122
+ const api = coolifyClient(state.platform.coolifyUrl, operatorEnvironment(root).COOLIFY_TOKEN);
123
+ await api("POST", "/applications/" + app.uuid + "/stop");
124
+ result = { preview: "stopped", dataPreserved: true };
125
+ }
126
+ }
127
+ else
128
+ throw new Error("Unknown command. Use --help.");
129
+ if (args.includes("--json"))
130
+ console.log(JSON.stringify(result, null, 2));
131
+ else {
132
+ console.log("FlowPress: " + command + (name ? " " + name : ""));
133
+ console.log(JSON.stringify(result, null, 2));
134
+ }
135
+ }
136
+ main().catch(error => {
137
+ console.error("FlowPress: " + error.message);
138
+ process.exitCode = 1;
139
+ });
140
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/ops/cli.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ export function projectRoot(start?: string): string;
2
+ export function readJson(file: any, fallback?: undefined): any;
3
+ export function writeJson(file: any, value: any, mode?: number): void;
4
+ export function readEnv(file: any): import("dotenv").DotenvParseOutput;
5
+ export function origin(value: any, label: any): string;
6
+ export function assertManifest(value: any): any;
7
+ export function readManifest(root?: string): any;
8
+ export function targetConfig(manifest: any, name: any): any;
9
+ export function allowedComponents(manifest: any, name: any, requested?: any[]): any;
10
+ export function identity(root?: string): {
11
+ slug: string;
12
+ displayName: any;
13
+ repository: any;
14
+ };
15
+ export function statePath(root: any, name: any): string;
16
+ export function loadState(root: any, name: any): any;
17
+ export function saveState(root: any, name: any, state: any): void;
18
+ export function platformConfig(root: any, manifest: any, file: any): any;
19
+ export function publicPlatform(id: any, platform: any): {
20
+ id: any;
21
+ coolifyUrl: any;
22
+ serverUuid: any;
23
+ ssh: any;
24
+ network: any;
25
+ subnet: any;
26
+ registry: any;
27
+ registryProject: any;
28
+ backupStorageUuid: any;
29
+ poolUuid: any;
30
+ destinationUuid: any;
31
+ phpImage: any;
32
+ };
33
+ export function databaseIdentity(slug: any, name: any): {
34
+ DB_NAME: string;
35
+ DB_USER: string;
36
+ };
37
+ export function ensureSecrets(root: any, name: any, slug: any): {
38
+ DB_NAME: string;
39
+ DB_USER: string;
40
+ };
41
+ export function operatorEnvironment(root: any): {
42
+ [x: string]: string | undefined;
43
+ };
44
+ export function imageRepository(platform: any, slug: any, component: any): string;
45
+ export function releaseTag(component: any, name: any, sha: any, buildId: any): string;
46
+ export const profiles: Readonly<{
47
+ backend: string[];
48
+ static: string[];
49
+ "headless-static": string[];
50
+ "headless-ssr": string[];
51
+ }>;
52
+ export const environments: string[];
53
+ export const saltKeys: string[];
54
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/ops/config.js"],"names":[],"mappings":"AAaA,oDAQC;AACD,+DAGC;AACD,sEAKC;AACD,uEAEC;AACD,uDAOC;AACD,gDAmBC;AACD,iDAEC;AACD,4DAGC;AACD,oFAMC;AACD;;;;EAMC;AACD,wDAA+F;AAC/F,qDAAqF;AACrF,kEAAyF;AACzF,yEAYC;AACD;;;;;;;;;;;;;EAGC;AACD;;;EAGC;AAED;;;EASC;AACD;;EAEC;AACD,kFAGC;AACD,sFAKC;AA7HD;;;;;GAKG;AACH,oCAA0E;AAgG1E,gCAAuJ"}