@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.
Files changed (51) hide show
  1. package/README.md +66 -31
  2. package/dist/analyzer.d.ts +91 -9
  3. package/dist/analyzer.d.ts.map +1 -1
  4. package/dist/analyzer.js +573 -93
  5. package/dist/analyzer.js.map +1 -1
  6. package/dist/deployer.d.ts +15 -2
  7. package/dist/deployer.d.ts.map +1 -1
  8. package/dist/deployer.js +18 -8
  9. package/dist/deployer.js.map +1 -1
  10. package/dist/generator.d.ts +10 -2
  11. package/dist/generator.d.ts.map +1 -1
  12. package/dist/generator.js +15 -3
  13. package/dist/generator.js.map +1 -1
  14. package/dist/index.d.ts +3 -2
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/providers/artifacts.d.ts.map +1 -1
  19. package/dist/providers/artifacts.js +2 -1
  20. package/dist/providers/artifacts.js.map +1 -1
  21. package/dist/providers/docker.d.ts +17 -0
  22. package/dist/providers/docker.d.ts.map +1 -1
  23. package/dist/providers/docker.js +63 -8
  24. package/dist/providers/docker.js.map +1 -1
  25. package/dist/providers/fly.d.ts +2 -0
  26. package/dist/providers/fly.d.ts.map +1 -1
  27. package/dist/providers/fly.js +43 -2
  28. package/dist/providers/fly.js.map +1 -1
  29. package/dist/templates/docker-compose.d.ts.map +1 -1
  30. package/dist/templates/docker-compose.js +23 -15
  31. package/dist/templates/docker-compose.js.map +1 -1
  32. package/dist/templates/dockerfile.d.ts +31 -2
  33. package/dist/templates/dockerfile.d.ts.map +1 -1
  34. package/dist/templates/dockerfile.js +144 -45
  35. package/dist/templates/dockerfile.js.map +1 -1
  36. package/dist/templates/fly-toml.d.ts.map +1 -1
  37. package/dist/templates/fly-toml.js +65 -31
  38. package/dist/templates/fly-toml.js.map +1 -1
  39. package/dist/templates/health.d.ts +9 -2
  40. package/dist/templates/health.d.ts.map +1 -1
  41. package/dist/templates/health.js +24 -2
  42. package/dist/templates/health.js.map +1 -1
  43. package/dist/utils/text.d.ts +9 -0
  44. package/dist/utils/text.d.ts.map +1 -0
  45. package/dist/utils/text.js +19 -0
  46. package/dist/utils/text.js.map +1 -0
  47. package/dist/volumes.d.ts +10 -0
  48. package/dist/volumes.d.ts.map +1 -0
  49. package/dist/volumes.js +21 -0
  50. package/dist/volumes.js.map +1 -0
  51. package/package.json +6 -4
@@ -1 +1 @@
1
- {"version":3,"file":"fly.js","sourceRoot":"","sources":["../../src/providers/fly.ts"],"names":[],"mappings":"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"}
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;AAExD,eAAO,MAAM,oBAAoB,6DAA6D,CAAC;AAC/F,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAYtD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAKrD;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAsFlE"}
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
- ? `${stripTrailingSlashes(config.registry)}/${image}:latest`
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
- ['NODE_ENV', yamlString('production')],
28
- ['PORT', yamlString(String(port))],
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
- lines.push(' ports:');
52
- lines.push(` - "${port}:${port}"`);
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":"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"}
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
- export type DockerfilePackageManager = 'pnpm' | 'npm' | 'yarn';
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:22-alpine";
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;AAE/D,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;CACzB;AAED,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAyC3C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAyCrE"}
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:22-alpine';
3
- function installSteps(pm, hasLockfile) {
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: 'COPY package.json pnpm-lock.yaml* ./',
8
- install: `RUN corepack enable && pnpm install${hasLockfile ? ' --frozen-lockfile' : ''}`,
9
- installProd: `RUN corepack enable && pnpm install${hasLockfile ? ' --frozen-lockfile' : ''} --prod`,
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
- case 'yarn':
45
+ }
46
+ case 'yarn': {
47
+ const frozen = locked ? ' --frozen-lockfile' : '';
13
48
  return {
14
- copy: 'COPY package.json yarn.lock* .yarnrc.yml* ./',
15
- install: `RUN corepack enable && yarn install${hasLockfile ? ' --frozen-lockfile' : ''}`,
16
- installProd: `RUN corepack enable && yarn install${hasLockfile ? ' --frozen-lockfile' : ''} --production`,
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: 'COPY package.json package-lock.json* ./',
22
- install: hasLockfile ? 'RUN npm ci' : 'RUN npm install',
23
- installProd: hasLockfile ? 'RUN npm ci --omit=dev' : 'RUN npm install --omit=dev',
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://localhost:${port}${healthPath(config)} || exit 1`;
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 steps = installSteps(pm, options.hasLockfile ?? true);
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
- 'node',
127
+ runtime,
40
128
  hasTypeScript ? 'dist/server.js' : 'src/server.js',
41
129
  ];
42
- const cmd = `CMD ${JSON.stringify(startCommand)}`;
43
- const env = `ENV NODE_ENV=production PORT=${port}`;
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 `FROM ${NODE_IMAGE}
46
- WORKDIR /app
47
- ${steps.copy}
48
- ${steps.installProd}
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
- const build = options.hasBuildScript === false ? '' : `${steps.build}\n`;
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
- `;
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":"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"}
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;AAGxD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMpD;AAMD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAsC5D"}
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 { healthPath } from './health.js';
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 envEntries = Object.entries({ NODE_ENV: 'production', PORT: String(port), ...config.env });
21
- const envSection = envEntries.map(([key, value]) => ` ${key} = ${tomlString(value)}`).join('\n');
22
- return `app = ${tomlString(app)}
23
- primary_region = ${tomlString(region)}
24
-
25
- [build]
26
-
27
- [env]
28
- ${envSection}
29
-
30
- [http_service]
31
- internal_port = ${port}
32
- force_https = true
33
- auto_stop_machines = "stop"
34
- auto_start_machines = true
35
- min_machines_running = ${instances > 1 ? instances : 0}
36
-
37
- [checks]
38
- [checks.health]
39
- port = ${port}
40
- type = "http"
41
- interval = ${tomlString(config.health?.interval ?? '30s')}
42
- timeout = ${tomlString(config.health?.timeout ?? '5s')}
43
- path = ${tomlString(healthPath(config))}
44
-
45
- [[vm]]
46
- memory = "${memoryMb}mb"
47
- cpu_kind = "shared"
48
- cpus = ${config.resources?.cpu ?? 1}
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;AAEzC,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,EAAE,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC;IAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACjG,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElG,OAAO,SAAS,UAAU,CAAC,GAAG,CAAC;mBACd,UAAU,CAAC,MAAM,CAAC;;;;;EAKnC,UAAU;;;oBAGQ,IAAI;;;;2BAIG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;;;aAI3C,IAAI;;iBAEA,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,KAAK,CAAC;gBAC7C,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC;aAC7C,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;;;cAG7B,QAAQ;;WAEX,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC;CACpC,CAAC;AACF,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
- /** The health check path for `config`, always starting with a slash. */
5
- export declare function healthPath(config: DeployConfig): string;
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,EAAE,MAAM,qBAAqB,CAAC;AAExD,yIAAyI;AACzI,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAEvD,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAGvD"}
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"}