Skip to content

Commit cd7a451

Browse files
authored
Fix: Extract the correct SDK version during build (#1530)
* fix build manifest sdk version * new cli version prop in deployment tab * changeset
1 parent 29d107d commit cd7a451

File tree

5 files changed

+111
-2
lines changed

5 files changed

+111
-2
lines changed

.changeset/fuzzy-doors-know.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"trigger.dev": patch
3+
---
4+
5+
Fix SDK version in build manifest for out-of-sync detection

apps/webapp/app/presenters/v3/DeploymentPresenter.server.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ export class DeploymentPresenter {
108108
},
109109
},
110110
sdkVersion: true,
111+
cliVersion: true,
111112
},
112113
},
113114
triggeredBy: {
@@ -145,6 +146,7 @@ export class DeploymentPresenter {
145146
},
146147
deployedBy: deployment.triggeredBy,
147148
sdkVersion: deployment.worker?.sdkVersion,
149+
cliVersion: deployment.worker?.cliVersion,
148150
imageReference: deployment.imageReference,
149151
externalBuildData:
150152
externalBuildData && externalBuildData.success ? externalBuildData.data : undefined,

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.deployments.$deploymentParam/route.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@ export default function Page() {
151151
<Property.Label>SDK Version</Property.Label>
152152
<Property.Value>{deployment.sdkVersion ? deployment.sdkVersion : "–"}</Property.Value>
153153
</Property.Item>
154+
<Property.Item>
155+
<Property.Label>CLI Version</Property.Label>
156+
<Property.Value>{deployment.cliVersion ? deployment.cliVersion : "–"}</Property.Value>
157+
</Property.Item>
154158
<Property.Item>
155159
<Property.Label>Started at</Property.Label>
156160
<Property.Value>

packages/cli-v3/src/build/buildWorker.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { writeJSONFile } from "../utilities/fileSystem.js";
2727
import { isWindows } from "std-env";
2828
import { pathToFileURL } from "node:url";
2929
import { logger } from "../utilities/logger.js";
30+
import { SdkVersionExtractor } from "./plugins.js";
3031

3132
export type BuildWorkerEventListener = {
3233
onBundleStart?: () => void;
@@ -61,6 +62,8 @@ export async function buildWorker(options: BuildWorkerOptions) {
6162
await notifyExtensionOnBuildStart(buildContext);
6263
const pluginsFromExtensions = resolvePluginsForContext(buildContext);
6364

65+
const sdkVersionExtractor = new SdkVersionExtractor();
66+
6467
options.listener?.onBundleStart?.();
6568

6669
const bundleResult = await bundleWorker({
@@ -69,7 +72,7 @@ export async function buildWorker(options: BuildWorkerOptions) {
6972
destination: options.destination,
7073
watch: false,
7174
resolvedConfig,
72-
plugins: [...pluginsFromExtensions],
75+
plugins: [sdkVersionExtractor.plugin, ...pluginsFromExtensions],
7376
jsxFactory: resolvedConfig.build.jsx.factory,
7477
jsxFragment: resolvedConfig.build.jsx.fragment,
7578
jsxAutomatic: resolvedConfig.build.jsx.automatic,
@@ -81,7 +84,7 @@ export async function buildWorker(options: BuildWorkerOptions) {
8184
contentHash: bundleResult.contentHash,
8285
runtime: resolvedConfig.runtime ?? DEFAULT_RUNTIME,
8386
environment: options.environment,
84-
packageVersion: CORE_VERSION,
87+
packageVersion: sdkVersionExtractor.sdkVersion ?? CORE_VERSION,
8588
cliPackageVersion: VERSION,
8689
target: "deploy",
8790
files: bundleResult.files,

packages/cli-v3/src/build/plugins.ts

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ import { ResolvedConfig } from "@trigger.dev/core/v3/build";
44
import { configPlugin } from "../config.js";
55
import { logger } from "../utilities/logger.js";
66
import { bunPlugin } from "../runtimes/bun.js";
7+
import { resolvePathSync as esmResolveSync } from "mlly";
8+
import { readPackageJSON, resolvePackageJSON } from "pkg-types";
9+
import { dirname } from "node:path";
10+
import { readJSONFile } from "../utilities/fileSystem.js";
711

812
export async function buildPlugins(
913
target: BuildTarget,
@@ -87,3 +91,94 @@ export function polyshedPlugin(): esbuild.Plugin {
8791
},
8892
};
8993
}
94+
95+
export class SdkVersionExtractor {
96+
private _sdkVersion: string | undefined;
97+
private _ranOnce = false;
98+
99+
get sdkVersion() {
100+
return this._sdkVersion;
101+
}
102+
103+
get plugin(): esbuild.Plugin {
104+
return {
105+
name: "sdk-version",
106+
setup: (build) => {
107+
build.onResolve({ filter: /^@trigger\.dev\/sdk\// }, async (args) => {
108+
if (this._ranOnce) {
109+
return undefined;
110+
} else {
111+
this._ranOnce = true;
112+
}
113+
114+
logger.debug("[SdkVersionExtractor] Extracting SDK version", { args });
115+
116+
try {
117+
const resolvedPath = esmResolveSync(args.path, {
118+
url: args.resolveDir,
119+
});
120+
121+
logger.debug("[SdkVersionExtractor] Resolved SDK module path", { resolvedPath });
122+
123+
const packageJsonPath = await resolvePackageJSON(dirname(resolvedPath), {
124+
test: async (filePath) => {
125+
try {
126+
const candidate = await readJSONFile(filePath);
127+
128+
// Exclude esm type markers
129+
return Object.keys(candidate).length > 1 || !candidate.type;
130+
} catch (error) {
131+
logger.debug("[SdkVersionExtractor] Error during package.json test", {
132+
error: error instanceof Error ? error.message : error,
133+
});
134+
135+
return false;
136+
}
137+
},
138+
});
139+
140+
if (!packageJsonPath) {
141+
return undefined;
142+
}
143+
144+
logger.debug("[SdkVersionExtractor] Found package.json", { packageJsonPath });
145+
146+
const packageJson = await readPackageJSON(packageJsonPath);
147+
148+
if (!packageJson.name || packageJson.name !== "@trigger.dev/sdk") {
149+
logger.debug("[SdkVersionExtractor] No match for SDK package name", {
150+
packageJsonPath,
151+
packageJson,
152+
});
153+
154+
return undefined;
155+
}
156+
157+
if (!packageJson.version) {
158+
logger.debug("[SdkVersionExtractor] No version found in package.json", {
159+
packageJsonPath,
160+
packageJson,
161+
});
162+
163+
return undefined;
164+
}
165+
166+
this._sdkVersion = packageJson.version;
167+
168+
logger.debug("[SdkVersionExtractor] Found SDK version", {
169+
args,
170+
packageJsonPath,
171+
sdkVersion: this._sdkVersion,
172+
});
173+
174+
return undefined;
175+
} catch (error) {
176+
logger.debug("[SdkVersionExtractor] Failed to extract SDK version", { error });
177+
}
178+
179+
return undefined;
180+
});
181+
},
182+
};
183+
}
184+
}

0 commit comments

Comments
 (0)