@styleflow.app/flowpress-deploy 1.0.0-beta.3 → 1.0.0-beta.4

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 (85) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +5 -0
  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 +58 -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/ops/bootstrap.d.ts +21 -0
  20. package/dist/ops/bootstrap.d.ts.map +1 -0
  21. package/dist/ops/bootstrap.js +106 -0
  22. package/dist/ops/bootstrap.js.map +1 -0
  23. package/dist/ops/build.d.ts +30 -0
  24. package/dist/ops/build.d.ts.map +1 -0
  25. package/dist/ops/build.js +99 -0
  26. package/dist/ops/build.js.map +1 -0
  27. package/dist/ops/cli.d.ts +3 -0
  28. package/dist/ops/cli.d.ts.map +1 -0
  29. package/dist/ops/cli.js +137 -0
  30. package/dist/ops/cli.js.map +1 -0
  31. package/dist/ops/config.d.ts +54 -0
  32. package/dist/ops/config.d.ts.map +1 -0
  33. package/dist/ops/config.js +163 -0
  34. package/dist/ops/config.js.map +1 -0
  35. package/dist/ops/coolify.d.ts +2 -0
  36. package/dist/ops/coolify.d.ts.map +1 -0
  37. package/dist/ops/coolify.js +44 -0
  38. package/dist/ops/coolify.js.map +1 -0
  39. package/dist/ops/data.d.ts +27 -0
  40. package/dist/ops/data.d.ts.map +1 -0
  41. package/dist/ops/data.js +145 -0
  42. package/dist/ops/data.js.map +1 -0
  43. package/dist/ops/deploy.d.ts +18 -0
  44. package/dist/ops/deploy.d.ts.map +1 -0
  45. package/dist/ops/deploy.js +92 -0
  46. package/dist/ops/deploy.js.map +1 -0
  47. package/dist/ops/editorial.d.ts +23 -0
  48. package/dist/ops/editorial.d.ts.map +1 -0
  49. package/dist/ops/editorial.js +79 -0
  50. package/dist/ops/editorial.js.map +1 -0
  51. package/dist/ops/environment.d.ts +29 -0
  52. package/dist/ops/environment.d.ts.map +1 -0
  53. package/dist/ops/environment.js +159 -0
  54. package/dist/ops/environment.js.map +1 -0
  55. package/dist/ops/health.d.ts +25 -0
  56. package/dist/ops/health.d.ts.map +1 -0
  57. package/dist/ops/health.js +22 -0
  58. package/dist/ops/health.js.map +1 -0
  59. package/dist/ops/monitor.d.ts +23 -0
  60. package/dist/ops/monitor.d.ts.map +1 -0
  61. package/dist/ops/monitor.js +142 -0
  62. package/dist/ops/monitor.js.map +1 -0
  63. package/dist/ops/process.d.ts +9 -0
  64. package/dist/ops/process.d.ts.map +1 -0
  65. package/dist/ops/process.js +48 -0
  66. package/dist/ops/process.js.map +1 -0
  67. package/dist/ops/provision.d.ts +38 -0
  68. package/dist/ops/provision.d.ts.map +1 -0
  69. package/dist/ops/provision.js +251 -0
  70. package/dist/ops/provision.js.map +1 -0
  71. package/dist/ops/release.d.ts +26 -0
  72. package/dist/ops/release.d.ts.map +1 -0
  73. package/dist/ops/release.js +79 -0
  74. package/dist/ops/release.js.map +1 -0
  75. package/dist/ops/s3.d.ts +8 -0
  76. package/dist/ops/s3.d.ts.map +1 -0
  77. package/dist/ops/s3.js +38 -0
  78. package/dist/ops/s3.js.map +1 -0
  79. package/dist/ops/static-config.d.ts +14 -0
  80. package/dist/ops/static-config.d.ts.map +1 -0
  81. package/dist/ops/static-config.js +96 -0
  82. package/dist/ops/static-config.js.map +1 -0
  83. package/flowpress-deploy.php +2 -2
  84. package/package.json +26 -6
  85. package/schema/deployment.schema.json +45 -0
