trigger.dev 3.0.0-beta.8 → 3.0.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 (231) hide show
  1. package/dist/esm/apiClient.d.ts +190 -0
  2. package/dist/esm/apiClient.js +239 -0
  3. package/dist/esm/apiClient.js.map +1 -0
  4. package/dist/esm/build/buildWorker.d.ts +68 -0
  5. package/dist/esm/build/buildWorker.js +159 -0
  6. package/dist/esm/build/buildWorker.js.map +1 -0
  7. package/dist/esm/build/bundle.d.ts +36 -0
  8. package/dist/esm/build/bundle.js +197 -0
  9. package/dist/esm/build/bundle.js.map +1 -0
  10. package/dist/esm/build/extensions.d.ts +15 -0
  11. package/dist/esm/build/extensions.js +158 -0
  12. package/dist/esm/build/extensions.js.map +1 -0
  13. package/dist/esm/build/externals.d.ts +15 -0
  14. package/dist/esm/build/externals.js +285 -0
  15. package/dist/esm/build/externals.js.map +1 -0
  16. package/dist/esm/build/manifests.d.ts +2 -0
  17. package/dist/esm/build/manifests.js +22 -0
  18. package/dist/esm/build/manifests.js.map +1 -0
  19. package/dist/esm/build/packageModules.d.ts +18 -0
  20. package/dist/esm/build/packageModules.js +84 -0
  21. package/dist/esm/build/packageModules.js.map +1 -0
  22. package/dist/esm/build/plugins.d.ts +6 -0
  23. package/dist/esm/build/plugins.js +67 -0
  24. package/dist/esm/build/plugins.js.map +1 -0
  25. package/dist/esm/build/resolveModule.d.ts +1 -0
  26. package/dist/esm/build/resolveModule.js +9 -0
  27. package/dist/esm/build/resolveModule.js.map +1 -0
  28. package/dist/esm/cli/common.d.ts +30 -0
  29. package/dist/esm/cli/common.js +85 -0
  30. package/dist/esm/cli/common.js.map +1 -0
  31. package/dist/esm/cli/index.d.ts +2 -0
  32. package/dist/esm/cli/index.js +27 -0
  33. package/dist/esm/cli/index.js.map +1 -0
  34. package/dist/esm/commands/deploy.d.ts +5 -0
  35. package/dist/esm/commands/deploy.js +402 -0
  36. package/dist/esm/commands/deploy.js.map +1 -0
  37. package/dist/esm/commands/dev.d.ts +37 -0
  38. package/dist/esm/commands/dev.js +128 -0
  39. package/dist/esm/commands/dev.js.map +1 -0
  40. package/dist/esm/commands/init.d.ts +3 -0
  41. package/dist/esm/commands/init.js +427 -0
  42. package/dist/esm/commands/init.js.map +1 -0
  43. package/dist/esm/commands/list-profiles.d.ts +23 -0
  44. package/dist/esm/commands/list-profiles.js +40 -0
  45. package/dist/esm/commands/list-profiles.js.map +1 -0
  46. package/dist/esm/commands/login.d.ts +28 -0
  47. package/dist/esm/commands/login.js +275 -0
  48. package/dist/esm/commands/login.js.map +1 -0
  49. package/dist/esm/commands/logout.d.ts +23 -0
  50. package/dist/esm/commands/logout.js +28 -0
  51. package/dist/esm/commands/logout.js.map +1 -0
  52. package/dist/esm/commands/update.d.ts +24 -0
  53. package/dist/esm/commands/update.js +221 -0
  54. package/dist/esm/commands/update.js.map +1 -0
  55. package/dist/esm/commands/whoami.d.ts +34 -0
  56. package/dist/esm/commands/whoami.js +70 -0
  57. package/dist/esm/commands/whoami.js.map +1 -0
  58. package/dist/esm/config.d.ts +22 -0
  59. package/dist/esm/config.js +204 -0
  60. package/dist/esm/config.js.map +1 -0
  61. package/dist/esm/consts.d.ts +4 -0
  62. package/dist/esm/consts.js +5 -0
  63. package/dist/esm/consts.js.map +1 -0
  64. package/dist/esm/deploy/buildImage.d.ts +69 -0
  65. package/dist/esm/deploy/buildImage.js +472 -0
  66. package/dist/esm/deploy/buildImage.js.map +1 -0
  67. package/dist/esm/deploy/logs.d.ts +19 -0
  68. package/dist/esm/deploy/logs.js +96 -0
  69. package/dist/esm/deploy/logs.js.map +1 -0
  70. package/dist/esm/dev/backgroundWorker.d.ts +114 -0
  71. package/dist/esm/dev/backgroundWorker.js +412 -0
  72. package/dist/esm/dev/backgroundWorker.js.map +1 -0
  73. package/dist/esm/dev/devOutput.d.ts +9 -0
  74. package/dist/esm/dev/devOutput.js +137 -0
  75. package/dist/esm/dev/devOutput.js.map +1 -0
  76. package/dist/esm/dev/devSession.d.ts +17 -0
  77. package/dist/esm/dev/devSession.js +156 -0
  78. package/dist/esm/dev/devSession.js.map +1 -0
  79. package/dist/esm/dev/workerRuntime.d.ts +16 -0
  80. package/dist/esm/dev/workerRuntime.js +258 -0
  81. package/dist/esm/dev/workerRuntime.js.map +1 -0
  82. package/dist/esm/entryPoints/deploy-index-controller.d.ts +1 -0
  83. package/dist/esm/entryPoints/deploy-index-controller.js +85 -0
  84. package/dist/esm/entryPoints/deploy-index-controller.js.map +1 -0
  85. package/dist/esm/entryPoints/deploy-index-worker.d.ts +1 -0
  86. package/dist/esm/entryPoints/deploy-index-worker.js +104 -0
  87. package/dist/esm/entryPoints/deploy-index-worker.js.map +1 -0
  88. package/dist/esm/entryPoints/deploy-run-controller.d.ts +1 -0
  89. package/dist/esm/entryPoints/deploy-run-controller.js +996 -0
  90. package/dist/esm/entryPoints/deploy-run-controller.js.map +1 -0
  91. package/dist/esm/entryPoints/deploy-run-worker.d.ts +1 -0
  92. package/dist/esm/entryPoints/deploy-run-worker.js +297 -0
  93. package/dist/esm/entryPoints/deploy-run-worker.js.map +1 -0
  94. package/dist/esm/entryPoints/dev-index-worker.d.ts +1 -0
  95. package/dist/esm/entryPoints/dev-index-worker.js +104 -0
  96. package/dist/esm/entryPoints/dev-index-worker.js.map +1 -0
  97. package/dist/esm/entryPoints/dev-run-worker.d.ts +1 -0
  98. package/dist/esm/entryPoints/dev-run-worker.js +254 -0
  99. package/dist/esm/entryPoints/dev-run-worker.js.map +1 -0
  100. package/dist/esm/entryPoints/loader.d.ts +1 -0
  101. package/dist/esm/entryPoints/loader.js +16 -0
  102. package/dist/esm/entryPoints/loader.js.map +1 -0
  103. package/dist/esm/executions/taskRunProcess.d.ts +115 -0
  104. package/dist/esm/executions/taskRunProcess.js +254 -0
  105. package/dist/esm/executions/taskRunProcess.js.map +1 -0
  106. package/dist/esm/imports/magicast.d.ts +2 -0
  107. package/dist/esm/imports/magicast.js +5 -0
  108. package/dist/esm/imports/magicast.js.map +1 -0
  109. package/dist/esm/imports/xdg-app-paths.d.ts +2 -0
  110. package/dist/esm/imports/xdg-app-paths.js +3 -0
  111. package/dist/esm/imports/xdg-app-paths.js.map +1 -0
  112. package/dist/{index.d.ts → esm/index.d.ts} +1 -0
  113. package/dist/esm/index.js +17 -0
  114. package/dist/esm/index.js.map +1 -0
  115. package/dist/esm/indexing/indexWorkerManifest.d.ts +85 -0
  116. package/dist/esm/indexing/indexWorkerManifest.js +76 -0
  117. package/dist/esm/indexing/indexWorkerManifest.js.map +1 -0
  118. package/dist/esm/indexing/registerTasks.d.ts +2 -0
  119. package/dist/esm/indexing/registerTasks.js +62 -0
  120. package/dist/esm/indexing/registerTasks.js.map +1 -0
  121. package/dist/esm/package.json +3 -0
  122. package/dist/esm/runtimes/bun.d.ts +2 -0
  123. package/dist/esm/runtimes/bun.js +11 -0
  124. package/dist/esm/runtimes/bun.js.map +1 -0
  125. package/dist/esm/shims/esm.d.ts +1 -0
  126. package/dist/esm/shims/esm.js +9 -0
  127. package/dist/esm/shims/esm.js.map +1 -0
  128. package/dist/esm/sourceDir.d.ts +1 -0
  129. package/dist/esm/sourceDir.js +4 -0
  130. package/dist/esm/sourceDir.js.map +1 -0
  131. package/dist/esm/telemetry/tracing.d.ts +3 -0
  132. package/dist/esm/telemetry/tracing.js +58 -0
  133. package/dist/esm/telemetry/tracing.js.map +1 -0
  134. package/dist/esm/types.d.ts +6 -0
  135. package/dist/esm/types.js +2 -0
  136. package/dist/esm/types.js.map +1 -0
  137. package/dist/esm/utilities/assertExhaustive.d.ts +1 -0
  138. package/dist/esm/utilities/assertExhaustive.js +4 -0
  139. package/dist/esm/utilities/assertExhaustive.js.map +1 -0
  140. package/dist/esm/utilities/buildManifest.d.ts +2 -0
  141. package/dist/esm/utilities/buildManifest.js +9 -0
  142. package/dist/esm/utilities/buildManifest.js.map +1 -0
  143. package/dist/esm/utilities/cliOutput.d.ts +20 -0
  144. package/dist/esm/utilities/cliOutput.js +88 -0
  145. package/dist/esm/utilities/cliOutput.js.map +1 -0
  146. package/dist/esm/utilities/configFiles.d.ts +29 -0
  147. package/dist/esm/utilities/configFiles.js +65 -0
  148. package/dist/esm/utilities/configFiles.js.map +1 -0
  149. package/dist/esm/utilities/createFileFromTemplate.d.ts +16 -0
  150. package/dist/esm/utilities/createFileFromTemplate.js +50 -0
  151. package/dist/esm/utilities/createFileFromTemplate.js.map +1 -0
  152. package/dist/esm/utilities/deployErrors.d.ts +19 -0
  153. package/dist/esm/utilities/deployErrors.js +117 -0
  154. package/dist/esm/utilities/deployErrors.js.map +1 -0
  155. package/dist/esm/utilities/dotEnv.d.ts +4 -0
  156. package/dist/esm/utilities/dotEnv.js +28 -0
  157. package/dist/esm/utilities/dotEnv.js.map +1 -0
  158. package/dist/esm/utilities/eventBus.d.ts +14 -0
  159. package/dist/esm/utilities/eventBus.js +3 -0
  160. package/dist/esm/utilities/eventBus.js.map +1 -0
  161. package/dist/esm/utilities/fileSystem.d.ts +12 -0
  162. package/dist/esm/utilities/fileSystem.js +81 -0
  163. package/dist/esm/utilities/fileSystem.js.map +1 -0
  164. package/dist/esm/utilities/getApiKeyType.d.ts +13 -0
  165. package/dist/esm/utilities/getApiKeyType.js +44 -0
  166. package/dist/esm/utilities/getApiKeyType.js.map +1 -0
  167. package/dist/esm/utilities/initialBanner.d.ts +4 -0
  168. package/dist/esm/utilities/initialBanner.js +82 -0
  169. package/dist/esm/utilities/initialBanner.js.map +1 -0
  170. package/dist/esm/utilities/keyValueBy.d.ts +8 -0
  171. package/dist/esm/utilities/keyValueBy.js +19 -0
  172. package/dist/esm/utilities/keyValueBy.js.map +1 -0
  173. package/dist/esm/utilities/links.d.ts +9 -0
  174. package/dist/esm/utilities/links.js +10 -0
  175. package/dist/esm/utilities/links.js.map +1 -0
  176. package/dist/esm/utilities/linux.d.ts +1 -0
  177. package/dist/esm/utilities/linux.js +24 -0
  178. package/dist/esm/utilities/linux.js.map +1 -0
  179. package/dist/esm/utilities/logger.d.ts +40 -0
  180. package/dist/esm/utilities/logger.js +109 -0
  181. package/dist/esm/utilities/logger.js.map +1 -0
  182. package/dist/esm/utilities/normalizeImportPath.d.ts +1 -0
  183. package/dist/esm/utilities/normalizeImportPath.js +5 -0
  184. package/dist/esm/utilities/normalizeImportPath.js.map +1 -0
  185. package/dist/esm/utilities/obfuscateApiKey.d.ts +1 -0
  186. package/dist/esm/utilities/obfuscateApiKey.js +5 -0
  187. package/dist/esm/utilities/obfuscateApiKey.js.map +1 -0
  188. package/dist/esm/utilities/parseNameAndPath.d.ts +2 -0
  189. package/dist/esm/utilities/parseNameAndPath.js +10 -0
  190. package/dist/esm/utilities/parseNameAndPath.js.map +1 -0
  191. package/dist/esm/utilities/resolveInternalFilePath.d.ts +1 -0
  192. package/dist/esm/utilities/resolveInternalFilePath.js +8 -0
  193. package/dist/esm/utilities/resolveInternalFilePath.js.map +1 -0
  194. package/dist/esm/utilities/runtimeCheck.d.ts +8 -0
  195. package/dist/esm/utilities/runtimeCheck.js +52 -0
  196. package/dist/esm/utilities/runtimeCheck.js.map +1 -0
  197. package/dist/esm/utilities/safeJsonParse.d.ts +1 -0
  198. package/dist/esm/utilities/safeJsonParse.js +12 -0
  199. package/dist/esm/utilities/safeJsonParse.js.map +1 -0
  200. package/dist/esm/utilities/sanitizeEnvVars.d.ts +3 -0
  201. package/dist/esm/utilities/sanitizeEnvVars.js +4 -0
  202. package/dist/esm/utilities/sanitizeEnvVars.js.map +1 -0
  203. package/dist/esm/utilities/session.d.ts +33 -0
  204. package/dist/esm/utilities/session.js +82 -0
  205. package/dist/esm/utilities/session.js.map +1 -0
  206. package/dist/esm/utilities/sourceFiles.d.ts +12 -0
  207. package/dist/esm/utilities/sourceFiles.js +76 -0
  208. package/dist/esm/utilities/sourceFiles.js.map +1 -0
  209. package/dist/esm/utilities/taskFiles.d.ts +6 -0
  210. package/dist/esm/utilities/taskFiles.js +69 -0
  211. package/dist/esm/utilities/taskFiles.js.map +1 -0
  212. package/dist/esm/utilities/tempDirectories.d.ts +16 -0
  213. package/dist/esm/utilities/tempDirectories.js +27 -0
  214. package/dist/esm/utilities/tempDirectories.js.map +1 -0
  215. package/dist/esm/utilities/windows.d.ts +7 -0
  216. package/dist/esm/utilities/windows.js +21 -0
  217. package/dist/esm/utilities/windows.js.map +1 -0
  218. package/dist/esm/version.d.ts +1 -0
  219. package/dist/esm/version.js +2 -0
  220. package/dist/esm/version.js.map +1 -0
  221. package/package.json +85 -84
  222. package/dist/Containerfile.prod +0 -39
  223. package/dist/index.js +0 -5963
  224. package/dist/index.js.map +0 -1
  225. package/dist/templates/examples/simple.ts.template +0 -14
  226. package/dist/templates/trigger.config.ts.template +0 -16
  227. package/dist/workers/dev/worker-facade.js +0 -187
  228. package/dist/workers/dev/worker-setup.js +0 -40
  229. package/dist/workers/prod/entry-point.js +0 -1146
  230. package/dist/workers/prod/worker-facade.js +0 -193
  231. package/dist/workers/prod/worker-setup.js +0 -35
