From f8b29f43196b4861ebde12f44355bc182a20e132 Mon Sep 17 00:00:00 2001
From: nicktrn <55853254+nicktrn@users.noreply.github.com>
Date: Tue, 3 Dec 2024 09:32:02 +0000
Subject: [PATCH 1/3] fix build manifest sdk version
---
packages/cli-v3/src/build/buildWorker.ts | 7 +-
packages/cli-v3/src/build/plugins.ts | 95 ++++++++++++++++++++++++
2 files changed, 100 insertions(+), 2 deletions(-)
diff --git a/packages/cli-v3/src/build/buildWorker.ts b/packages/cli-v3/src/build/buildWorker.ts
index 0ab03f1e61..9b4678a34c 100644
--- a/packages/cli-v3/src/build/buildWorker.ts
+++ b/packages/cli-v3/src/build/buildWorker.ts
@@ -27,6 +27,7 @@ import { writeJSONFile } from "../utilities/fileSystem.js";
import { isWindows } from "std-env";
import { pathToFileURL } from "node:url";
import { logger } from "../utilities/logger.js";
+import { SdkVersionExtractor } from "./plugins.js";
export type BuildWorkerEventListener = {
onBundleStart?: () => void;
@@ -61,6 +62,8 @@ export async function buildWorker(options: BuildWorkerOptions) {
await notifyExtensionOnBuildStart(buildContext);
const pluginsFromExtensions = resolvePluginsForContext(buildContext);
+ const sdkVersionExtractor = new SdkVersionExtractor();
+
options.listener?.onBundleStart?.();
const bundleResult = await bundleWorker({
@@ -69,7 +72,7 @@ export async function buildWorker(options: BuildWorkerOptions) {
destination: options.destination,
watch: false,
resolvedConfig,
- plugins: [...pluginsFromExtensions],
+ plugins: [sdkVersionExtractor.plugin, ...pluginsFromExtensions],
jsxFactory: resolvedConfig.build.jsx.factory,
jsxFragment: resolvedConfig.build.jsx.fragment,
jsxAutomatic: resolvedConfig.build.jsx.automatic,
@@ -81,7 +84,7 @@ export async function buildWorker(options: BuildWorkerOptions) {
contentHash: bundleResult.contentHash,
runtime: resolvedConfig.runtime ?? DEFAULT_RUNTIME,
environment: options.environment,
- packageVersion: CORE_VERSION,
+ packageVersion: sdkVersionExtractor.sdkVersion ?? CORE_VERSION,
cliPackageVersion: VERSION,
target: "deploy",
files: bundleResult.files,
diff --git a/packages/cli-v3/src/build/plugins.ts b/packages/cli-v3/src/build/plugins.ts
index c478896169..81a1cecea4 100644
--- a/packages/cli-v3/src/build/plugins.ts
+++ b/packages/cli-v3/src/build/plugins.ts
@@ -4,6 +4,10 @@ import { ResolvedConfig } from "@trigger.dev/core/v3/build";
import { configPlugin } from "../config.js";
import { logger } from "../utilities/logger.js";
import { bunPlugin } from "../runtimes/bun.js";
+import { resolvePathSync as esmResolveSync } from "mlly";
+import { readPackageJSON, resolvePackageJSON } from "pkg-types";
+import { dirname } from "node:path";
+import { readJSONFile } from "../utilities/fileSystem.js";
export async function buildPlugins(
target: BuildTarget,
@@ -87,3 +91,94 @@ export function polyshedPlugin(): esbuild.Plugin {
},
};
}
+
+export class SdkVersionExtractor {
+ private _sdkVersion: string | undefined;
+ private _ranOnce = false;
+
+ get sdkVersion() {
+ return this._sdkVersion;
+ }
+
+ get plugin(): esbuild.Plugin {
+ return {
+ name: "sdk-version",
+ setup: (build) => {
+ build.onResolve({ filter: /^@trigger\.dev\/sdk\// }, async (args) => {
+ if (this._ranOnce) {
+ return undefined;
+ } else {
+ this._ranOnce = true;
+ }
+
+ logger.debug("[SdkVersionExtractor] Extracting SDK version", { args });
+
+ try {
+ const resolvedPath = esmResolveSync(args.path, {
+ url: args.resolveDir,
+ });
+
+ logger.debug("[SdkVersionExtractor] Resolved SDK module path", { resolvedPath });
+
+ const packageJsonPath = await resolvePackageJSON(dirname(resolvedPath), {
+ test: async (filePath) => {
+ try {
+ const candidate = await readJSONFile(filePath);
+
+ // Exclude esm type markers
+ return Object.keys(candidate).length > 1 || !candidate.type;
+ } catch (error) {
+ logger.debug("[SdkVersionExtractor] Error during package.json test", {
+ error: error instanceof Error ? error.message : error,
+ });
+
+ return false;
+ }
+ },
+ });
+
+ if (!packageJsonPath) {
+ return undefined;
+ }
+
+ logger.debug("[SdkVersionExtractor] Found package.json", { packageJsonPath });
+
+ const packageJson = await readPackageJSON(packageJsonPath);
+
+ if (!packageJson.name || packageJson.name !== "@trigger.dev/sdk") {
+ logger.debug("[SdkVersionExtractor] No match for SDK package name", {
+ packageJsonPath,
+ packageJson,
+ });
+
+ return undefined;
+ }
+
+ if (!packageJson.version) {
+ logger.debug("[SdkVersionExtractor] No version found in package.json", {
+ packageJsonPath,
+ packageJson,
+ });
+
+ return undefined;
+ }
+
+ this._sdkVersion = packageJson.version;
+
+ logger.debug("[SdkVersionExtractor] Found SDK version", {
+ args,
+ packageJsonPath,
+ sdkVersion: this._sdkVersion,
+ });
+
+ return undefined;
+ } catch (error) {
+ logger.debug("[SdkVersionExtractor] Failed to extract SDK version", { error });
+ }
+
+ return undefined;
+ });
+ },
+ };
+ }
+}
From 5b13cb5f9f9027c9668e52ec5636fb13a392f16c Mon Sep 17 00:00:00 2001
From: nicktrn <55853254+nicktrn@users.noreply.github.com>
Date: Tue, 3 Dec 2024 09:33:05 +0000
Subject: [PATCH 2/3] new cli version prop in deployment tab
---
apps/webapp/app/presenters/v3/DeploymentPresenter.server.ts | 2 ++
.../route.tsx | 4 ++++
2 files changed, 6 insertions(+)
diff --git a/apps/webapp/app/presenters/v3/DeploymentPresenter.server.ts b/apps/webapp/app/presenters/v3/DeploymentPresenter.server.ts
index 7891c1191c..04b12394ef 100644
--- a/apps/webapp/app/presenters/v3/DeploymentPresenter.server.ts
+++ b/apps/webapp/app/presenters/v3/DeploymentPresenter.server.ts
@@ -108,6 +108,7 @@ export class DeploymentPresenter {
},
},
sdkVersion: true,
+ cliVersion: true,
},
},
triggeredBy: {
@@ -145,6 +146,7 @@ export class DeploymentPresenter {
},
deployedBy: deployment.triggeredBy,
sdkVersion: deployment.worker?.sdkVersion,
+ cliVersion: deployment.worker?.cliVersion,
imageReference: deployment.imageReference,
externalBuildData:
externalBuildData && externalBuildData.success ? externalBuildData.data : undefined,
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.deployments.$deploymentParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.deployments.$deploymentParam/route.tsx
index 58efbcb5b4..7678f53633 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.deployments.$deploymentParam/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.deployments.$deploymentParam/route.tsx
@@ -151,6 +151,10 @@ export default function Page() {
SDK Version
{deployment.sdkVersion ? deployment.sdkVersion : "–"}
+
+ CLI Version
+ {deployment.cliVersion ? deployment.cliVersion : "–"}
+
Started at
From 0e2b2c2f0e7d0111528e66eec1b0320b95b67da6 Mon Sep 17 00:00:00 2001
From: nicktrn <55853254+nicktrn@users.noreply.github.com>
Date: Tue, 3 Dec 2024 09:34:47 +0000
Subject: [PATCH 3/3] changeset
---
.changeset/fuzzy-doors-know.md | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 .changeset/fuzzy-doors-know.md
diff --git a/.changeset/fuzzy-doors-know.md b/.changeset/fuzzy-doors-know.md
new file mode 100644
index 0000000000..348fa6c4eb
--- /dev/null
+++ b/.changeset/fuzzy-doors-know.md
@@ -0,0 +1,5 @@
+---
+"trigger.dev": patch
+---
+
+Fix SDK version in build manifest for out-of-sync detection