@@ -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,137 @@
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 === "plan" || command === "provision") {
41
+ result = await provision(root, manifest, name, { file, apply: command === "provision" && args.includes("--apply"), components: component && !component.startsWith("--") ? [component] : [] });
42
+ }
43
+ else if (command === "platform") {
44
+ if (name === "build-base")
45
+ result = buildBase(root, platformConfig(root, manifest, file), { push: args.includes("--push") });
46
+ else if (["plan", "provision"].includes(name))
47
+ result = await provisionPlatform(root, manifest, { file, apply: name === "provision" && args.includes("--apply") });
48
+ else
49
+ throw new Error("Use platform plan|provision|build-base.");
50
+ }
51
+ else if (command === "registry") {
52
+ result = await provisionRegistry(root, manifest, { file, apply: args.includes("--apply") });
53
+ }
54
+ else if (command === "dns") {
55
+ result = await provisionDns(root, manifest, name, { file, apply: args.includes("--apply") });
56
+ }
57
+ else if (command === "build") {
58
+ 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") });
59
+ }
60
+ else if (command === "frontend") {
61
+ 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()) });
62
+ result = { environment: name, output: result.dist };
63
+ }
64
+ else if (command === "deploy" || command === "rollback") {
65
+ result = await deploy(root, manifest, name, component, { rollback: command === "rollback" });
66
+ }
67
+ else if (command === "release") {
68
+ 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") });
69
+ }
70
+ else if (command === "editorial") {
71
+ const event = JSON.parse(readFileSync(process.env.GITHUB_EVENT_PATH, "utf8"));
72
+ result = await editorialCommit(root, manifest, event.client_payload);
73
+ if (process.env.GITHUB_OUTPUT)
74
+ appendFileSync(process.env.GITHUB_OUTPUT, "sha=" + result.sha + "\ntarget=" + result.request.target + "\n");
75
+ }
76
+ else if (command === "db") {
77
+ const target = component;
78
+ if (name === "pull")
79
+ result = await pullSource(root, manifest, target);
80
+ else if (name === "prepare")
81
+ result = await prepareData(root, manifest, target, { file: argValue(args, "--from"), source: argValue(args, "--source") || "production", image: argValue(args, "--image") });
82
+ else if (name === "push")
83
+ result = await pushData(root, manifest, target, argValue(args, "--from"));
84
+ else
85
+ throw new Error("Use db pull|prepare|push.");
86
+ }
87
+ else if (command === "uploads")
88
+ result = await pushUploads(root, manifest, name, argValue(args, "--from"));
89
+ else if (command === "backup")
90
+ result = await (name === "run" ? backupRun : name === "verify" ? backupVerify : () => { throw new Error("Use backup run|verify."); })(root, manifest, component);
91
+ else if (command === "status") {
92
+ result = await status(root, manifest, name && !name.startsWith("--") ? name : undefined);
93
+ if (args.includes("--check") && !result.ok)
94
+ process.exitCode = 1;
95
+ }
96
+ else if (command === "logs") {
97
+ const state = loadState(root, name), app = state.apps?.[component || "cms"];
98
+ if (!app?.uuid)
99
+ throw new Error("Component not provisioned.");
100
+ console.log(ssh(state.platform, "docker logs --tail 100 " + shellQuote(containerFor(state.platform, app.uuid))));
101
+ return;
102
+ }
103
+ else if (command === "preview") {
104
+ allowedComponents(manifest, "preview", ["web-ssr"]);
105
+ const target = manifest.environments.preview;
106
+ if (argValue(args, "--backend") && argValue(args, "--backend") !== target.backend)
107
+ throw new Error("Update the manifest backend before starting preview.");
108
+ if (!["start", "stop"].includes(name))
109
+ throw new Error("Use preview start|stop.");
110
+ const state = loadState(root, "preview"), app = state.apps?.["web-ssr"];
111
+ if (!app?.uuid)
112
+ throw new Error("Provision preview first.");
113
+ if (name === "start") {
114
+ if (!app.current)
115
+ throw new Error("Build and deploy preview once before starting it.");
116
+ result = await deploy(root, manifest, "preview", "web-ssr", { release: app.current });
117
+ }
118
+ else {
119
+ const api = coolifyClient(state.platform.coolifyUrl, operatorEnvironment(root).COOLIFY_TOKEN);
120
+ await api("POST", "/applications/" + app.uuid + "/stop");
121
+ result = { preview: "stopped", dataPreserved: true };
122
+ }
123
+ }
124
+ else
125
+ throw new Error("Unknown command. Use --help.");
126
+ if (args.includes("--json"))
127
+ console.log(JSON.stringify(result, null, 2));
128
+ else {
129
+ console.log("FlowPress: " + command + (name ? " " + name : ""));
130
+ console.log(JSON.stringify(result, null, 2));
131
+ }
132
+ }
133
+ main().catch(error => {
134
+ console.error("FlowPress: " + error.message);
135
+ process.exitCode = 1;
136
+ });
137
+ //# 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"}
@@ -0,0 +1,163 @@
1
+ import { createHash, randomBytes } from "node:crypto";
2
+ import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync } from "node:fs";
3
+ import { dirname, join, resolve } from "node:path";
4
+ import { parse as parseYaml } from "yaml";
5
+ import { parse as parseEnv } from "dotenv";
6
+ export const profiles = Object.freeze({
7
+ backend: ["cms"],
8
+ static: ["web-static"],
9
+ "headless-static": ["cms", "web-static"],
10
+ "headless-ssr": ["cms", "web-ssr"],
11
+ });
12
+ export const environments = ["local", "staging", "production", "preview"];
13
+ export function projectRoot(start = process.env.FLOWPRESS_PROJECT_ROOT || process.cwd()) {
14
+ let root = resolve(start);
15
+ while (!existsSync(join(root, "flowpress.deploy.yaml")) && !existsSync(join(root, "pnpm-workspace.yaml"))) {
16
+ const parent = dirname(root);
17
+ if (parent === root)
18
+ throw new Error("Run this command inside a FlowPress project.");
19
+ root = parent;
20
+ }
21
+ return root;
22
+ }
23
+ export function readJson(file, fallback = undefined) {
24
+ if (!existsSync(file))
25
+ return fallback;
26
+ return JSON.parse(readFileSync(file, "utf8"));
27
+ }
28
+ export function writeJson(file, value, mode = 0o644) {
29
+ mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
30
+ const temporary = file + ".tmp-" + process.pid;
31
+ writeFileSync(temporary, JSON.stringify(value, null, 2) + "\n", { mode });
32
+ renameSync(temporary, file);
33
+ }
34
+ export function readEnv(file) {
35
+ return existsSync(file) ? parseEnv(readFileSync(file)) : {};
36
+ }
37
+ export function origin(value, label) {
38
+ let url;
39
+ try {
40
+ url = new URL(value);
41
+ }
42
+ catch {
43
+ throw new Error(label + " must be an absolute HTTP(S) URL.");
44
+ }
45
+ if (!["https:", "http:"].includes(url.protocol) || url.username || url.password || url.search || url.hash || url.pathname !== "/") {
46
+ throw new Error(label + " must be an origin without credentials, path, query or fragment.");
47
+ }
48
+ return url.origin;
49
+ }
50
+ export function assertManifest(value) {
51
+ if (!value || value.schemaVersion !== 1 || !profiles[value.profile])
52
+ throw new Error("Expected deployment schemaVersion 1 and a supported profile.");
53
+ if (typeof value.platform !== "string" || !/^[a-z0-9][a-z0-9-]*$/.test(value.platform))
54
+ throw new Error("Invalid platform identifier.");
55
+ if (value.database !== "shared" || !["local", "s3"].includes(value.media))
56
+ throw new Error("Use database: shared and media: local|s3.");
57
+ if (!value.environments || typeof value.environments !== "object")
58
+ throw new Error("Missing environments.");
59
+ for (const [name, target] of Object.entries(value.environments)) {
60
+ if (!environments.includes(name))
61
+ throw new Error("Unsupported environment: " + name);
62
+ const components = name === "preview" ? ["web-ssr"] : profiles[target.profile || value.profile];
63
+ if (!components)
64
+ throw new Error("Unsupported profile for " + name);
65
+ if (!Array.isArray(target.publish) || target.publish.some(component => !components.includes(component)) || new Set(target.publish).size !== target.publish.length) {
66
+ throw new Error("Explicit publish list required for " + name + "; select components from " + components.join(", "));
67
+ }
68
+ for (const key of ["backendUrl", "frontendUrl"])
69
+ if (target[key])
70
+ origin(target[key], name + "." + key);
71
+ if (target.publish.includes("cms") && !target.backendUrl)
72
+ throw new Error(name + " CMS requires backendUrl.");
73
+ if (target.publish.some(component => component !== "cms") && !target.frontendUrl)
74
+ throw new Error(name + " frontend requires frontendUrl.");
75
+ if (name === "preview" && (target.mode !== "on-demand" || !["staging", "production"].includes(target.backend)))
76
+ throw new Error("Preview requires mode: on-demand and backend: staging|production.");
77
+ if (target.backend && !value.environments[target.backend])
78
+ throw new Error("Unknown backend reference: " + target.backend);
79
+ }
80
+ return value;
81
+ }
82
+ export function readManifest(root = projectRoot()) {
83
+ return assertManifest(parseYaml(readFileSync(join(root, "flowpress.deploy.yaml"), "utf8"), { uniqueKeys: true, maxAliasCount: 0 }));
84
+ }
85
+ export function targetConfig(manifest, name) {
86
+ if (!environments.includes(name) || !manifest.environments[name])
87
+ throw new Error("Environment not configured: " + name);
88
+ return manifest.environments[name];
89
+ }
90
+ export function allowedComponents(manifest, name, requested = []) {
91
+ const target = targetConfig(manifest, name);
92
+ const selected = requested.length ? requested : target.publish;
93
+ if (!selected.length)
94
+ throw new Error("Publication is disabled for " + name + ".");
95
+ for (const component of selected)
96
+ if (!target.publish.includes(component))
97
+ throw new Error("Publication of " + component + " is disabled for " + name + ".");
98
+ return selected;
99
+ }
100
+ export function identity(root = projectRoot()) {
101
+ const config = readJson(join(root, "flowpress.config.json"));
102
+ const pkg = readJson(join(root, "package.json"), {});
103
+ const slug = config?.project?.slug || pkg.name;
104
+ if (typeof slug !== "string" || !/^[a-z0-9][a-z0-9.-]*$/.test(slug))
105
+ throw new Error("A safe project slug is required.");
106
+ return { slug, displayName: config?.project?.displayName || slug, repository: config?.repository?.slug };
107
+ }
108
+ export function statePath(root, name) { return join(root, "deploy", "state", name + ".json"); }
109
+ export function loadState(root, name) { return readJson(statePath(root, name), {}); }
110
+ export function saveState(root, name, state) { writeJson(statePath(root, name), state); }
111
+ export function platformConfig(root, manifest, file) {
112
+ if (file || process.env.FLOWPRESS_PLATFORMS_FILE) {
113
+ const catalog = parseYaml(readFileSync(file || process.env.FLOWPRESS_PLATFORMS_FILE, "utf8"));
114
+ const platform = catalog.platforms?.[manifest.platform];
115
+ if (!platform)
116
+ throw new Error("Platform not found: " + manifest.platform);
117
+ return { ...platform, registryProject: manifest.registryProject || identity(root).slug };
118
+ }
119
+ for (const name of Object.keys(manifest.environments)) {
120
+ const state = loadState(root, name);
121
+ if (state.platform?.id === manifest.platform)
122
+ return { ...state.platform, registryProject: manifest.registryProject || identity(root).slug };
123
+ }
124
+ throw new Error("Set FLOWPRESS_PLATFORMS_FILE for initial provisioning.");
125
+ }
126
+ export function publicPlatform(id, platform) {
127
+ const { coolifyUrl, serverUuid, ssh, network, subnet, registry, registryProject, backupStorageUuid, poolUuid, destinationUuid, phpImage } = platform;
128
+ return { id, coolifyUrl, serverUuid, ssh, network, subnet, registry, registryProject, backupStorageUuid, poolUuid, destinationUuid, phpImage };
129
+ }
130
+ export function databaseIdentity(slug, name) {
131
+ const hash = createHash("sha256").update(slug + ":" + name).digest("hex").slice(0, 16);
132
+ return { DB_NAME: "fp" + hash, DB_USER: "fp" + hash };
133
+ }
134
+ export const saltKeys = ["AUTH_KEY", "SECURE_AUTH_KEY", "LOGGED_IN_KEY", "NONCE_KEY", "AUTH_SALT", "SECURE_AUTH_SALT", "LOGGED_IN_SALT", "NONCE_SALT"];
135
+ export function ensureSecrets(root, name, slug) {
136
+ const file = join(root, ".secrets", name + ".env");
137
+ const current = readEnv(file);
138
+ const values = { ...databaseIdentity(slug, name), ...current };
139
+ for (const key of [...saltKeys, "DB_PASSWORD", "CMS_BUILD_CALLBACK_TOKEN"])
140
+ values[key] ||= randomBytes(32).toString("hex");
141
+ values.DB_PREFIX ||= "fp_";
142
+ mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
143
+ writeFileSync(file, Object.entries(values).map(([key, value]) => key + "=" + JSON.stringify(value)).join("\n") + "\n", { mode: 0o600 });
144
+ return values;
145
+ }
146
+ export function operatorEnvironment(root) {
147
+ return { ...readEnv(join(root, ".secrets", "ops.env")), ...process.env };
148
+ }
149
+ export function imageRepository(platform, slug, component) {
150
+ if (!/^[a-z0-9][a-z0-9.-]*$/.test(slug) || !["cms", "web-static", "web-ssr"].includes(component))
151
+ throw new Error("Invalid image identity.");
152
+ return platform.registry + "/" + platform.registryProject + "/" + slug + "-" + component;
153
+ }
154
+ export function releaseTag(component, name, sha, buildId) {
155
+ if (!/^[a-f0-9]{40}$/.test(sha))
156
+ throw new Error("Expected a full commit SHA.");
157
+ if (component === "cms")
158
+ return "sha-" + sha;
159
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9.-]{0,63}$/.test(buildId || ""))
160
+ throw new Error("A safe frontend build ID is required.");
161
+ return name + "-" + sha + "-" + buildId;
162
+ }
163
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/ops/config.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export function coolifyClient(baseUrl: any, token: any): (method: any, path: any, body: any) => Promise<any>;
2
+ //# sourceMappingURL=coolify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coolify.d.ts","sourceRoot":"","sources":["../../src/ops/coolify.js"],"names":[],"mappings":"AACA,0DAGgC,WAAM,EAAE,SAAI,EAAE,SAAI,kBA8BjD"}
@@ -0,0 +1,44 @@
1
+ // Minimal Coolify v4 REST client (reachable only through the tailnet).
2
+ export function coolifyClient(baseUrl, token) {
3
+ if (!token)
4
+ throw new Error("Missing Coolify API token (COOLIFY_TOKEN).");
5
+ const api = `${baseUrl.replace(/\/+$/, "")}/api/v1`;
6
+ return async function request(method, path, body) {
7
+ for (let attempt = 0;; attempt++) {
8
+ try {
9
+ const response = await fetch(`${api}${path}`, {
10
+ method,
11
+ signal: AbortSignal.timeout(30_000),
12
+ headers: {
13
+ accept: "application/json",
14
+ authorization: `Bearer ${token}`,
15
+ ...(body ? { "content-type": "application/json" } : {}),
16
+ },
17
+ ...(body ? { body: JSON.stringify(body) } : {}),
18
+ });
19
+ const text = await response.text();
20
+ let data;
21
+ try {
22
+ data = text ? JSON.parse(text) : {};
23
+ }
24
+ catch {
25
+ data = { message: text.slice(0, 300) };
26
+ }
27
+ if (!response.ok) {
28
+ const details = data?.message ? String(data.message).replace(/Bearer\s+\S+/g, "[redacted]").slice(0, 160) : "Request refused";
29
+ const error = new Error(`${method} ${path.split("?")[0]} -> HTTP ${response.status}: ${details}`);
30
+ error.status = response.status;
31
+ throw error;
32
+ }
33
+ return data;
34
+ }
35
+ catch (error) {
36
+ const transient = error.status === undefined || error.status >= 500 || error.status === 429;
37
+ if (method !== "GET" || !transient || attempt >= 2)
38
+ throw error;
39
+ await new Promise((resolve) => setTimeout(resolve, 2000 * (attempt + 1)));
40
+ }
41
+ }
42
+ };
43
+ }
44
+ //# sourceMappingURL=coolify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coolify.js","sourceRoot":"","sources":["../../src/ops/coolify.js"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,OAAO,EAAE,KAAK;IAC1C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC;IACpD,OAAO,KAAK,UAAU,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI;QAC9C,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE;oBAC5C,MAAM;oBACN,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;oBACnC,OAAO,EAAE;wBACP,MAAM,EAAE,kBAAkB;wBAC1B,aAAa,EAAE,UAAU,KAAK,EAAE;wBAChC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACxD;oBACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChD,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC;gBACT,IAAI,CAAC;oBAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBAAC,CAAC;gBAC9F,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;oBAC9H,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;oBAClG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC/B,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC;gBAC5F,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC;oBAAE,MAAM,KAAK,CAAC;gBAChE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ export function safeArchiveEntries(entries: any): void;
2
+ export function pullSource(root: any, manifest: any, sourceName: any): Promise<{
3
+ source: any;
4
+ createdAt: string;
5
+ dump: string;
6
+ archive: string;
7
+ sha256: string;
8
+ }>;
9
+ export function prepareData(root: any, manifest: any, name: any, { file, image, source }: {
10
+ file: any;
11
+ image: any;
12
+ source?: string | undefined;
13
+ }): Promise<{
14
+ file: string;
15
+ counts: any;
16
+ prefix: any;
17
+ }>;
18
+ export function pushData(root: any, manifest: any, name: any, file: any): Promise<{
19
+ environment: any;
20
+ imported: boolean;
21
+ database: any;
22
+ }>;
23
+ export function pushUploads(root: any, manifest: any, name: any, archive: any): Promise<{
24
+ environment: any;
25
+ uploadsCopied: boolean;
26
+ }>;
27
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/ops/data.js"],"names":[],"mappings":"AAUA,uDAEC;AACD;;;;;;GAeC;AAUD;;;;;;;;GAoDC;AACD;;;;GAiBC;AACD;;;GAWC"}