@cogitator-ai/deploy 0.4.8 → 0.6.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 +91 -9
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +573 -93
- 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 +10 -2
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +15 -3
- 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 +31 -2
- package/dist/templates/dockerfile.d.ts.map +1 -1
- package/dist/templates/dockerfile.js +144 -45
- 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 +6 -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,14 @@
|
|
|
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';
|
|
7
|
+
/** How a Yarn Plug'n'Play project resolves its packages at runtime. */
|
|
8
|
+
export interface PlugAndPlay {
|
|
9
|
+
/** Whether Yarn writes `.pnp.loader.mjs`, which ES modules need to resolve packages. */
|
|
10
|
+
esmLoader: boolean;
|
|
11
|
+
}
|
|
3
12
|
export interface DockerfileOptions {
|
|
4
13
|
config: DeployConfig;
|
|
5
14
|
hasTypeScript: boolean;
|
|
@@ -7,7 +16,27 @@ export interface DockerfileOptions {
|
|
|
7
16
|
hasLockfile?: boolean;
|
|
8
17
|
hasBuildScript?: boolean;
|
|
9
18
|
startCommand?: string[];
|
|
19
|
+
/** Project files the install step reads, copied with package.json before it runs, directories with a trailing slash */
|
|
20
|
+
installFiles?: string[];
|
|
21
|
+
/** Version from the `packageManager` field of package.json */
|
|
22
|
+
packageManagerVersion?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Yarn Plug'n'Play: the package archives are installed into the project's
|
|
25
|
+
* .yarn/cache so they ship in the image (the global cache is a build cache
|
|
26
|
+
* mount), and the app starts with the PnP resolver loaded.
|
|
27
|
+
*/
|
|
28
|
+
plugAndPlay?: PlugAndPlay;
|
|
10
29
|
}
|
|
11
|
-
export declare const NODE_IMAGE = "node:
|
|
30
|
+
export declare const NODE_IMAGE = "node:24-alpine";
|
|
31
|
+
export declare const BUN_IMAGE = "oven/bun:1-alpine";
|
|
32
|
+
/**
|
|
33
|
+
* A production image: dependencies installed from the lockfile with the
|
|
34
|
+
* package manager's cache kept between builds, TypeScript built in a builder
|
|
35
|
+
* stage that then drops its dev dependencies, and a runtime stage that runs as
|
|
36
|
+
* the image's unprivileged user under tini, so signals reach the app and child
|
|
37
|
+
* processes (MCP servers, sandboxes) are reaped. The image follows what runs
|
|
38
|
+
* the app: Bun's image for `bun` start commands, Node's otherwise, with Bun
|
|
39
|
+
* and node-gyp added for a Node app whose package manager is Bun.
|
|
40
|
+
*/
|
|
12
41
|
export declare function generateDockerfile(options: DockerfileOptions): string;
|
|
13
42
|
//# 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,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,wFAAwF;IACxF,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,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;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAC3C,eAAO,MAAM,SAAS,sBAAsB,CAAC;AA6H7C;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CA+ErE"}
|
|
@@ -1,72 +1,171 @@
|
|
|
1
|
-
import { healthPath } from './health.js';
|
|
2
|
-
export const NODE_IMAGE = 'node:
|
|
3
|
-
|
|
1
|
+
import { healthPath, servesHttp } from './health.js';
|
|
2
|
+
export const NODE_IMAGE = 'node:24-alpine';
|
|
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
|
+
/** Where each package manager keeps its download cache, mounted as a BuildKit cache across builds. */
|
|
12
|
+
const CACHE_DIRS = {
|
|
13
|
+
pnpm: '/root/.local/share/pnpm/store',
|
|
14
|
+
npm: '/root/.npm',
|
|
15
|
+
yarn: '/usr/local/share/.cache/yarn',
|
|
16
|
+
'yarn-berry': '/root/.yarn/berry/cache',
|
|
17
|
+
bun: '/root/.bun/install/cache',
|
|
18
|
+
};
|
|
19
|
+
function copyInstallFiles(pm, files) {
|
|
20
|
+
if (!files)
|
|
21
|
+
return [`COPY package.json ${DEFAULT_INSTALL_FILES[pm].join(' ')} ./`];
|
|
22
|
+
const directories = files.filter((file) => file.endsWith('/')).map((dir) => dir.slice(0, -1));
|
|
23
|
+
const plain = files.filter((file) => !file.endsWith('/'));
|
|
24
|
+
return [
|
|
25
|
+
`COPY ${['package.json', ...plain].join(' ')} ./`,
|
|
26
|
+
...directories.map((dir) => `COPY ${dir} ./${dir}`),
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
function cached(pm, command) {
|
|
30
|
+
return `RUN --mount=type=cache,id=${pm},target=${CACHE_DIRS[pm]} ${command}`;
|
|
31
|
+
}
|
|
32
|
+
function installSteps(options, pm) {
|
|
33
|
+
const locked = options.hasLockfile ?? true;
|
|
34
|
+
const copy = copyInstallFiles(pm, options.installFiles);
|
|
4
35
|
switch (pm) {
|
|
5
|
-
case 'pnpm':
|
|
36
|
+
case 'pnpm': {
|
|
37
|
+
const frozen = locked ? ' --frozen-lockfile' : '';
|
|
6
38
|
return {
|
|
7
|
-
copy
|
|
8
|
-
install: `
|
|
9
|
-
installProd: `
|
|
39
|
+
copy,
|
|
40
|
+
install: cached(pm, `pnpm install${frozen}`),
|
|
41
|
+
installProd: cached(pm, `pnpm install${frozen} --prod`),
|
|
42
|
+
prune: cached(pm, 'pnpm prune --prod --ignore-scripts'),
|
|
10
43
|
build: 'RUN pnpm run build',
|
|
11
44
|
};
|
|
12
|
-
|
|
45
|
+
}
|
|
46
|
+
case 'yarn': {
|
|
47
|
+
const frozen = locked ? ' --frozen-lockfile' : '';
|
|
13
48
|
return {
|
|
14
|
-
copy
|
|
15
|
-
install: `
|
|
16
|
-
installProd: `
|
|
49
|
+
copy,
|
|
50
|
+
install: cached(pm, `yarn install${frozen}`),
|
|
51
|
+
installProd: cached(pm, `yarn install${frozen} --production`),
|
|
52
|
+
prune: cached(pm, `yarn install${frozen} --production --ignore-scripts --prefer-offline`),
|
|
17
53
|
build: 'RUN yarn run build',
|
|
18
54
|
};
|
|
55
|
+
}
|
|
56
|
+
case 'yarn-berry': {
|
|
57
|
+
const local = options.plugAndPlay ? 'YARN_ENABLE_GLOBAL_CACHE=false ' : '';
|
|
58
|
+
const install = cached(pm, `${local}yarn install${locked ? ' --immutable' : ''}`);
|
|
59
|
+
const focusable = Number.parseInt(options.packageManagerVersion ?? '', 10) >= 4;
|
|
60
|
+
const focus = cached(pm, `${local}yarn workspaces focus --all --production`);
|
|
61
|
+
const prune = options.plugAndPlay
|
|
62
|
+
? cached(pm, `rm -rf .yarn/cache && ${local}yarn workspaces focus --all --production`)
|
|
63
|
+
: focus;
|
|
64
|
+
return {
|
|
65
|
+
copy,
|
|
66
|
+
install,
|
|
67
|
+
installProd: focusable ? focus : install,
|
|
68
|
+
...(focusable && { prune }),
|
|
69
|
+
build: 'RUN yarn run build',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
case 'bun': {
|
|
73
|
+
const frozen = locked ? ' --frozen-lockfile' : '';
|
|
74
|
+
return {
|
|
75
|
+
copy,
|
|
76
|
+
install: cached(pm, `bun install${frozen}`),
|
|
77
|
+
installProd: cached(pm, `bun install${frozen} --production`),
|
|
78
|
+
prune: cached(pm, `rm -rf node_modules && bun install${frozen} --production`),
|
|
79
|
+
build: 'RUN bun run build',
|
|
80
|
+
};
|
|
81
|
+
}
|
|
19
82
|
case 'npm':
|
|
20
83
|
return {
|
|
21
|
-
copy
|
|
22
|
-
install:
|
|
23
|
-
installProd:
|
|
84
|
+
copy,
|
|
85
|
+
install: cached(pm, locked ? 'npm ci' : 'npm install'),
|
|
86
|
+
installProd: cached(pm, locked ? 'npm ci --omit=dev' : 'npm install --omit=dev'),
|
|
87
|
+
prune: cached(pm, 'npm prune --omit=dev'),
|
|
24
88
|
build: 'RUN npm run build',
|
|
25
89
|
};
|
|
26
90
|
}
|
|
27
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* The image's HEALTHCHECK. It probes 127.0.0.1 rather than `localhost`: inside an Alpine image
|
|
94
|
+
* `localhost` resolves to `::1` first, which a server bound to `0.0.0.0` (IPv4 only) refuses,
|
|
95
|
+
* while a dual-stack server answers on 127.0.0.1 too.
|
|
96
|
+
*/
|
|
28
97
|
function healthcheck(config, port) {
|
|
98
|
+
const path = healthPath(config);
|
|
99
|
+
if (!path)
|
|
100
|
+
return undefined;
|
|
29
101
|
const interval = config.health?.interval ?? '30s';
|
|
30
102
|
const timeout = config.health?.timeout ?? '5s';
|
|
31
|
-
return `HEALTHCHECK --interval=${interval} --timeout=${timeout} CMD wget -q --spider http://
|
|
103
|
+
return `HEALTHCHECK --interval=${interval} --timeout=${timeout} CMD wget -q --spider http://127.0.0.1:${port}${path} || exit 1`;
|
|
104
|
+
}
|
|
105
|
+
function lines(...entries) {
|
|
106
|
+
return entries.filter((entry) => typeof entry === 'string').join('\n') + '\n';
|
|
32
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* A production image: dependencies installed from the lockfile with the
|
|
110
|
+
* package manager's cache kept between builds, TypeScript built in a builder
|
|
111
|
+
* stage that then drops its dev dependencies, and a runtime stage that runs as
|
|
112
|
+
* the image's unprivileged user under tini, so signals reach the app and child
|
|
113
|
+
* processes (MCP servers, sandboxes) are reaped. The image follows what runs
|
|
114
|
+
* the app: Bun's image for `bun` start commands, Node's otherwise, with Bun
|
|
115
|
+
* and node-gyp added for a Node app whose package manager is Bun.
|
|
116
|
+
*/
|
|
33
117
|
export function generateDockerfile(options) {
|
|
34
118
|
const { config, hasTypeScript } = options;
|
|
35
|
-
const port = config.port ?? 3000;
|
|
36
119
|
const pm = options.packageManager ?? 'pnpm';
|
|
37
|
-
const
|
|
120
|
+
const bun = options.startCommand ? options.startCommand[0] === 'bun' : pm === 'bun';
|
|
121
|
+
const image = bun ? BUN_IMAGE : NODE_IMAGE;
|
|
122
|
+
const user = bun ? 'bun' : 'node';
|
|
123
|
+
const runtime = bun ? 'bun' : 'node';
|
|
124
|
+
const bunOnNode = pm === 'bun' && !bun;
|
|
125
|
+
const steps = installSteps(options, pm);
|
|
38
126
|
const startCommand = options.startCommand ?? [
|
|
39
|
-
|
|
127
|
+
runtime,
|
|
40
128
|
hasTypeScript ? 'dist/server.js' : 'src/server.js',
|
|
41
129
|
];
|
|
42
|
-
const
|
|
43
|
-
const
|
|
130
|
+
const http = servesHttp(config);
|
|
131
|
+
const port = config.port ?? 3000;
|
|
132
|
+
const pnpResolver = options.plugAndPlay && pm === 'yarn-berry' && !bun && startCommand[0] !== 'yarn'
|
|
133
|
+
? `NODE_OPTIONS="--require /app/.pnp.cjs${options.plugAndPlay.esmLoader ? ' --experimental-loader file:///app/.pnp.loader.mjs' : ''}"`
|
|
134
|
+
: undefined;
|
|
135
|
+
const env = [
|
|
136
|
+
'ENV NODE_ENV=production',
|
|
137
|
+
http ? `PORT=${port}` : undefined,
|
|
138
|
+
startCommand[0] === 'npm' ? 'NPM_CONFIG_UPDATE_NOTIFIER=false' : undefined,
|
|
139
|
+
pnpResolver,
|
|
140
|
+
]
|
|
141
|
+
.filter((entry) => entry !== undefined)
|
|
142
|
+
.join(' ');
|
|
143
|
+
const corepack = pm === 'pnpm' || pm === 'yarn' || pm === 'yarn-berry';
|
|
144
|
+
const base = [
|
|
145
|
+
`FROM ${image} AS base`,
|
|
146
|
+
'WORKDIR /app',
|
|
147
|
+
corepack ? 'RUN corepack enable' : undefined,
|
|
148
|
+
bunOnNode ? `COPY --from=${BUN_IMAGE} /usr/local/bin/bun /usr/local/bin/bun` : undefined,
|
|
149
|
+
];
|
|
150
|
+
const runtimeStage = (copy) => [
|
|
151
|
+
'FROM base AS runtime',
|
|
152
|
+
'RUN apk add --no-cache tini && chown ' + user + ':' + user + ' /app',
|
|
153
|
+
env,
|
|
154
|
+
...copy,
|
|
155
|
+
`USER ${user}`,
|
|
156
|
+
http ? `EXPOSE ${port}` : undefined,
|
|
157
|
+
http ? healthcheck(config, port) : undefined,
|
|
158
|
+
'ENTRYPOINT ["/sbin/tini", "--"]',
|
|
159
|
+
`CMD ${JSON.stringify(startCommand)}`,
|
|
160
|
+
];
|
|
44
161
|
if (!hasTypeScript) {
|
|
45
|
-
return
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
COPY . .
|
|
50
|
-
${env}
|
|
51
|
-
EXPOSE ${port}
|
|
52
|
-
${healthcheck(config, port)}
|
|
53
|
-
${cmd}
|
|
54
|
-
`;
|
|
162
|
+
return lines('# syntax=docker/dockerfile:1', ...base, '', 'FROM base AS deps', ...steps.copy, steps.installProd, '', ...runtimeStage([
|
|
163
|
+
`COPY --from=deps --chown=${user}:${user} /app ./`,
|
|
164
|
+
`COPY --chown=${user}:${user} . .`,
|
|
165
|
+
]));
|
|
55
166
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
`;
|
|
167
|
+
return lines('# syntax=docker/dockerfile:1', ...base, '', 'FROM base AS builder', bunOnNode
|
|
168
|
+
? 'RUN apk add --no-cache python3 make g++ && npm install -g node-gyp'
|
|
169
|
+
: 'RUN apk add --no-cache python3 make g++', ...steps.copy, steps.install, 'COPY . .', options.hasBuildScript === false ? undefined : steps.build, steps.prune, '', ...runtimeStage([`COPY --from=builder --chown=${user}:${user} /app ./`]));
|
|
71
170
|
}
|
|
72
171
|
//# 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"}
|