@@ -0,0 +1,472 @@
1
+ import { join } from "node:path";
2
+ import { createTempDir, writeJSONFile } from "../utilities/fileSystem.js";
3
+ import { logger } from "../utilities/logger.js";
4
+ import { depot } from "@depot/cli";
5
+ import { x } from "tinyexec";
6
+ export async function buildImage(options) {
7
+ const { selfHosted, buildPlatform, noCache, push, registry, loadImage, registryHost, authAccessToken, imageTag, deploymentId, deploymentVersion, contentHash, externalBuildId, externalBuildToken, externalBuildProjectId, compilationPath, projectId, projectRef, extraCACerts, apiUrl, apiKey, buildEnvVars, } = options;
8
+ if (selfHosted) {
9
+ return selfHostedBuildImage({
10
+ registryHost: registryHost,
11
+ imageTag: imageTag,
12
+ cwd: compilationPath,
13
+ projectId: projectId,
14
+ deploymentId: deploymentId,
15
+ deploymentVersion: deploymentVersion,
16
+ contentHash: contentHash,
17
+ projectRef: projectRef,
18
+ buildPlatform: buildPlatform,
19
+ pushImage: push,
20
+ selfHostedRegistry: !!registry,
21
+ noCache: noCache,
22
+ extraCACerts: extraCACerts,
23
+ apiUrl,
24
+ apiKey,
25
+ buildEnvVars,
26
+ });
27
+ }
28
+ if (!externalBuildId || !externalBuildToken || !externalBuildProjectId) {
29
+ throw new Error("Failed to initialize deployment. The deployment does not have any external build data. To deploy this project, you must use the --self-hosted flag to build and push the image yourself.");
30
+ }
31
+ return depotBuildImage({
32
+ registryHost,
33
+ auth: authAccessToken,
34
+ imageTag,
35
+ buildId: externalBuildId,
36
+ buildToken: externalBuildToken,
37
+ buildProjectId: externalBuildProjectId,
38
+ cwd: compilationPath,
39
+ projectId,
40
+ deploymentId,
41
+ deploymentVersion,
42
+ contentHash,
43
+ projectRef,
44
+ loadImage,
45
+ buildPlatform,
46
+ noCache,
47
+ extraCACerts,
48
+ apiUrl,
49
+ apiKey,
50
+ buildEnvVars,
51
+ });
52
+ }
53
+ async function depotBuildImage(options) {
54
+ // Step 3: Ensure we are "logged in" to our registry by writing to $HOME/.docker/config.json
55
+ // TODO: make sure this works on windows
56
+ const dockerConfigDir = await ensureLoggedIntoDockerRegistry(options.registryHost, {
57
+ username: "trigger",
58
+ password: options.auth,
59
+ });
60
+ const buildArgs = Object.entries(options.buildEnvVars || {})
61
+ .filter(([key, value]) => value)
62
+ .flatMap(([key, value]) => ["--build-arg", `${key}=${value}`]);
63
+ const args = [
64
+ "build",
65
+ "-f",
66
+ "Containerfile",
67
+ options.noCache ? "--no-cache" : undefined,
68
+ "--platform",
69
+ options.buildPlatform,
70
+ "--provenance",
71
+ "false",
72
+ "--build-arg",
73
+ `TRIGGER_PROJECT_ID=${options.projectId}`,
74
+ "--build-arg",
75
+ `TRIGGER_DEPLOYMENT_ID=${options.deploymentId}`,
76
+ "--build-arg",
77
+ `TRIGGER_DEPLOYMENT_VERSION=${options.deploymentVersion}`,
78
+ "--build-arg",
79
+ `TRIGGER_CONTENT_HASH=${options.contentHash}`,
80
+ "--build-arg",
81
+ `TRIGGER_PROJECT_REF=${options.projectRef}`,
82
+ "--build-arg",
83
+ `TRIGGER_API_URL=${options.apiUrl}`,
84
+ "--build-arg",
85
+ `TRIGGER_SECRET_KEY=${options.apiKey}`,
86
+ ...(buildArgs || []),
87
+ ...(options.extraCACerts ? ["--build-arg", `NODE_EXTRA_CA_CERTS=${options.extraCACerts}`] : []),
88
+ "--progress",
89
+ "plain",
90
+ "-t",
91
+ `${options.registryHost}/${options.imageTag}`,
92
+ ".",
93
+ "--push",
94
+ options.loadImage ? "--load" : undefined,
95
+ ].filter(Boolean);
96
+ logger.debug(`depot ${args.join(" ")}`);
97
+ // Step 4: Build and push the image
98
+ const childProcess = depot(args, {
99
+ cwd: options.cwd,
100
+ env: {
101
+ DEPOT_BUILD_ID: options.buildId,
102
+ DEPOT_TOKEN: options.buildToken,
103
+ DEPOT_PROJECT_ID: options.buildProjectId,
104
+ DEPOT_NO_SUMMARY_LINK: "1",
105
+ DEPOT_NO_UPDATE_NOTIFIER: "1",
106
+ DOCKER_CONFIG: dockerConfigDir,
107
+ },
108
+ });
109
+ const errors = [];
110
+ try {
111
+ const processCode = await new Promise((res, rej) => {
112
+ // For some reason everything is output on stderr, not stdout
113
+ childProcess.stderr?.on("data", (data) => {
114
+ const text = data.toString();
115
+ // Emitted data chunks can contain multiple lines. Remove empty lines.
116
+ const lines = text.split("\n").filter(Boolean);
117
+ errors.push(...lines);
118
+ logger.debug(text);
119
+ });
120
+ childProcess.on("error", (e) => rej(e));
121
+ childProcess.on("close", (code) => res(code));
122
+ });
123
+ const logs = extractLogs(errors);
124
+ if (processCode !== 0) {
125
+ return {
126
+ ok: false,
127
+ error: `Error building image`,
128
+ logs,
129
+ };
130
+ }
131
+ const digest = extractImageDigest(errors);
132
+ return {
133
+ ok: true,
134
+ image: options.imageTag,
135
+ logs,
136
+ digest,
137
+ };
138
+ }
139
+ catch (e) {
140
+ return {
141
+ ok: false,
142
+ error: e instanceof Error ? e.message : JSON.stringify(e),
143
+ logs: extractLogs(errors),
144
+ };
145
+ }
146
+ }
147
+ async function selfHostedBuildImage(options) {
148
+ const imageRef = `${options.registryHost ? `${options.registryHost}/` : ""}${options.imageTag}`;
149
+ const buildArgs = Object.entries(options.buildEnvVars || {})
150
+ .filter(([key, value]) => value)
151
+ .flatMap(([key, value]) => ["--build-arg", `${key}=${value}`]);
152
+ const args = [
153
+ "build",
154
+ "-f",
155
+ "Containerfile",
156
+ options.noCache ? "--no-cache" : undefined,
157
+ "--platform",
158
+ options.buildPlatform,
159
+ "--build-arg",
160
+ `TRIGGER_PROJECT_ID=${options.projectId}`,
161
+ "--build-arg",
162
+ `TRIGGER_DEPLOYMENT_ID=${options.deploymentId}`,
163
+ "--build-arg",
164
+ `TRIGGER_DEPLOYMENT_VERSION=${options.deploymentVersion}`,
165
+ "--build-arg",
166
+ `TRIGGER_CONTENT_HASH=${options.contentHash}`,
167
+ "--build-arg",
168
+ `TRIGGER_PROJECT_REF=${options.projectRef}`,
169
+ "--build-arg",
170
+ `TRIGGER_API_URL=${options.apiUrl}`,
171
+ "--build-arg",
172
+ `TRIGGER_SECRET_KEY=${options.apiKey}`,
173
+ ...(buildArgs || []),
174
+ ...(options.extraCACerts ? ["--build-arg", `NODE_EXTRA_CA_CERTS=${options.extraCACerts}`] : []),
175
+ "--progress",
176
+ "plain",
177
+ "-t",
178
+ imageRef,
179
+ ".", // The build context
180
+ ].filter(Boolean);
181
+ logger.debug(`docker ${args.join(" ")}`, {
182
+ cwd: options.cwd,
183
+ });
184
+ const errors = [];
185
+ let digest;
186
+ // Build the image
187
+ const buildProcess = x("docker", args, {
188
+ nodeOptions: { cwd: options.cwd },
189
+ });
190
+ for await (const line of buildProcess) {
191
+ // line will be from stderr/stdout in the order you'd see it in a term
192
+ errors.push(line);
193
+ logger.debug(line);
194
+ }
195
+ if (buildProcess.exitCode !== 0) {
196
+ return {
197
+ ok: false,
198
+ error: "Error building image",
199
+ logs: extractLogs(errors),
200
+ };
201
+ }
202
+ digest = extractImageDigest(errors);
203
+ if (options.selfHostedRegistry || options.pushImage) {
204
+ const pushArgs = ["push", imageRef].filter(Boolean);
205
+ logger.debug(`docker ${pushArgs.join(" ")}`);
206
+ // Push the image
207
+ const pushProcess = x("docker", pushArgs, {
208
+ nodeOptions: { cwd: options.cwd },
209
+ });
210
+ for await (const line of pushProcess) {
211
+ logger.debug(line);
212
+ }
213
+ if (pushProcess.exitCode !== 0) {
214
+ return {
215
+ ok: false,
216
+ error: "Error pushing image",
217
+ logs: extractLogs(errors),
218
+ };
219
+ }
220
+ }
221
+ return {
222
+ ok: true,
223
+ image: options.imageTag,
224
+ digest,
225
+ logs: extractLogs(errors),
226
+ };
227
+ }
228
+ async function ensureLoggedIntoDockerRegistry(registryHost, auth) {
229
+ const tmpDir = await createTempDir();
230
+ // Read the current docker config
231
+ const dockerConfigPath = join(tmpDir, "config.json");
232
+ await writeJSONFile(dockerConfigPath, {
233
+ auths: {
234
+ [registryHost]: {
235
+ auth: Buffer.from(`${auth.username}:${auth.password}`).toString("base64"),
236
+ },
237
+ },
238
+ });
239
+ logger.debug(`Writing docker config to ${dockerConfigPath}`);
240
+ return tmpDir;
241
+ }
242
+ function extractLogs(outputs) {
243
+ // Remove empty lines
244
+ const cleanedOutputs = outputs.map((line) => line.trim()).filter((line) => line !== "");
245
+ return cleanedOutputs.map((line) => line.trim()).join("\n");
246
+ }
247
+ function extractImageDigest(outputs) {
248
+ const imageDigestRegex = /pushing manifest for .+(?<digest>sha256:[a-f0-9]{64})/;
249
+ for (const line of outputs) {
250
+ const imageDigestMatch = line.match(imageDigestRegex);
251
+ const digest = imageDigestMatch?.groups?.digest;
252
+ if (digest) {
253
+ return digest;
254
+ }
255
+ }
256
+ return;
257
+ }
258
+ const DEFAULT_PACKAGES = ["busybox", "ca-certificates", "dumb-init", "git", "openssl"];
259
+ export async function generateContainerfile(options) {
260
+ switch (options.runtime) {
261
+ case "node": {
262
+ return await generateNodeContainerfile(options);
263
+ }
264
+ case "bun": {
265
+ return await generateBunContainerfile(options);
266
+ }
267
+ }
268
+ }
269
+ async function generateBunContainerfile(options) {
270
+ const buildArgs = Object.entries(options.build.env || {})
271
+ .flatMap(([key]) => `ARG ${key}`)
272
+ .join("\n");
273
+ const buildEnvVars = Object.entries(options.build.env || {})
274
+ .flatMap(([key]) => `ENV ${key}=$${key}`)
275
+ .join("\n");
276
+ const postInstallCommands = (options.build.commands || []).map((cmd) => `RUN ${cmd}`).join("\n");
277
+ const baseInstructions = (options.image?.instructions || []).join("\n");
278
+ const packages = Array.from(new Set(DEFAULT_PACKAGES.concat(options.image?.pkgs || []))).join(" ");
279
+ return `
280
+ FROM imbios/bun-node:22-debian AS base
281
+
282
+ ${baseInstructions}
283
+
284
+ ENV DEBIAN_FRONTEND=noninteractive
285
+ RUN apt-get update && apt-get --fix-broken install -y && apt-get install -y --no-install-recommends ${packages} && apt-get clean && rm -rf /var/lib/apt/lists/*
286
+
287
+ FROM base AS build
288
+
289
+ RUN apt-get update && apt-get install -y --no-install-recommends \
290
+ python3 make g++ && \
291
+ apt-get clean && rm -rf /var/lib/apt/lists/*
292
+
293
+ USER bun
294
+ WORKDIR /app
295
+
296
+ ${buildArgs}
297
+
298
+ ${buildEnvVars}
299
+
300
+ COPY --chown=bun:bun package.json ./
301
+ RUN bun install --production --no-save
302
+
303
+ # Now copy all the files
304
+ # IMPORTANT: Do this after running npm install because npm i will wipe out the node_modules directory
305
+ COPY --chown=bun:bun . .
306
+
307
+ ${postInstallCommands}
308
+
309
+ from build as indexer
310
+
311
+ USER bun
312
+ WORKDIR /app
313
+
314
+ ARG TRIGGER_PROJECT_ID
315
+ ARG TRIGGER_DEPLOYMENT_ID
316
+ ARG TRIGGER_DEPLOYMENT_VERSION
317
+ ARG TRIGGER_CONTENT_HASH
318
+ ARG TRIGGER_PROJECT_REF
319
+ ARG NODE_EXTRA_CA_CERTS
320
+ ARG TRIGGER_SECRET_KEY
321
+ ARG TRIGGER_API_URL
322
+
323
+ ENV TRIGGER_PROJECT_ID=\${TRIGGER_PROJECT_ID} \
324
+ TRIGGER_DEPLOYMENT_ID=\${TRIGGER_DEPLOYMENT_ID} \
325
+ TRIGGER_DEPLOYMENT_VERSION=\${TRIGGER_DEPLOYMENT_VERSION} \
326
+ TRIGGER_PROJECT_REF=\${TRIGGER_PROJECT_REF} \
327
+ TRIGGER_CONTENT_HASH=\${TRIGGER_CONTENT_HASH} \
328
+ TRIGGER_SECRET_KEY=\${TRIGGER_SECRET_KEY} \
329
+ TRIGGER_API_URL=\${TRIGGER_API_URL} \
330
+ NODE_EXTRA_CA_CERTS=\${NODE_EXTRA_CA_CERTS} \
331
+ NODE_ENV=production
332
+
333
+ # Run the indexer
334
+ RUN bun run ${options.indexScript}
335
+
336
+ # Development or production stage builds upon the base stage
337
+ FROM base AS final
338
+
339
+ USER bun
340
+ WORKDIR /app
341
+
342
+ ARG TRIGGER_PROJECT_ID
343
+ ARG TRIGGER_DEPLOYMENT_ID
344
+ ARG TRIGGER_DEPLOYMENT_VERSION
345
+ ARG TRIGGER_CONTENT_HASH
346
+ ARG TRIGGER_PROJECT_REF
347
+ ARG NODE_EXTRA_CA_CERTS
348
+
349
+ ENV TRIGGER_PROJECT_ID=\${TRIGGER_PROJECT_ID} \
350
+ TRIGGER_DEPLOYMENT_ID=\${TRIGGER_DEPLOYMENT_ID} \
351
+ TRIGGER_DEPLOYMENT_VERSION=\${TRIGGER_DEPLOYMENT_VERSION} \
352
+ TRIGGER_CONTENT_HASH=\${TRIGGER_CONTENT_HASH} \
353
+ TRIGGER_PROJECT_REF=\${TRIGGER_PROJECT_REF} \
354
+ NODE_EXTRA_CA_CERTS=\${NODE_EXTRA_CA_CERTS} \
355
+ NODE_ENV=production
356
+
357
+ # Copy the files from the build stage
358
+ COPY --from=build --chown=bun:bun /app ./
359
+
360
+ # Copy the index.json file from the indexer stage
361
+ COPY --from=indexer --chown=bun:bun /app/index.json ./
362
+
363
+ ENTRYPOINT [ "dumb-init", "node", "${options.entrypoint}" ]
364
+ CMD []
365
+ `;
366
+ }
367
+ async function generateNodeContainerfile(options) {
368
+ const buildArgs = Object.entries(options.build.env || {})
369
+ .flatMap(([key]) => `ARG ${key}`)
370
+ .join("\n");
371
+ const buildEnvVars = Object.entries(options.build.env || {})
372
+ .flatMap(([key]) => `ENV ${key}=$${key}`)
373
+ .join("\n");
374
+ const postInstallCommands = (options.build.commands || []).map((cmd) => `RUN ${cmd}`).join("\n");
375
+ const baseInstructions = (options.image?.instructions || []).join("\n");
376
+ const packages = Array.from(new Set(DEFAULT_PACKAGES.concat(options.image?.pkgs || []))).join(" ");
377
+ return `
378
+ FROM node:21-bookworm-slim@sha256:99afef5df7400a8d118e0504576d32ca700de5034c4f9271d2ff7c91cc12d170 AS base
379
+
380
+ ${baseInstructions}
381
+
382
+ ENV DEBIAN_FRONTEND=noninteractive
383
+ RUN apt-get update && apt-get --fix-broken install -y && apt-get install -y --no-install-recommends ${packages} && apt-get clean && rm -rf /var/lib/apt/lists/*
384
+
385
+ FROM base AS build
386
+
387
+ # Install build dependencies
388
+ RUN apt-get update && apt-get install -y --no-install-recommends \
389
+ python3 make g++ && \
390
+ apt-get clean && rm -rf /var/lib/apt/lists/*
391
+
392
+ USER node
393
+ WORKDIR /app
394
+
395
+ ${buildArgs}
396
+
397
+ ${buildEnvVars}
398
+
399
+ ENV NODE_ENV=production
400
+ ENV NPM_CONFIG_UPDATE_NOTIFIER=false
401
+
402
+ COPY --chown=node:node package.json ./
403
+ RUN npm i --no-audit --no-fund --no-save --no-package-lock
404
+
405
+ # Now copy all the files
406
+ # IMPORTANT: Do this after running npm install because npm i will wipe out the node_modules directory
407
+ COPY --chown=node:node . .
408
+
409
+ ${postInstallCommands}
410
+
411
+ from build as indexer
412
+
413
+ USER node
414
+ WORKDIR /app
415
+
416
+ ARG TRIGGER_PROJECT_ID
417
+ ARG TRIGGER_DEPLOYMENT_ID
418
+ ARG TRIGGER_DEPLOYMENT_VERSION
419
+ ARG TRIGGER_CONTENT_HASH
420
+ ARG TRIGGER_PROJECT_REF
421
+ ARG NODE_EXTRA_CA_CERTS
422
+ ARG TRIGGER_SECRET_KEY
423
+ ARG TRIGGER_API_URL
424
+
425
+ ENV TRIGGER_PROJECT_ID=\${TRIGGER_PROJECT_ID} \
426
+ TRIGGER_DEPLOYMENT_ID=\${TRIGGER_DEPLOYMENT_ID} \
427
+ TRIGGER_DEPLOYMENT_VERSION=\${TRIGGER_DEPLOYMENT_VERSION} \
428
+ TRIGGER_PROJECT_REF=\${TRIGGER_PROJECT_REF} \
429
+ TRIGGER_CONTENT_HASH=\${TRIGGER_CONTENT_HASH} \
430
+ TRIGGER_SECRET_KEY=\${TRIGGER_SECRET_KEY} \
431
+ TRIGGER_API_URL=\${TRIGGER_API_URL} \
432
+ TRIGGER_LOG_LEVEL=debug \
433
+ NODE_EXTRA_CA_CERTS=\${NODE_EXTRA_CA_CERTS} \
434
+ NODE_ENV=production \
435
+ NODE_OPTIONS="--max_old_space_size=8192"
436
+
437
+ # Run the indexer
438
+ RUN node ${options.indexScript}
439
+
440
+ # Development or production stage builds upon the base stage
441
+ FROM base AS final
442
+
443
+ USER node
444
+ WORKDIR /app
445
+
446
+ ARG TRIGGER_PROJECT_ID
447
+ ARG TRIGGER_DEPLOYMENT_ID
448
+ ARG TRIGGER_DEPLOYMENT_VERSION
449
+ ARG TRIGGER_CONTENT_HASH
450
+ ARG TRIGGER_PROJECT_REF
451
+ ARG NODE_EXTRA_CA_CERTS
452
+
453
+ ENV TRIGGER_PROJECT_ID=\${TRIGGER_PROJECT_ID} \
454
+ TRIGGER_DEPLOYMENT_ID=\${TRIGGER_DEPLOYMENT_ID} \
455
+ TRIGGER_DEPLOYMENT_VERSION=\${TRIGGER_DEPLOYMENT_VERSION} \
456
+ TRIGGER_CONTENT_HASH=\${TRIGGER_CONTENT_HASH} \
457
+ TRIGGER_PROJECT_REF=\${TRIGGER_PROJECT_REF} \
458
+ NODE_EXTRA_CA_CERTS=\${NODE_EXTRA_CA_CERTS} \
459
+ NODE_ENV=production \
460
+ NODE_OPTIONS="--max_old_space_size=8192"
461
+
462
+ # Copy the files from the install stage
463
+ COPY --from=build --chown=node:node /app ./
464
+
465
+ # Copy the index.json file from the indexer stage
466
+ COPY --from=indexer --chown=node:node /app/index.json ./
467
+
468
+ ENTRYPOINT [ "dumb-init", "node", "${options.entrypoint}" ]
469
+ CMD []
470
+ `;
471
+ }
472
+ //# sourceMappingURL=buildImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildImage.js","sourceRoot":"","sources":["../../../src/deploy/buildImage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type WarningsCheckReturn = {
2
+ ok: true;
3
+ warnings: string[];
4
+ } | {
5
+ ok: false;
6
+ summary: string;
7
+ errors: string[];
8
+ warnings: string[];
9
+ };
10
+ export type LogParserOptions = Array<{
11
+ regex: RegExp;
12
+ message: string;
13
+ shouldFail?: boolean;
14
+ }>;
15
+ export declare function saveLogs(shortCode: string, logs: string): Promise<string>;
16
+ export declare function printErrors(errors?: string[]): void;
17
+ export declare function printWarnings(warnings?: string[]): void;
18
+ export declare function checkLogsForErrors(logs: string): void;
19
+ export declare function checkLogsForWarnings(logs: string): WarningsCheckReturn;
@@ -0,0 +1,96 @@
1
+ import { log } from "@clack/prompts";
2
+ import { writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { chalkError, chalkWarning, cliLink } from "../utilities/cliOutput.js";
5
+ import { createTempDir } from "../utilities/fileSystem.js";
6
+ import { docs, getInTouch } from "../utilities/links.js";
7
+ export async function saveLogs(shortCode, logs) {
8
+ const logPath = join(await createTempDir(), `build-${shortCode}.log`);
9
+ await writeFile(logPath, logs);
10
+ return logPath;
11
+ }
12
+ export function printErrors(errors) {
13
+ for (const error of errors ?? []) {
14
+ log.error(`${chalkError("Error:")} ${error}`);
15
+ }
16
+ }
17
+ export function printWarnings(warnings) {
18
+ for (const warning of warnings ?? []) {
19
+ log.warn(`${chalkWarning("Warning:")} ${warning}`);
20
+ }
21
+ }
22
+ // Try to extract useful error messages from the logs
23
+ export function checkLogsForErrors(logs) {
24
+ const errors = [
25
+ {
26
+ regex: /Error: Provided --schema at (?<schema>.*) doesn't exist/,
27
+ message: `Prisma generate failed to find the specified schema at "$schema".\nDid you include it in config.additionalFiles? ${cliLink("Config docs", docs.config.prisma)}`,
28
+ },
29
+ {
30
+ regex: /@prisma\/client did not initialize yet/,
31
+ message: `Prisma client not initialized yet.\nDid you forget to add the postinstall script? ${cliLink("Config docs", docs.config.prisma)}`,
32
+ },
33
+ {
34
+ regex: /sh: 1: (?<packageOrBinary>.*): not found/,
35
+ message: `$packageOrBinary not found\n\nIf it's a package: Include it in ${cliLink("config.additionalPackages", docs.config.prisma)}\nIf it's a binary: Please ${cliLink("get in touch", getInTouch)} and we'll see what we can do!`,
36
+ },
37
+ ];
38
+ for (const error of errors) {
39
+ const matches = logs.match(error.regex);
40
+ if (!matches) {
41
+ continue;
42
+ }
43
+ const message = getMessageFromTemplate(error.message, matches.groups);
44
+ log.error(`${chalkError("Error:")} ${message}`);
45
+ break;
46
+ }
47
+ }
48
+ function getMessageFromTemplate(template, replacer) {
49
+ let message = template;
50
+ if (replacer) {
51
+ for (const [key, value] of Object.entries(replacer)) {
52
+ message = message.replaceAll(`$${key}`, value);
53
+ }
54
+ }
55
+ return message;
56
+ }
57
+ // Try to extract useful warnings from logs. Sometimes we may even want to fail the build. This won't work if the step is cached.
58
+ export function checkLogsForWarnings(logs) {
59
+ const warnings = [
60
+ {
61
+ regex: /prisma:warn We could not find your Prisma schema/,
62
+ message: `Prisma generate failed to find the default schema. Did you include it in config.additionalFiles? ${cliLink("Config docs", docs.config.prisma)}\nCustom schema paths require a postinstall script like this: \`prisma generate --schema=./custom/path/to/schema.prisma\``,
63
+ shouldFail: true,
64
+ },
65
+ ];
66
+ const errorMessages = [];
67
+ const warningMessages = [];
68
+ let shouldFail = false;
69
+ for (const warning of warnings) {
70
+ const matches = logs.match(warning.regex);
71
+ if (!matches) {
72
+ continue;
73
+ }
74
+ const message = getMessageFromTemplate(warning.message, matches.groups);
75
+ if (warning.shouldFail) {
76
+ shouldFail = true;
77
+ errorMessages.push(message);
78
+ }
79
+ else {
80
+ warningMessages.push(message);
81
+ }
82
+ }
83
+ if (shouldFail) {
84
+ return {
85
+ ok: false,
86
+ summary: "Build succeeded with critical warnings. Will not proceed",
87
+ warnings: warningMessages,
88
+ errors: errorMessages,
89
+ };
90
+ }
91
+ return {
92
+ ok: true,
93
+ warnings: warningMessages,
94
+ };
95
+ }
96
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/deploy/logs.ts"],"names":[],"mappings":"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"}