Skip to content

Commit e6ca6fc

Browse files
committed
Fix update check for catalog protocol deps
1 parent d34b699 commit e6ca6fc

2 files changed

Lines changed: 137 additions & 46 deletions

File tree

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { describe, expect, it } from "vitest";
2+
import { getTriggerDependencies, getVersionMismatches, type Dependency } from "./update.js";
3+
4+
describe("update command dependency checks", () => {
5+
it("skips unresolved package-manager protocol specifiers", async () => {
6+
const deps = await getTriggerDependencies(
7+
{
8+
dependencies: {
9+
"@trigger.dev/sdk": "catalog:",
10+
"@trigger.dev/core": "workspace:4.5.0",
11+
"@trigger.dev/build": "file:../build",
12+
react: "^19.0.0",
13+
},
14+
devDependencies: {
15+
"@trigger.dev/eslint-plugin": "link:../eslint-plugin",
16+
},
17+
},
18+
"/tmp/trigger-catalog-repro/package.json"
19+
);
20+
21+
expect(deps).toEqual([]);
22+
});
23+
24+
it("keeps normal trigger dependencies for version mismatch checks", async () => {
25+
const deps = await getTriggerDependencies(
26+
{
27+
dependencies: {
28+
"@trigger.dev/sdk": "4.4.6",
29+
},
30+
},
31+
"/tmp/trigger-version-repro/package.json"
32+
);
33+
34+
expect(deps).toEqual([
35+
{
36+
type: "dependencies",
37+
name: "@trigger.dev/sdk",
38+
version: "4.4.6",
39+
},
40+
]);
41+
});
42+
43+
it("does not throw when an invalid specifier reaches downgrade detection", () => {
44+
const deps: Dependency[] = [
45+
{
46+
type: "dependencies",
47+
name: "@trigger.dev/sdk",
48+
version: "catalog:",
49+
},
50+
];
51+
52+
expect(() => getVersionMismatches(deps, "4.5.0")).not.toThrow();
53+
expect(getVersionMismatches(deps, "4.5.0")).toEqual({
54+
mismatches: deps,
55+
isDowngrade: false,
56+
});
57+
});
58+
59+
it("still detects downgrade prompts for valid semver ranges", () => {
60+
const deps: Dependency[] = [
61+
{
62+
type: "dependencies",
63+
name: "@trigger.dev/sdk",
64+
version: "^5.0.0",
65+
},
66+
];
67+
68+
expect(getVersionMismatches(deps, "4.5.0")).toEqual({
69+
mismatches: deps,
70+
isDowngrade: true,
71+
});
72+
});
73+
});

packages/cli-v3/src/commands/update.ts

Lines changed: 64 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export function configureUpdateCommand(program: Command) {
4242
}
4343

4444
const triggerPackageFilter = /^@trigger\.dev/;
45+
const packageManagerProtocolFilter = /^(catalog|workspace|file|link|portal|patch):/;
4546

4647
export async function updateCommand(dir: string, options: UpdateCommandOptions) {
4748
await updateTriggerPackages(dir, options, false);
@@ -111,45 +112,6 @@ export async function updateTriggerPackages(
111112

112113
logger.debug("Resolved trigger deps", { triggerDependencies });
113114

114-
function getVersionMismatches(
115-
deps: Dependency[],
116-
targetVersion: string
117-
): {
118-
mismatches: Dependency[];
119-
isDowngrade: boolean;
120-
} {
121-
logger.debug("Checking for version mismatches", { deps, targetVersion });
122-
123-
const mismatches: Dependency[] = [];
124-
125-
for (const dep of deps) {
126-
if (
127-
dep.version === targetVersion ||
128-
dep.version.startsWith("https://pkg.pr.new") ||
129-
dep.version.startsWith("0.0.0")
130-
) {
131-
continue;
132-
}
133-
134-
mismatches.push(dep);
135-
}
136-
137-
const isDowngrade = mismatches.some((dep) => {
138-
const depMinVersion = semver.minVersion(dep.version);
139-
140-
if (!depMinVersion) {
141-
return false;
142-
}
143-
144-
return semver.gt(depMinVersion, targetVersion);
145-
});
146-
147-
return {
148-
mismatches,
149-
isDowngrade,
150-
};
151-
}
152-
153115
const { mismatches, isDowngrade } = getVersionMismatches(triggerDependencies, cliVersion);
154116

155117
logger.debug("Version mismatches", { mismatches, isDowngrade });
@@ -309,13 +271,59 @@ export async function updateTriggerPackages(
309271
return hasOutput;
310272
}
311273

312-
type Dependency = {
274+
export type Dependency = {
313275
type: "dependencies" | "devDependencies";
314276
name: string;
315277
version: string;
316278
};
317279

318-
async function getTriggerDependencies(
280+
export function getVersionMismatches(
281+
deps: Dependency[],
282+
targetVersion: string
283+
): {
284+
mismatches: Dependency[];
285+
isDowngrade: boolean;
286+
} {
287+
logger.debug("Checking for version mismatches", { deps, targetVersion });
288+
289+
const mismatches: Dependency[] = [];
290+
291+
for (const dep of deps) {
292+
if (
293+
dep.version === targetVersion ||
294+
dep.version.startsWith("https://pkg.pr.new") ||
295+
dep.version.startsWith("0.0.0")
296+
) {
297+
continue;
298+
}
299+
300+
mismatches.push(dep);
301+
}
302+
303+
const isDowngrade = mismatches.some((dep) => {
304+
if (!semver.validRange(dep.version)) {
305+
logger.debug("Skipping downgrade check for non-semver dependency specifier", {
306+
dep,
307+
});
308+
return false;
309+
}
310+
311+
const depMinVersion = semver.minVersion(dep.version);
312+
313+
if (!depMinVersion) {
314+
return false;
315+
}
316+
317+
return semver.gt(depMinVersion, targetVersion);
318+
});
319+
320+
return {
321+
mismatches,
322+
isDowngrade,
323+
};
324+
}
325+
326+
export async function getTriggerDependencies(
319327
packageJson: PackageJson,
320328
packageJsonPath: string
321329
): Promise<Dependency[]> {
@@ -327,10 +335,6 @@ async function getTriggerDependencies(
327335
continue;
328336
}
329337

330-
if (version.startsWith("workspace")) {
331-
continue;
332-
}
333-
334338
if (!triggerPackageFilter.test(name)) {
335339
continue;
336340
}
@@ -343,7 +347,21 @@ async function getTriggerDependencies(
343347

344348
const $version = await tryResolveTriggerPackageVersion(name, dirname(packageJsonPath));
345349

346-
deps.push({ type, name, version: $version ?? version });
350+
if ($version) {
351+
deps.push({ type, name, version: $version });
352+
continue;
353+
}
354+
355+
if (packageManagerProtocolFilter.test(version)) {
356+
logger.debug("Skipping unresolved package-manager dependency specifier", {
357+
type,
358+
name,
359+
version,
360+
});
361+
continue;
362+
}
363+
364+
deps.push({ type, name, version });
347365
}
348366
}
349367

0 commit comments

Comments
 (0)