@styleflow.app/flowpress-deploy 1.0.0-beta.2 → 1.0.0-beta.20
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/CHANGELOG.md +111 -0
- package/README.md +5 -0
- package/containers/cms/Dockerfile +35 -0
- package/containers/cms/Dockerfile.dockerignore +20 -0
- package/containers/cms/healthz.php +17 -0
- package/containers/cms/install-languages.sh +16 -0
- package/containers/cms/mpm.conf +10 -0
- package/containers/cms/php.ini +16 -0
- package/containers/cms/sanitize-integrations.php +14 -0
- package/containers/cms/sanitize.php +37 -0
- package/containers/cms/smtp.php +13 -0
- package/containers/cms/vhost.conf +61 -0
- package/containers/cms/wp-cli.yml +1 -0
- package/containers/local/cms/Dockerfile +18 -0
- package/containers/local/cms/entrypoint.sh +7 -0
- package/containers/local/cms/php.ini +8 -0
- package/containers/local/cms/vhost.conf +14 -0
- package/containers/local/web/Dockerfile +8 -0
- package/containers/local/web/entrypoint.sh +10 -0
- package/containers/php-runtime/Dockerfile +21 -0
- package/containers/web-ssr/Dockerfile +27 -0
- package/containers/web-ssr/Dockerfile.dockerignore +10 -0
- package/containers/web-static/Caddyfile +40 -0
- package/containers/web-static/Dockerfile +17 -0
- package/containers/web-static/Dockerfile.dockerignore +7 -0
- package/dist/development.d.ts +4 -0
- package/dist/development.d.ts.map +1 -0
- package/dist/development.js +10 -0
- package/dist/development.js.map +1 -0
- package/dist/node-fetch.d.ts +3 -0
- package/dist/node-fetch.d.ts.map +1 -0
- package/dist/node-fetch.js +20 -0
- package/dist/node-fetch.js.map +1 -0
- package/dist/ops/bootstrap.d.ts +21 -0
- package/dist/ops/bootstrap.d.ts.map +1 -0
- package/dist/ops/bootstrap.js +123 -0
- package/dist/ops/bootstrap.js.map +1 -0
- package/dist/ops/build.d.ts +39 -0
- package/dist/ops/build.d.ts.map +1 -0
- package/dist/ops/build.js +110 -0
- package/dist/ops/build.js.map +1 -0
- package/dist/ops/check.d.ts +18 -0
- package/dist/ops/check.d.ts.map +1 -0
- package/dist/ops/check.js +46 -0
- package/dist/ops/check.js.map +1 -0
- package/dist/ops/cli.d.ts +3 -0
- package/dist/ops/cli.d.ts.map +1 -0
- package/dist/ops/cli.js +166 -0
- package/dist/ops/cli.js.map +1 -0
- package/dist/ops/config.d.ts +54 -0
- package/dist/ops/config.d.ts.map +1 -0
- package/dist/ops/config.js +202 -0
- package/dist/ops/config.js.map +1 -0
- package/dist/ops/coolify.d.ts +2 -0
- package/dist/ops/coolify.d.ts.map +1 -0
- package/dist/ops/coolify.js +44 -0
- package/dist/ops/coolify.js.map +1 -0
- package/dist/ops/data.d.ts +31 -0
- package/dist/ops/data.d.ts.map +1 -0
- package/dist/ops/data.js +163 -0
- package/dist/ops/data.js.map +1 -0
- package/dist/ops/deploy.d.ts +38 -0
- package/dist/ops/deploy.d.ts.map +1 -0
- package/dist/ops/deploy.js +127 -0
- package/dist/ops/deploy.js.map +1 -0
- package/dist/ops/editorial.d.ts +23 -0
- package/dist/ops/editorial.d.ts.map +1 -0
- package/dist/ops/editorial.js +79 -0
- package/dist/ops/editorial.js.map +1 -0
- package/dist/ops/environment-files.d.ts +9 -0
- package/dist/ops/environment-files.d.ts.map +1 -0
- package/dist/ops/environment-files.js +125 -0
- package/dist/ops/environment-files.js.map +1 -0
- package/dist/ops/environment.d.ts +29 -0
- package/dist/ops/environment.d.ts.map +1 -0
- package/dist/ops/environment.js +159 -0
- package/dist/ops/environment.js.map +1 -0
- package/dist/ops/health.d.ts +26 -0
- package/dist/ops/health.d.ts.map +1 -0
- package/dist/ops/health.js +27 -0
- package/dist/ops/health.js.map +1 -0
- package/dist/ops/local.d.ts +161 -0
- package/dist/ops/local.d.ts.map +1 -0
- package/dist/ops/local.js +173 -0
- package/dist/ops/local.js.map +1 -0
- package/dist/ops/monitor.d.ts +23 -0
- package/dist/ops/monitor.d.ts.map +1 -0
- package/dist/ops/monitor.js +143 -0
- package/dist/ops/monitor.js.map +1 -0
- package/dist/ops/process.d.ts +9 -0
- package/dist/ops/process.d.ts.map +1 -0
- package/dist/ops/process.js +56 -0
- package/dist/ops/process.js.map +1 -0
- package/dist/ops/provision.d.ts +41 -0
- package/dist/ops/provision.d.ts.map +1 -0
- package/dist/ops/provision.js +268 -0
- package/dist/ops/provision.js.map +1 -0
- package/dist/ops/registry.d.ts +7 -0
- package/dist/ops/registry.d.ts.map +1 -0
- package/dist/ops/registry.js +73 -0
- package/dist/ops/registry.js.map +1 -0
- package/dist/ops/release.d.ts +26 -0
- package/dist/ops/release.d.ts.map +1 -0
- package/dist/ops/release.js +79 -0
- package/dist/ops/release.js.map +1 -0
- package/dist/ops/s3.d.ts +8 -0
- package/dist/ops/s3.d.ts.map +1 -0
- package/dist/ops/s3.js +38 -0
- package/dist/ops/s3.js.map +1 -0
- package/dist/ops/static-config.d.ts +14 -0
- package/dist/ops/static-config.d.ts.map +1 -0
- package/dist/ops/static-config.js +96 -0
- package/dist/ops/static-config.js.map +1 -0
- package/flowpress-deploy.php +2 -2
- package/includes/automatic-build.php +22 -5
- package/package.json +40 -6
- package/schema/deployment.schema.json +185 -0
|
@@ -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,gDA0BC;AACD,iDAEC;AACD,4DAGC;AACD,oFAMC;AACD;;;;EAMC;AACD,wDAA+F;AAC/F,qDAAqF;AACrF,kEAWC;AACD,yEAwBC;AACD;;;;;;;;;;;;;EAGC;AACD;;;EAGC;AAED;;;EASC;AACD;;EAEC;AACD,kFAGC;AACD,sFAKC;AA3JD;;;;;GAKG;AACH,oCAA0E;AA8H1E,gCAAuJ"}
|
|
@@ -0,0 +1,202 @@
|
|
|
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
|
+
if (value.development?.ports)
|
|
60
|
+
for (const [key, port] of Object.entries(value.development.ports)) {
|
|
61
|
+
if (!["web", "cms", "https", "database"].includes(key) || !Number.isInteger(port) || port < 1 || port > 65535)
|
|
62
|
+
throw new Error("Invalid development port: " + key);
|
|
63
|
+
}
|
|
64
|
+
for (const [name, target] of Object.entries(value.environments)) {
|
|
65
|
+
if (!environments.includes(name))
|
|
66
|
+
throw new Error("Unsupported environment: " + name);
|
|
67
|
+
const components = name === "preview" ? ["web-ssr"] : profiles[target.profile || value.profile];
|
|
68
|
+
if (!components)
|
|
69
|
+
throw new Error("Unsupported profile for " + name);
|
|
70
|
+
if (!Array.isArray(target.publish) || target.publish.some(component => !components.includes(component)) || new Set(target.publish).size !== target.publish.length) {
|
|
71
|
+
throw new Error("Explicit publish list required for " + name + "; select components from " + components.join(", "));
|
|
72
|
+
}
|
|
73
|
+
for (const key of ["backendUrl", "frontendUrl"])
|
|
74
|
+
if (target[key])
|
|
75
|
+
origin(target[key], name + "." + key);
|
|
76
|
+
for (const key of ["aliases", "backendAliases"])
|
|
77
|
+
if (target[key] !== undefined) {
|
|
78
|
+
if (!Array.isArray(target[key]))
|
|
79
|
+
throw new Error(name + "." + key + " must be a list of origins.");
|
|
80
|
+
for (const value of target[key])
|
|
81
|
+
origin(value, name + "." + key);
|
|
82
|
+
}
|
|
83
|
+
if (target.publish.includes("cms") && !target.backendUrl)
|
|
84
|
+
throw new Error(name + " CMS requires backendUrl.");
|
|
85
|
+
if (target.publish.some(component => component !== "cms") && !target.frontendUrl)
|
|
86
|
+
throw new Error(name + " frontend requires frontendUrl.");
|
|
87
|
+
if (name === "preview" && (target.mode !== "on-demand" || !["staging", "production"].includes(target.backend)))
|
|
88
|
+
throw new Error("Preview requires mode: on-demand and backend: staging|production.");
|
|
89
|
+
if (target.backend && !value.environments[target.backend])
|
|
90
|
+
throw new Error("Unknown backend reference: " + target.backend);
|
|
91
|
+
}
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
94
|
+
export function readManifest(root = projectRoot()) {
|
|
95
|
+
return assertManifest(parseYaml(readFileSync(join(root, "flowpress.deploy.yaml"), "utf8"), { uniqueKeys: true, maxAliasCount: 0 }));
|
|
96
|
+
}
|
|
97
|
+
export function targetConfig(manifest, name) {
|
|
98
|
+
if (!environments.includes(name) || !manifest.environments[name])
|
|
99
|
+
throw new Error("Environment not configured: " + name);
|
|
100
|
+
return manifest.environments[name];
|
|
101
|
+
}
|
|
102
|
+
export function allowedComponents(manifest, name, requested = []) {
|
|
103
|
+
const target = targetConfig(manifest, name);
|
|
104
|
+
const selected = requested.length ? requested : target.publish;
|
|
105
|
+
if (!selected.length)
|
|
106
|
+
throw new Error("Publication is disabled for " + name + ".");
|
|
107
|
+
for (const component of selected)
|
|
108
|
+
if (!target.publish.includes(component))
|
|
109
|
+
throw new Error("Publication of " + component + " is disabled for " + name + ".");
|
|
110
|
+
return selected;
|
|
111
|
+
}
|
|
112
|
+
export function identity(root = projectRoot()) {
|
|
113
|
+
const config = readJson(join(root, "flowpress.config.json"));
|
|
114
|
+
const pkg = readJson(join(root, "package.json"), {});
|
|
115
|
+
const slug = config?.project?.slug || pkg.name;
|
|
116
|
+
if (typeof slug !== "string" || !/^[a-z0-9][a-z0-9.-]*$/.test(slug))
|
|
117
|
+
throw new Error("A safe project slug is required.");
|
|
118
|
+
return { slug, displayName: config?.project?.displayName || slug, repository: config?.repository?.slug };
|
|
119
|
+
}
|
|
120
|
+
export function statePath(root, name) { return join(root, "deploy", "state", name + ".json"); }
|
|
121
|
+
export function loadState(root, name) { return readJson(statePath(root, name), {}); }
|
|
122
|
+
export function saveState(root, name, state) {
|
|
123
|
+
const binding = structuredClone(state), runtime = { apps: {} };
|
|
124
|
+
for (const [component, app] of Object.entries(binding.apps || {})) {
|
|
125
|
+
for (const key of ["current", "previous", "deployedAt"])
|
|
126
|
+
if (app[key] !== undefined) {
|
|
127
|
+
runtime.apps[component] ||= {};
|
|
128
|
+
runtime.apps[component][key] = app[key];
|
|
129
|
+
delete app[key];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
writeJson(statePath(root, name), binding);
|
|
133
|
+
if (Object.keys(runtime.apps).length)
|
|
134
|
+
writeJson(join(root, ".local/flowpress", "runtime-" + name + ".json"), runtime, 0o600);
|
|
135
|
+
}
|
|
136
|
+
export function platformConfig(root, manifest, file) {
|
|
137
|
+
if (file || process.env.FLOWPRESS_PLATFORMS_FILE) {
|
|
138
|
+
const catalogFile = file || process.env.FLOWPRESS_PLATFORMS_FILE;
|
|
139
|
+
const catalog = parseYaml(readFileSync(catalogFile, "utf8"));
|
|
140
|
+
const platform = catalog.platforms?.[manifest.platform];
|
|
141
|
+
if (!platform)
|
|
142
|
+
throw new Error("Platform not found: " + manifest.platform);
|
|
143
|
+
if (platform.server) {
|
|
144
|
+
const server = parseYaml(readFileSync(join(dirname(catalogFile), "servers.yaml"), "utf8")).servers?.[platform.server];
|
|
145
|
+
if (!server?.ssh?.alias || !server.ssh.user || !server.coolify_server_uuid)
|
|
146
|
+
throw new Error("Incomplete server inventory binding: " + platform.server);
|
|
147
|
+
platform.serverUuid = server.coolify_server_uuid;
|
|
148
|
+
platform.ssh = server.ssh.user + "@" + server.ssh.alias;
|
|
149
|
+
}
|
|
150
|
+
if (platform.panel) {
|
|
151
|
+
const panel = parseYaml(readFileSync(join(dirname(catalogFile), "panels.yaml"), "utf8")).panels?.[platform.panel];
|
|
152
|
+
if (!panel?.panel_url_tailnet)
|
|
153
|
+
throw new Error("Missing private panel URL in inventory.");
|
|
154
|
+
platform.coolifyUrl = panel.panel_url_tailnet;
|
|
155
|
+
}
|
|
156
|
+
return { ...platform, registryProject: manifest.registryProject || identity(root).slug };
|
|
157
|
+
}
|
|
158
|
+
for (const name of Object.keys(manifest.environments)) {
|
|
159
|
+
const state = loadState(root, name);
|
|
160
|
+
if (state.platform?.id === manifest.platform)
|
|
161
|
+
return { ...state.platform, registryProject: manifest.registryProject || identity(root).slug };
|
|
162
|
+
}
|
|
163
|
+
throw new Error("Set FLOWPRESS_PLATFORMS_FILE for initial provisioning.");
|
|
164
|
+
}
|
|
165
|
+
export function publicPlatform(id, platform) {
|
|
166
|
+
const { coolifyUrl, serverUuid, ssh, network, subnet, registry, registryProject, backupStorageUuid, poolUuid, destinationUuid, phpImage } = platform;
|
|
167
|
+
return { id, coolifyUrl, serverUuid, ssh, network, subnet, registry, registryProject, backupStorageUuid, poolUuid, destinationUuid, phpImage };
|
|
168
|
+
}
|
|
169
|
+
export function databaseIdentity(slug, name) {
|
|
170
|
+
const hash = createHash("sha256").update(slug + ":" + name).digest("hex").slice(0, 16);
|
|
171
|
+
return { DB_NAME: "fp" + hash, DB_USER: "fp" + hash };
|
|
172
|
+
}
|
|
173
|
+
export const saltKeys = ["AUTH_KEY", "SECURE_AUTH_KEY", "LOGGED_IN_KEY", "NONCE_KEY", "AUTH_SALT", "SECURE_AUTH_SALT", "LOGGED_IN_SALT", "NONCE_SALT"];
|
|
174
|
+
export function ensureSecrets(root, name, slug) {
|
|
175
|
+
const file = join(root, ".secrets", name + ".env");
|
|
176
|
+
const current = readEnv(file);
|
|
177
|
+
const values = { ...databaseIdentity(slug, name), ...current };
|
|
178
|
+
for (const key of [...saltKeys, "DB_PASSWORD", "CMS_BUILD_CALLBACK_TOKEN"])
|
|
179
|
+
values[key] ||= randomBytes(32).toString("hex");
|
|
180
|
+
values.DB_PREFIX ||= "fp_";
|
|
181
|
+
mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
|
|
182
|
+
writeFileSync(file, Object.entries(values).map(([key, value]) => key + "=" + JSON.stringify(value)).join("\n") + "\n", { mode: 0o600 });
|
|
183
|
+
return values;
|
|
184
|
+
}
|
|
185
|
+
export function operatorEnvironment(root) {
|
|
186
|
+
return { ...readEnv(join(root, ".secrets", "ops.env")), ...process.env };
|
|
187
|
+
}
|
|
188
|
+
export function imageRepository(platform, slug, component) {
|
|
189
|
+
if (!/^[a-z0-9][a-z0-9.-]*$/.test(slug) || !["cms", "web-static", "web-ssr"].includes(component))
|
|
190
|
+
throw new Error("Invalid image identity.");
|
|
191
|
+
return platform.registry + "/" + platform.registryProject + "/" + slug + "-" + component;
|
|
192
|
+
}
|
|
193
|
+
export function releaseTag(component, name, sha, buildId) {
|
|
194
|
+
if (!/^[a-f0-9]{40}$/.test(sha))
|
|
195
|
+
throw new Error("Expected a full commit SHA.");
|
|
196
|
+
if (component === "cms")
|
|
197
|
+
return "sha-" + sha;
|
|
198
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9.-]{0,63}$/.test(buildId || ""))
|
|
199
|
+
throw new Error("A safe frontend build ID is required.");
|
|
200
|
+
return name + "-" + sha + "-" + buildId;
|
|
201
|
+
}
|
|
202
|
+
//# 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 @@
|
|
|
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,31 @@
|
|
|
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
|
+
export function cleanIntegrations(root: any, manifest: any, name: any): Promise<{
|
|
28
|
+
environment: any;
|
|
29
|
+
output: any;
|
|
30
|
+
}>;
|
|
31
|
+
//# sourceMappingURL=data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/ops/data.js"],"names":[],"mappings":"AAUA,uDAGC;AACD;;;;;;GAgBC;AAUD;;;;;;;;GAsDC;AACD;;;;GAiBC;AACD;;;GAWC;AAED;;;GAUC"}
|
package/dist/ops/data.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { join, resolve, dirname } from "node:path";
|
|
4
|
+
import { createHash } from "node:crypto";
|
|
5
|
+
import { allowedComponents, ensureSecrets, identity, loadState, readEnv, readJson, saveState, targetConfig, writeJson } from "./config.js";
|
|
6
|
+
import { manifestEnvironment } from "./environment.js";
|
|
7
|
+
import { containers } from "./build.js";
|
|
8
|
+
import { capture, containerFor, run, shellQuote, sleep, ssh, sshFile } from "./process.js";
|
|
9
|
+
import { sqlIdentifier } from "./provision.js";
|
|
10
|
+
export function safeArchiveEntries(entries) {
|
|
11
|
+
if (!entries.length || entries.some(path => path.startsWith("/") || path.includes("\\") || path.split("/").includes("..")))
|
|
12
|
+
throw new Error("Unsafe or empty uploads archive.");
|
|
13
|
+
if (entries.some(path => /(?:^|\/)wp-migrate-db(?:\/|$)|\.(?:sql(?:\.gz)?|env|bak)$/i.test(path)))
|
|
14
|
+
throw new Error("Uploads archive contains private backup material.");
|
|
15
|
+
}
|
|
16
|
+
export async function pullSource(root, manifest, sourceName) {
|
|
17
|
+
const source = manifest.sources?.[sourceName];
|
|
18
|
+
if (!source || !/^[a-zA-Z0-9_.@-]+$/.test(source.ssh || "") || !/^[a-z_][a-z0-9_-]*$/.test(source.user || "") || !source.path?.startsWith("/") || source.path.includes("\n"))
|
|
19
|
+
throw new Error("Configure a read-only source with ssh, user and absolute CMS path.");
|
|
20
|
+
const directory = join(root, ".local/flowpress", "source-" + sourceName + "-" + Date.now());
|
|
21
|
+
mkdirSync(directory, { recursive: true, mode: 0o700 });
|
|
22
|
+
const wp = "runuser -u " + shellQuote(source.user) + " -- wp --path=" + shellQuote(source.path + "/web/wp") + " --skip-plugins --skip-themes";
|
|
23
|
+
const dump = join(directory, "source.sql");
|
|
24
|
+
await sshFile(source, wp + " db export - --single-transaction --skip-lock-tables --quiet", { output: dump });
|
|
25
|
+
const archive = join(directory, "uploads.tar");
|
|
26
|
+
const excludes = ["./wp-migrate-db", "*.sql", "*.sql.gz", "*.env", "*.bak"].map(value => " --exclude=" + shellQuote(value)).join("");
|
|
27
|
+
await sshFile(source, "tar -C " + shellQuote(source.path + "/web/app/uploads") + excludes + " -cf - .", { output: archive });
|
|
28
|
+
safeArchiveEntries(capture("tar", ["-tf", archive]).split("\n").filter(Boolean));
|
|
29
|
+
const meta = { source: sourceName, createdAt: new Date().toISOString(), dump, archive,
|
|
30
|
+
sha256: createHash("sha256").update(readFileSync(dump)).digest("hex") };
|
|
31
|
+
writeJson(join(directory, "snapshot.json"), meta, 0o600);
|
|
32
|
+
return meta;
|
|
33
|
+
}
|
|
34
|
+
function mysql(container, password, args, input = "") {
|
|
35
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(container) || /[\r\n]/.test(password))
|
|
36
|
+
throw new Error("Invalid database container credentials.");
|
|
37
|
+
return capture("docker", ["exec", "-i", container, "sh", "-c",
|
|
38
|
+
'read -r MYSQL_PWD; export MYSQL_PWD; exec mariadb -uroot --batch ' + args.map(shellQuote).join(" ")], { input: password + "\n" + input });
|
|
39
|
+
}
|
|
40
|
+
function dumpCopy(container, password, database) {
|
|
41
|
+
return capture("docker", ["exec", "-i", container, "sh", "-c",
|
|
42
|
+
'read -r MYSQL_PWD; export MYSQL_PWD; exec mariadb-dump -uroot --single-transaction --skip-lock-tables --skip-add-locks --skip-comments --no-tablespaces ' + sqlIdentifier(database)], { input: password + "\n", maxBuffer: 256 * 1024 * 1024 });
|
|
43
|
+
}
|
|
44
|
+
export async function prepareData(root, manifest, name, { file, image, source = "production" }) {
|
|
45
|
+
allowedComponents(manifest, name, ["cms"]);
|
|
46
|
+
if (name === "production")
|
|
47
|
+
throw new Error("Data preparation for production is not supported by this migration command.");
|
|
48
|
+
if (!file || !existsSync(file))
|
|
49
|
+
throw new Error("A source dump is required.");
|
|
50
|
+
const project = identity(root);
|
|
51
|
+
const values = ensureSecrets(root, name, project.slug);
|
|
52
|
+
const env = { ...manifestEnvironment(root, name, {}), DB_HOST: "127.0.0.1:3306", DB_NAME: values.DB_NAME, DB_USER: values.DB_USER, DB_PASSWORD: values.DB_PASSWORD, DB_PREFIX: values.DB_PREFIX };
|
|
53
|
+
// The source prefix belongs to the SQL snapshot, not to an environment credential.
|
|
54
|
+
const original = readFileSync(file, "utf8");
|
|
55
|
+
const match = original.match(/CREATE TABLE (?:IF NOT EXISTS )?\x60([a-zA-Z0-9_]+)options\x60/);
|
|
56
|
+
if (!match)
|
|
57
|
+
throw new Error("Cannot identify the WordPress table prefix in the snapshot.");
|
|
58
|
+
env.DB_PREFIX = match[1];
|
|
59
|
+
values.DB_PREFIX = match[1];
|
|
60
|
+
const secretsPath = join(root, ".secrets", name + ".env");
|
|
61
|
+
writeFileSync(secretsPath, Object.entries(values).map(([key, value]) => key + "=" + JSON.stringify(value)).join("\n") + "\n", { mode: 0o600 });
|
|
62
|
+
const release = readJson(join(root, ".local/flowpress", "release-" + name + "-cms.json"));
|
|
63
|
+
const cmsImage = image || (release && release.repository + ":" + release.tag);
|
|
64
|
+
if (!cmsImage)
|
|
65
|
+
throw new Error("Build the CMS image before preparing data.");
|
|
66
|
+
const directory = join(root, ".local/flowpress", "prepared-" + name + "-" + Date.now());
|
|
67
|
+
mkdirSync(directory, { recursive: true, mode: 0o700 });
|
|
68
|
+
const envFile = join(directory, "cms.env");
|
|
69
|
+
writeFileSync(envFile, Object.entries(env).filter(([, value]) => typeof value === "string").map(([key, value]) => key + "=" + value).join("\n") + "\n", { mode: 0o600 });
|
|
70
|
+
const database = "flowpress-transform-" + process.pid;
|
|
71
|
+
const password = randomBytes(32).toString("hex");
|
|
72
|
+
run("docker", ["run", "--rm", "-d", "--name", database, "--network", "none", "--env-file", envFile, "-e", "MARIADB_ROOT_PASSWORD=" + password, "mariadb:11.4"], { stdio: "ignore" });
|
|
73
|
+
try {
|
|
74
|
+
let ready = false;
|
|
75
|
+
for (let attempt = 0; attempt < 60; attempt++) {
|
|
76
|
+
try {
|
|
77
|
+
capture("docker", ["exec", database, "healthcheck.sh", "--connect", "--innodb_initialized"]);
|
|
78
|
+
ready = true;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
await sleep(2000);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!ready)
|
|
86
|
+
throw new Error("Disposable database did not start.");
|
|
87
|
+
const account = "CREATE DATABASE " + sqlIdentifier(values.DB_NAME) + ";\nCREATE USER '" + sqlIdentifier(values.DB_USER) + "'@'127.0.0.1' IDENTIFIED BY '" + values.DB_PASSWORD + "';\nGRANT ALL ON " + values.DB_NAME + ".* TO '" + values.DB_USER + "'@'127.0.0.1';\n";
|
|
88
|
+
mysql(database, password, [], account);
|
|
89
|
+
mysql(database, password, [values.DB_NAME], original);
|
|
90
|
+
const wp = args => capture("docker", ["run", "--rm", "--network", "container:" + database, "--env-file", envFile,
|
|
91
|
+
"-v", join(containers, "cms") + ":/tmp/flowpress-sanitizers:ro", cmsImage, "wp", ...args], { maxBuffer: 256 * 1024 * 1024 });
|
|
92
|
+
const sourceTarget = targetConfig(manifest, source);
|
|
93
|
+
const replacements = [
|
|
94
|
+
[sourceTarget.backendUrl, env.BACKEND_URL],
|
|
95
|
+
...(sourceTarget.backendAliases || []).map(from => [from, env.BACKEND_URL]),
|
|
96
|
+
[sourceTarget.frontendUrl, env.SITE_URL],
|
|
97
|
+
...(sourceTarget.aliases || []).map(from => [from, env.SITE_URL]),
|
|
98
|
+
[sourceTarget.mediaUrl, env.BACKEND_URL + "/app/uploads"],
|
|
99
|
+
].filter(([from, to]) => from && to && from !== to).sort((a, b) => b[0].length - a[0].length);
|
|
100
|
+
for (const [from, to] of replacements)
|
|
101
|
+
wp(["search-replace", from, to, "--all-tables-with-prefix", "--precise", "--quiet"]);
|
|
102
|
+
const output = wp(["eval-file", "/tmp/flowpress-sanitizers/sanitize.php"]);
|
|
103
|
+
const counts = JSON.parse(output.split("\n").findLast(line => line.startsWith("{")));
|
|
104
|
+
const transformed = join(directory, "staging.sql");
|
|
105
|
+
writeFileSync(transformed, dumpCopy(database, password, values.DB_NAME) + "\n", { mode: 0o600 });
|
|
106
|
+
writeJson(join(directory, "prepared.json"), { environment: name, source, preparedAt: new Date().toISOString(), prefix: env.DB_PREFIX, counts, file: transformed }, 0o600);
|
|
107
|
+
return { file: transformed, counts, prefix: env.DB_PREFIX };
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
run("docker", ["rm", "-fv", database], { stdio: "ignore" });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
export async function pushData(root, manifest, name, file) {
|
|
114
|
+
allowedComponents(manifest, name, ["cms"]);
|
|
115
|
+
if (name === "production")
|
|
116
|
+
throw new Error("Production imports require a separate reviewed procedure.");
|
|
117
|
+
const state = loadState(root, name);
|
|
118
|
+
if (state.seededAt)
|
|
119
|
+
throw new Error("This database was already seeded. Refusing an implicit overwrite.");
|
|
120
|
+
const values = readEnv(join(root, ".secrets", name + ".env"));
|
|
121
|
+
if (!values.DB_PASSWORD || state.database?.name !== values.DB_NAME)
|
|
122
|
+
throw new Error("Database binding mismatch.");
|
|
123
|
+
const pool = sqlIdentifier(values.DB_NAME), user = sqlIdentifier(values.DB_USER);
|
|
124
|
+
const program = 'read -r MYSQL_PWD; export MYSQL_PWD; exec mariadb --batch -u' + user + " " + pool;
|
|
125
|
+
const existing = ssh(state.platform, "docker exec -i " + state.platform.poolUuid + " sh -c " + shellQuote(program), { input: values.DB_PASSWORD + "\nSELECT COUNT(*) FROM information_schema.tables WHERE table_schema=DATABASE();\n" });
|
|
126
|
+
if (existing.trim() !== "COUNT(*)\n0" && existing.trim() !== "0")
|
|
127
|
+
throw new Error("Refusing to import into a nonempty database.");
|
|
128
|
+
const sql = readFileSync(resolve(file), "utf8");
|
|
129
|
+
if (/^\s*(?:CREATE|DROP)\s+(?:DATABASE|USER)\b/im.test(sql) || /^\s*USE\s+/im.test(sql))
|
|
130
|
+
throw new Error("The import must contain only the prepared schema, without database/user operations.");
|
|
131
|
+
ssh(state.platform, "docker exec -i " + state.platform.poolUuid + " sh -c " + shellQuote(program), { input: values.DB_PASSWORD + "\n" + sql, maxBuffer: 256 * 1024 * 1024 });
|
|
132
|
+
state.seededAt = new Date().toISOString();
|
|
133
|
+
saveState(root, name, state);
|
|
134
|
+
return { environment: name, imported: true, database: pool };
|
|
135
|
+
}
|
|
136
|
+
export async function pushUploads(root, manifest, name, archive) {
|
|
137
|
+
allowedComponents(manifest, name, ["cms"]);
|
|
138
|
+
const state = loadState(root, name);
|
|
139
|
+
const app = state.apps?.cms;
|
|
140
|
+
if (!app?.uuid)
|
|
141
|
+
throw new Error("CMS must be provisioned first.");
|
|
142
|
+
safeArchiveEntries(capture("tar", ["-tf", archive]).split("\n").filter(Boolean));
|
|
143
|
+
const listing = capture("tar", ["-tvf", archive]);
|
|
144
|
+
if (listing.split("\n").some(line => /^[lhbcps]/.test(line)))
|
|
145
|
+
throw new Error("Uploads archive contains links or special files.");
|
|
146
|
+
const container = containerFor(state.platform, app.uuid);
|
|
147
|
+
await sshFile(state.platform, "docker exec -i " + shellQuote(container) + " tar -C /srv/cms/web/app/uploads -xf -", { input: archive });
|
|
148
|
+
return { environment: name, uploadsCopied: true };
|
|
149
|
+
}
|
|
150
|
+
export async function cleanIntegrations(root, manifest, name) {
|
|
151
|
+
allowedComponents(manifest, name, ["cms"]);
|
|
152
|
+
if (name === "production")
|
|
153
|
+
throw new Error("Integration cleanup is restricted to non-production clones.");
|
|
154
|
+
const state = loadState(root, name), app = state.apps?.cms;
|
|
155
|
+
if (!app?.uuid)
|
|
156
|
+
throw new Error("CMS not provisioned.");
|
|
157
|
+
const container = containerFor(state.platform, app.uuid);
|
|
158
|
+
const script = readFileSync(join(containers, "cms/sanitize-integrations.php"), "utf8").replace(/^<\?php\s*/, "");
|
|
159
|
+
// This program contains no credentials. Only option names and counts are returned.
|
|
160
|
+
const output = ssh(state.platform, "docker exec " + shellQuote(container) + " wp eval " + shellQuote(script));
|
|
161
|
+
return { environment: name, output };
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/ops/data.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export function assertRelease(release: any, app: any, name: any, component: any): void;
|
|
2
|
+
export function waitHealth(app: any, release: any, { fetchImpl, attempts, delay }?: {
|
|
3
|
+
fetchImpl?: typeof fetch | undefined;
|
|
4
|
+
attempts?: number | undefined;
|
|
5
|
+
delay?: number | undefined;
|
|
6
|
+
}): Promise<any>;
|
|
7
|
+
export function waitDeployment(api: any, id: any): Promise<void>;
|
|
8
|
+
export function registryRelease(app: any, name: any, component: any, alias: any, operator: any): Promise<{
|
|
9
|
+
component: any;
|
|
10
|
+
environment: any;
|
|
11
|
+
repository: any;
|
|
12
|
+
tag: string;
|
|
13
|
+
sha: any;
|
|
14
|
+
digest: string;
|
|
15
|
+
buildId: any;
|
|
16
|
+
pushed: boolean;
|
|
17
|
+
} | null>;
|
|
18
|
+
export function deployedRelease(root: any, name: any, component: any): Promise<{
|
|
19
|
+
component: any;
|
|
20
|
+
environment: any;
|
|
21
|
+
repository: any;
|
|
22
|
+
tag: string;
|
|
23
|
+
sha: any;
|
|
24
|
+
digest: string;
|
|
25
|
+
buildId: any;
|
|
26
|
+
pushed: boolean;
|
|
27
|
+
} | null>;
|
|
28
|
+
export function deploy(root: any, manifest: any, name: any, component: any, { rollback, release: supplied }?: {
|
|
29
|
+
rollback?: boolean | undefined;
|
|
30
|
+
}): Promise<{
|
|
31
|
+
component: any;
|
|
32
|
+
environment: any;
|
|
33
|
+
release: any;
|
|
34
|
+
digest: any;
|
|
35
|
+
url: any;
|
|
36
|
+
rollback: boolean;
|
|
37
|
+
}>;
|
|
38
|
+
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/ops/deploy.js"],"names":[],"mappings":"AAOA,uFAIC;AACD;;;;iBAiBC;AACD,iEASC;AACD;;;;;;;;;UAMC;AACD;;;;;;;;;UAIC;AAaD;;;;;;;;;GA0CC"}
|