@cogitator-ai/deploy 0.4.7 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -31
- package/dist/analyzer.d.ts +60 -9
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +463 -91
- package/dist/analyzer.js.map +1 -1
- package/dist/deployer.d.ts +15 -2
- package/dist/deployer.d.ts.map +1 -1
- package/dist/deployer.js +18 -8
- package/dist/deployer.js.map +1 -1
- package/dist/generator.d.ts +6 -0
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +9 -2
- package/dist/generator.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/artifacts.d.ts.map +1 -1
- package/dist/providers/artifacts.js +2 -1
- package/dist/providers/artifacts.js.map +1 -1
- package/dist/providers/docker.d.ts +17 -0
- package/dist/providers/docker.d.ts.map +1 -1
- package/dist/providers/docker.js +63 -8
- package/dist/providers/docker.js.map +1 -1
- package/dist/providers/fly.d.ts +2 -0
- package/dist/providers/fly.d.ts.map +1 -1
- package/dist/providers/fly.js +43 -2
- package/dist/providers/fly.js.map +1 -1
- package/dist/templates/docker-compose.d.ts.map +1 -1
- package/dist/templates/docker-compose.js +23 -15
- package/dist/templates/docker-compose.js.map +1 -1
- package/dist/templates/dockerfile.d.ts +10 -1
- package/dist/templates/dockerfile.d.ts.map +1 -1
- package/dist/templates/dockerfile.js +84 -42
- package/dist/templates/dockerfile.js.map +1 -1
- package/dist/templates/fly-toml.d.ts.map +1 -1
- package/dist/templates/fly-toml.js +65 -31
- package/dist/templates/fly-toml.js.map +1 -1
- package/dist/templates/health.d.ts +9 -2
- package/dist/templates/health.d.ts.map +1 -1
- package/dist/templates/health.js +24 -2
- package/dist/templates/health.js.map +1 -1
- package/dist/utils/text.d.ts +9 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +19 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/volumes.d.ts +10 -0
- package/dist/volumes.d.ts.map +1 -0
- package/dist/volumes.js +21 -0
- package/dist/volumes.js.map +1 -0
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fly.js","sourceRoot":"","sources":["../../src/providers/fly.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAoC,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"fly.js","sourceRoot":"","sources":["../../src/providers/fly.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-compose.d.ts","sourceRoot":"","sources":["../../src/templates/docker-compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"docker-compose.d.ts","sourceRoot":"","sources":["../../src/templates/docker-compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,eAAO,MAAM,oBAAoB,6DAA6D,CAAC;AAC/F,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAMtD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAKrD;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAmGlE"}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
|
+
import { volumeMountPath, volumeName } from '../volumes.js';
|
|
2
|
+
import { servesHttp } from './health.js';
|
|
3
|
+
import { trimTrailing } from '../utils/text.js';
|
|
1
4
|
export const COMPOSE_DATABASE_URL = 'postgresql://cogitator:cogitator@postgres:5432/cogitator';
|
|
2
5
|
export const COMPOSE_REDIS_URL = 'redis://redis:6379';
|
|
3
6
|
function yamlString(value) {
|
|
4
7
|
return JSON.stringify(value);
|
|
5
8
|
}
|
|
6
|
-
function stripTrailingSlashes(value) {
|
|
7
|
-
let end = value.length;
|
|
8
|
-
while (end > 0 && value[end - 1] === '/')
|
|
9
|
-
end--;
|
|
10
|
-
return value.slice(0, end);
|
|
11
|
-
}
|
|
12
9
|
export function imageTag(config) {
|
|
13
10
|
const image = config.image ?? 'cogitator-app';
|
|
14
11
|
return config.registry
|
|
15
|
-
? `${
|
|
12
|
+
? `${trimTrailing(config.registry, '/')}/${image}:latest`
|
|
16
13
|
: `${image}:latest`;
|
|
17
14
|
}
|
|
18
15
|
export function generateDockerCompose(config) {
|
|
16
|
+
const http = servesHttp(config);
|
|
19
17
|
const port = config.port ?? 3000;
|
|
20
18
|
const lines = ['services:'];
|
|
21
19
|
const serviceUrls = new Map();
|
|
@@ -23,10 +21,9 @@ export function generateDockerCompose(config) {
|
|
|
23
21
|
serviceUrls.set('REDIS_URL', COMPOSE_REDIS_URL);
|
|
24
22
|
if (config.services?.postgres)
|
|
25
23
|
serviceUrls.set('DATABASE_URL', COMPOSE_DATABASE_URL);
|
|
26
|
-
const environment = new Map([
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
]);
|
|
24
|
+
const environment = new Map([['NODE_ENV', yamlString('production')]]);
|
|
25
|
+
if (http)
|
|
26
|
+
environment.set('PORT', yamlString(String(port)));
|
|
30
27
|
for (const [key, url] of serviceUrls)
|
|
31
28
|
environment.set(key, yamlString(url));
|
|
32
29
|
for (const [key, value] of Object.entries(config.env ?? {})) {
|
|
@@ -43,16 +40,27 @@ export function generateDockerCompose(config) {
|
|
|
43
40
|
if (config.services?.postgres) {
|
|
44
41
|
dependsOn.push(' postgres:', ' condition: service_healthy');
|
|
45
42
|
}
|
|
43
|
+
const appVolumes = (config.volumes ?? []).map((volume) => ` - ${volumeName(volume)}:${volumeMountPath(volume)}`);
|
|
46
44
|
lines.push(' app:');
|
|
47
45
|
lines.push(' build:');
|
|
48
46
|
lines.push(' context: ..');
|
|
49
47
|
lines.push(' dockerfile: .cogitator/Dockerfile');
|
|
50
48
|
lines.push(` image: ${yamlString(imageTag(config))}`);
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
if (http) {
|
|
50
|
+
lines.push(' ports:');
|
|
51
|
+
lines.push(` - "${port}:${port}"`);
|
|
52
|
+
}
|
|
53
|
+
if (config.hostGateway) {
|
|
54
|
+
lines.push(' extra_hosts:');
|
|
55
|
+
lines.push(' - "host.docker.internal:host-gateway"');
|
|
56
|
+
}
|
|
53
57
|
lines.push(' environment:');
|
|
54
58
|
for (const [key, value] of environment)
|
|
55
59
|
lines.push(` ${key}: ${value}`);
|
|
60
|
+
if (appVolumes.length > 0) {
|
|
61
|
+
lines.push(' volumes:');
|
|
62
|
+
lines.push(...appVolumes);
|
|
63
|
+
}
|
|
56
64
|
lines.push(' restart: unless-stopped');
|
|
57
65
|
if (dependsOn.length > 0) {
|
|
58
66
|
lines.push(' depends_on:');
|
|
@@ -88,7 +96,7 @@ export function generateDockerCompose(config) {
|
|
|
88
96
|
lines.push(' timeout: 3s');
|
|
89
97
|
lines.push(' retries: 3');
|
|
90
98
|
}
|
|
91
|
-
const volumes = [];
|
|
99
|
+
const volumes = (config.volumes ?? []).map((volume) => ` ${volumeName(volume)}:`);
|
|
92
100
|
if (config.services?.redis)
|
|
93
101
|
volumes.push(' redis-data:');
|
|
94
102
|
if (config.services?.postgres)
|
|
@@ -96,7 +104,7 @@ export function generateDockerCompose(config) {
|
|
|
96
104
|
if (volumes.length > 0) {
|
|
97
105
|
lines.push('');
|
|
98
106
|
lines.push('volumes:');
|
|
99
|
-
lines.push(...volumes);
|
|
107
|
+
lines.push(...new Set(volumes));
|
|
100
108
|
}
|
|
101
109
|
return lines.join('\n') + '\n';
|
|
102
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-compose.js","sourceRoot":"","sources":["../../src/templates/docker-compose.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docker-compose.js","sourceRoot":"","sources":["../../src/templates/docker-compose.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { DeployConfig } from '@cogitator-ai/types';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* The package manager a Dockerfile installs with. `yarn` is Yarn 1 (classic),
|
|
4
|
+
* `yarn-berry` is Yarn 2 and later.
|
|
5
|
+
*/
|
|
6
|
+
export type DockerfilePackageManager = 'pnpm' | 'npm' | 'yarn' | 'yarn-berry' | 'bun';
|
|
3
7
|
export interface DockerfileOptions {
|
|
4
8
|
config: DeployConfig;
|
|
5
9
|
hasTypeScript: boolean;
|
|
@@ -7,7 +11,12 @@ export interface DockerfileOptions {
|
|
|
7
11
|
hasLockfile?: boolean;
|
|
8
12
|
hasBuildScript?: boolean;
|
|
9
13
|
startCommand?: string[];
|
|
14
|
+
/** Project files the install step reads, copied with package.json before it runs, directories with a trailing slash */
|
|
15
|
+
installFiles?: string[];
|
|
16
|
+
/** Version from the `packageManager` field of package.json */
|
|
17
|
+
packageManagerVersion?: string;
|
|
10
18
|
}
|
|
11
19
|
export declare const NODE_IMAGE = "node:22-alpine";
|
|
20
|
+
export declare const BUN_IMAGE = "oven/bun:1-alpine";
|
|
12
21
|
export declare function generateDockerfile(options: DockerfileOptions): string;
|
|
13
22
|
//# sourceMappingURL=dockerfile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dockerfile.d.ts","sourceRoot":"","sources":["../../src/templates/dockerfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"dockerfile.d.ts","sourceRoot":"","sources":["../../src/templates/dockerfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC;AAEtF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,uHAAuH;IACvH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8DAA8D;IAC9D,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAC3C,eAAO,MAAM,SAAS,sBAAsB,CAAC;AAgG7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAmDrE"}
|
|
@@ -1,72 +1,114 @@
|
|
|
1
|
-
import { healthPath } from './health.js';
|
|
1
|
+
import { healthPath, servesHttp } from './health.js';
|
|
2
2
|
export const NODE_IMAGE = 'node:22-alpine';
|
|
3
|
-
|
|
3
|
+
export const BUN_IMAGE = 'oven/bun:1-alpine';
|
|
4
|
+
const DEFAULT_INSTALL_FILES = {
|
|
5
|
+
pnpm: ['pnpm-lock.yaml*'],
|
|
6
|
+
npm: ['package-lock.json*'],
|
|
7
|
+
yarn: ['yarn.lock*'],
|
|
8
|
+
'yarn-berry': ['yarn.lock*', '.yarnrc.yml*'],
|
|
9
|
+
bun: ['bun.lock*'],
|
|
10
|
+
};
|
|
11
|
+
function copyInstallFiles(pm, files) {
|
|
12
|
+
if (!files)
|
|
13
|
+
return [`COPY package.json ${DEFAULT_INSTALL_FILES[pm].join(' ')} ./`];
|
|
14
|
+
const directories = files.filter((file) => file.endsWith('/')).map((dir) => dir.slice(0, -1));
|
|
15
|
+
const plain = files.filter((file) => !file.endsWith('/'));
|
|
16
|
+
return [
|
|
17
|
+
`COPY ${['package.json', ...plain].join(' ')} ./`,
|
|
18
|
+
...directories.map((dir) => `COPY ${dir} ./${dir}`),
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
function installSteps(options, pm) {
|
|
22
|
+
const locked = options.hasLockfile ?? true;
|
|
23
|
+
const copy = copyInstallFiles(pm, options.installFiles);
|
|
4
24
|
switch (pm) {
|
|
5
25
|
case 'pnpm':
|
|
6
26
|
return {
|
|
7
|
-
copy
|
|
8
|
-
install: `RUN corepack enable && pnpm install${
|
|
9
|
-
installProd: `RUN corepack enable && pnpm install${
|
|
27
|
+
copy,
|
|
28
|
+
install: `RUN corepack enable && pnpm install${locked ? ' --frozen-lockfile' : ''}`,
|
|
29
|
+
installProd: `RUN corepack enable && pnpm install${locked ? ' --frozen-lockfile' : ''} --prod`,
|
|
10
30
|
build: 'RUN pnpm run build',
|
|
11
31
|
};
|
|
12
32
|
case 'yarn':
|
|
13
33
|
return {
|
|
14
|
-
copy
|
|
15
|
-
install: `RUN corepack enable && yarn install${
|
|
16
|
-
installProd: `RUN corepack enable && yarn install${
|
|
34
|
+
copy,
|
|
35
|
+
install: `RUN corepack enable && yarn install${locked ? ' --frozen-lockfile' : ''}`,
|
|
36
|
+
installProd: `RUN corepack enable && yarn install${locked ? ' --frozen-lockfile' : ''} --production`,
|
|
37
|
+
build: 'RUN yarn run build',
|
|
38
|
+
};
|
|
39
|
+
case 'yarn-berry': {
|
|
40
|
+
const install = `RUN corepack enable && yarn install${locked ? ' --immutable' : ''}`;
|
|
41
|
+
const focusable = Number.parseInt(options.packageManagerVersion ?? '', 10) >= 4;
|
|
42
|
+
return {
|
|
43
|
+
copy,
|
|
44
|
+
install,
|
|
45
|
+
installProd: focusable
|
|
46
|
+
? 'RUN corepack enable && yarn workspaces focus --all --production'
|
|
47
|
+
: install,
|
|
17
48
|
build: 'RUN yarn run build',
|
|
49
|
+
runtimeSetup: 'RUN corepack enable',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
case 'bun':
|
|
53
|
+
return {
|
|
54
|
+
copy,
|
|
55
|
+
install: `RUN bun install${locked ? ' --frozen-lockfile' : ''}`,
|
|
56
|
+
installProd: `RUN bun install${locked ? ' --frozen-lockfile' : ''} --production`,
|
|
57
|
+
build: 'RUN bun run build',
|
|
18
58
|
};
|
|
19
59
|
case 'npm':
|
|
20
60
|
return {
|
|
21
|
-
copy
|
|
22
|
-
install:
|
|
23
|
-
installProd:
|
|
61
|
+
copy,
|
|
62
|
+
install: locked ? 'RUN npm ci' : 'RUN npm install',
|
|
63
|
+
installProd: locked ? 'RUN npm ci --omit=dev' : 'RUN npm install --omit=dev',
|
|
24
64
|
build: 'RUN npm run build',
|
|
25
65
|
};
|
|
26
66
|
}
|
|
27
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* The image's HEALTHCHECK. It probes 127.0.0.1 rather than `localhost`: inside an Alpine image
|
|
70
|
+
* `localhost` resolves to `::1` first, which a server bound to `0.0.0.0` (IPv4 only) refuses,
|
|
71
|
+
* while a dual-stack server answers on 127.0.0.1 too.
|
|
72
|
+
*/
|
|
28
73
|
function healthcheck(config, port) {
|
|
74
|
+
const path = healthPath(config);
|
|
75
|
+
if (!path)
|
|
76
|
+
return undefined;
|
|
29
77
|
const interval = config.health?.interval ?? '30s';
|
|
30
78
|
const timeout = config.health?.timeout ?? '5s';
|
|
31
|
-
return `HEALTHCHECK --interval=${interval} --timeout=${timeout} CMD wget -q --spider http://
|
|
79
|
+
return `HEALTHCHECK --interval=${interval} --timeout=${timeout} CMD wget -q --spider http://127.0.0.1:${port}${path} || exit 1`;
|
|
80
|
+
}
|
|
81
|
+
function lines(...entries) {
|
|
82
|
+
return entries.filter((entry) => typeof entry === 'string').join('\n') + '\n';
|
|
32
83
|
}
|
|
33
84
|
export function generateDockerfile(options) {
|
|
34
85
|
const { config, hasTypeScript } = options;
|
|
35
|
-
const port = config.port ?? 3000;
|
|
36
86
|
const pm = options.packageManager ?? 'pnpm';
|
|
37
|
-
const
|
|
87
|
+
const image = pm === 'bun' ? BUN_IMAGE : NODE_IMAGE;
|
|
88
|
+
const runtime = pm === 'bun' ? 'bun' : 'node';
|
|
89
|
+
const steps = installSteps(options, pm);
|
|
38
90
|
const startCommand = options.startCommand ?? [
|
|
39
|
-
|
|
91
|
+
runtime,
|
|
40
92
|
hasTypeScript ? 'dist/server.js' : 'src/server.js',
|
|
41
93
|
];
|
|
42
|
-
const
|
|
43
|
-
const
|
|
94
|
+
const http = servesHttp(config);
|
|
95
|
+
const port = config.port ?? 3000;
|
|
96
|
+
const env = [
|
|
97
|
+
'ENV NODE_ENV=production',
|
|
98
|
+
http ? `PORT=${port}` : undefined,
|
|
99
|
+
startCommand[0] === 'npm' ? 'NPM_CONFIG_UPDATE_NOTIFIER=false' : undefined,
|
|
100
|
+
]
|
|
101
|
+
.filter((entry) => entry !== undefined)
|
|
102
|
+
.join(' ');
|
|
103
|
+
const runtimeTail = [
|
|
104
|
+
env,
|
|
105
|
+
http ? `EXPOSE ${port}` : undefined,
|
|
106
|
+
http ? healthcheck(config, port) : undefined,
|
|
107
|
+
`CMD ${JSON.stringify(startCommand)}`,
|
|
108
|
+
];
|
|
44
109
|
if (!hasTypeScript) {
|
|
45
|
-
return `FROM ${
|
|
46
|
-
WORKDIR /app
|
|
47
|
-
${steps.copy}
|
|
48
|
-
${steps.installProd}
|
|
49
|
-
COPY . .
|
|
50
|
-
${env}
|
|
51
|
-
EXPOSE ${port}
|
|
52
|
-
${healthcheck(config, port)}
|
|
53
|
-
${cmd}
|
|
54
|
-
`;
|
|
110
|
+
return lines(`FROM ${image}`, 'WORKDIR /app', ...steps.copy, steps.installProd, 'COPY . .', ...runtimeTail);
|
|
55
111
|
}
|
|
56
|
-
|
|
57
|
-
return `FROM ${NODE_IMAGE} AS builder
|
|
58
|
-
WORKDIR /app
|
|
59
|
-
${steps.copy}
|
|
60
|
-
${steps.install}
|
|
61
|
-
COPY . .
|
|
62
|
-
${build}
|
|
63
|
-
FROM ${NODE_IMAGE} AS runtime
|
|
64
|
-
WORKDIR /app
|
|
65
|
-
COPY --from=builder /app ./
|
|
66
|
-
${env}
|
|
67
|
-
EXPOSE ${port}
|
|
68
|
-
${healthcheck(config, port)}
|
|
69
|
-
${cmd}
|
|
70
|
-
`;
|
|
112
|
+
return lines(`FROM ${image} AS builder`, 'WORKDIR /app', ...steps.copy, steps.install, 'COPY . .', options.hasBuildScript === false ? undefined : steps.build, '', `FROM ${image} AS runtime`, 'WORKDIR /app', steps.runtimeSetup, 'COPY --from=builder /app ./', ...runtimeTail);
|
|
71
113
|
}
|
|
72
114
|
//# sourceMappingURL=dockerfile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dockerfile.js","sourceRoot":"","sources":["../../src/templates/dockerfile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"dockerfile.js","sourceRoot":"","sources":["../../src/templates/dockerfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fly-toml.d.ts","sourceRoot":"","sources":["../../src/templates/fly-toml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"fly-toml.d.ts","sourceRoot":"","sources":["../../src/templates/fly-toml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMpD;AAqCD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA0C5D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { volumeMountPath, volumeName } from '../volumes.js';
|
|
2
|
+
import { healthPath, servesHttp } from './health.js';
|
|
2
3
|
export function parseMemoryMb(memory) {
|
|
3
4
|
const gb = /^(\d+(?:\.\d+)?)\s*gb?$/i.exec(memory.trim());
|
|
4
5
|
if (gb)
|
|
@@ -11,41 +12,74 @@ export function parseMemoryMb(memory) {
|
|
|
11
12
|
function tomlString(value) {
|
|
12
13
|
return JSON.stringify(value);
|
|
13
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* The HTTP service of a deployment. A server stops when idle and starts on
|
|
17
|
+
* the next request. A worker keeps running: it serves its port, if any, but
|
|
18
|
+
* the Fly proxy must never stop it, since it works without requests coming in.
|
|
19
|
+
*/
|
|
20
|
+
function httpService(config, port, instances) {
|
|
21
|
+
const worker = config.kind === 'worker';
|
|
22
|
+
return [
|
|
23
|
+
'[http_service]',
|
|
24
|
+
` internal_port = ${port}`,
|
|
25
|
+
' force_https = true',
|
|
26
|
+
` auto_stop_machines = ${tomlString(worker ? 'off' : 'stop')}`,
|
|
27
|
+
' auto_start_machines = true',
|
|
28
|
+
` min_machines_running = ${worker ? Math.max(instances, 1) : instances > 1 ? instances : 0}`,
|
|
29
|
+
'',
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
function healthChecks(config, port, path) {
|
|
33
|
+
return [
|
|
34
|
+
'[checks]',
|
|
35
|
+
' [checks.health]',
|
|
36
|
+
` port = ${port}`,
|
|
37
|
+
' type = "http"',
|
|
38
|
+
` interval = ${tomlString(config.health?.interval ?? '30s')}`,
|
|
39
|
+
` timeout = ${tomlString(config.health?.timeout ?? '5s')}`,
|
|
40
|
+
` path = ${tomlString(path)}`,
|
|
41
|
+
'',
|
|
42
|
+
];
|
|
43
|
+
}
|
|
14
44
|
export function generateFlyToml(config) {
|
|
45
|
+
const http = servesHttp(config);
|
|
15
46
|
const port = config.port ?? 3000;
|
|
16
47
|
const region = config.region ?? 'iad';
|
|
17
48
|
const app = config.image ?? 'cogitator-app';
|
|
18
49
|
const memoryMb = parseMemoryMb(config.resources?.memory ?? '256mb');
|
|
19
50
|
const instances = Math.max(config.instances ?? 1, 0);
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
[
|
|
28
|
-
${
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
[
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
[
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
const path = http ? healthPath(config) : undefined;
|
|
52
|
+
const envEntries = Object.entries({
|
|
53
|
+
NODE_ENV: 'production',
|
|
54
|
+
...(http ? { PORT: String(port) } : {}),
|
|
55
|
+
...config.env,
|
|
56
|
+
});
|
|
57
|
+
const volume = config.volumes?.[0];
|
|
58
|
+
return [
|
|
59
|
+
`app = ${tomlString(app)}`,
|
|
60
|
+
`primary_region = ${tomlString(region)}`,
|
|
61
|
+
'',
|
|
62
|
+
'[build]',
|
|
63
|
+
'',
|
|
64
|
+
'[env]',
|
|
65
|
+
...envEntries.map(([key, value]) => ` ${key} = ${tomlString(value)}`),
|
|
66
|
+
'',
|
|
67
|
+
...(volume
|
|
68
|
+
? [
|
|
69
|
+
'[mounts]',
|
|
70
|
+
` source = ${tomlString(volumeName(volume))}`,
|
|
71
|
+
` destination = ${tomlString(volumeMountPath(volume))}`,
|
|
72
|
+
` initial_size = "${volume.size ?? 1}gb"`,
|
|
73
|
+
'',
|
|
74
|
+
]
|
|
75
|
+
: []),
|
|
76
|
+
...(http ? httpService(config, port, instances) : []),
|
|
77
|
+
...(path ? healthChecks(config, port, path) : []),
|
|
78
|
+
'[[vm]]',
|
|
79
|
+
` memory = "${memoryMb}mb"`,
|
|
80
|
+
' cpu_kind = "shared"',
|
|
81
|
+
` cpus = ${config.resources?.cpu ?? 1}`,
|
|
82
|
+
'',
|
|
83
|
+
].join('\n');
|
|
50
84
|
}
|
|
51
85
|
//# sourceMappingURL=fly-toml.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fly-toml.js","sourceRoot":"","sources":["../../src/templates/fly-toml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"fly-toml.js","sourceRoot":"","sources":["../../src/templates/fly-toml.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import type { DeployConfig } from '@cogitator-ai/types';
|
|
2
2
|
/** Where the server adapters (express, fastify, hono, koa) answer health checks when mounted at their default `/cogitator` base path. */
|
|
3
3
|
export declare const DEFAULT_HEALTH_PATH = "/cogitator/health";
|
|
4
|
-
/**
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* The health check path of `config`, always starting with a slash:
|
|
6
|
+
* `health.path`, else the path the detected server adapter answers on. A
|
|
7
|
+
* worker has none, and neither has a server whose path is unknown (a Next.js
|
|
8
|
+
* app, a plain HTTP framework), which then gets no health check.
|
|
9
|
+
*/
|
|
10
|
+
export declare function healthPath(config: DeployConfig): string | undefined;
|
|
11
|
+
/** Whether the deployment answers HTTP: every server, and a worker that sets a port. */
|
|
12
|
+
export declare function servesHttp(config: DeployConfig): boolean;
|
|
6
13
|
//# sourceMappingURL=health.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/templates/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/templates/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AAEtE,yIAAyI;AACzI,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAUvD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAQnE;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAExD"}
|
package/dist/templates/health.js
CHANGED
|
@@ -1,8 +1,30 @@
|
|
|
1
1
|
/** Where the server adapters (express, fastify, hono, koa) answer health checks when mounted at their default `/cogitator` base path. */
|
|
2
2
|
export const DEFAULT_HEALTH_PATH = '/cogitator/health';
|
|
3
|
-
|
|
3
|
+
const SERVER_HEALTH_PATHS = {
|
|
4
|
+
express: DEFAULT_HEALTH_PATH,
|
|
5
|
+
fastify: DEFAULT_HEALTH_PATH,
|
|
6
|
+
hono: DEFAULT_HEALTH_PATH,
|
|
7
|
+
koa: DEFAULT_HEALTH_PATH,
|
|
8
|
+
tetsu: '/health',
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* The health check path of `config`, always starting with a slash:
|
|
12
|
+
* `health.path`, else the path the detected server adapter answers on. A
|
|
13
|
+
* worker has none, and neither has a server whose path is unknown (a Next.js
|
|
14
|
+
* app, a plain HTTP framework), which then gets no health check.
|
|
15
|
+
*/
|
|
4
16
|
export function healthPath(config) {
|
|
5
|
-
|
|
17
|
+
if ((config.kind ?? 'server') === 'worker')
|
|
18
|
+
return undefined;
|
|
19
|
+
const path = config.health?.path ??
|
|
20
|
+
(config.server ? SERVER_HEALTH_PATHS[config.server] : undefined) ??
|
|
21
|
+
(config.kind === undefined ? DEFAULT_HEALTH_PATH : undefined);
|
|
22
|
+
if (!path)
|
|
23
|
+
return undefined;
|
|
6
24
|
return path.startsWith('/') ? path : `/${path}`;
|
|
7
25
|
}
|
|
26
|
+
/** Whether the deployment answers HTTP: every server, and a worker that sets a port. */
|
|
27
|
+
export function servesHttp(config) {
|
|
28
|
+
return (config.kind ?? 'server') === 'server' || config.port !== undefined;
|
|
29
|
+
}
|
|
8
30
|
//# sourceMappingURL=health.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/templates/health.ts"],"names":[],"mappings":"AAEA,yIAAyI;AACzI,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD,
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/templates/health.ts"],"names":[],"mappings":"AAEA,yIAAyI;AACzI,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD,MAAM,mBAAmB,GAA0C;IACjE,OAAO,EAAE,mBAAmB;IAC5B,OAAO,EAAE,mBAAmB;IAC5B,IAAI,EAAE,mBAAmB;IACzB,GAAG,EAAE,mBAAmB;IACxB,KAAK,EAAE,SAAS;CACjB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC7D,MAAM,IAAI,GACR,MAAM,CAAC,MAAM,EAAE,IAAI;QACnB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAChE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `value` without the `char` characters it ends with. A loop rather than a `/x+$/` regular
|
|
3
|
+
* expression, which backtracks in quadratic time over a long run of `char` followed by
|
|
4
|
+
* anything else.
|
|
5
|
+
*/
|
|
6
|
+
export declare function trimTrailing(value: string, char: string): string;
|
|
7
|
+
/** `value` without the `char` characters it starts or ends with, in linear time. */
|
|
8
|
+
export declare function trimEdges(value: string, char: string): string;
|
|
9
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,oFAAoF;AACpF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `value` without the `char` characters it ends with. A loop rather than a `/x+$/` regular
|
|
3
|
+
* expression, which backtracks in quadratic time over a long run of `char` followed by
|
|
4
|
+
* anything else.
|
|
5
|
+
*/
|
|
6
|
+
export function trimTrailing(value, char) {
|
|
7
|
+
let end = value.length;
|
|
8
|
+
while (end > 0 && value[end - 1] === char)
|
|
9
|
+
end--;
|
|
10
|
+
return value.slice(0, end);
|
|
11
|
+
}
|
|
12
|
+
/** `value` without the `char` characters it starts or ends with, in linear time. */
|
|
13
|
+
export function trimEdges(value, char) {
|
|
14
|
+
let start = 0;
|
|
15
|
+
while (start < value.length && value[start] === char)
|
|
16
|
+
start++;
|
|
17
|
+
return trimTrailing(value.slice(start), char);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,IAAY;IACtD,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI;QAAE,GAAG,EAAE,CAAC;IACjD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,IAAY;IACnD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI;QAAE,KAAK,EAAE,CAAC;IAC9D,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DeployVolume } from '@cogitator-ai/types';
|
|
2
|
+
/** The app directory in the image, where relative paths of the running app resolve. */
|
|
3
|
+
export declare const APP_DIR = "/app";
|
|
4
|
+
/** A Fly and Docker volume name for `volume`: lowercase letters, digits and underscores, 30 at most. */
|
|
5
|
+
export declare function volumeName(volume: DeployVolume): string;
|
|
6
|
+
/** Where `volume` is mounted in the container. */
|
|
7
|
+
export declare function volumeMountPath(volume: DeployVolume): string;
|
|
8
|
+
/** Paths of volumes inside the project, kept out of the image so local data never ships. */
|
|
9
|
+
export declare function projectVolumePaths(volumes: readonly DeployVolume[] | undefined): string[];
|
|
10
|
+
//# sourceMappingURL=volumes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volumes.d.ts","sourceRoot":"","sources":["../src/volumes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,uFAAuF;AACvF,eAAO,MAAM,OAAO,SAAS,CAAC;AAE9B,wGAAwG;AACxG,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAMvD;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAE5D;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAKzF"}
|