diff --git a/.changeset/calm-berries-trade.md b/.changeset/calm-berries-trade.md new file mode 100644 index 0000000000..9442bd89ec --- /dev/null +++ b/.changeset/calm-berries-trade.md @@ -0,0 +1,8 @@ +--- +"@trigger.dev/sdk": patch +"trigger.dev": patch +"@trigger.dev/build": patch +"@trigger.dev/core": patch +--- + +Fixing false-positive package version mismatches diff --git a/packages/cli-v3/src/commands/update.ts b/packages/cli-v3/src/commands/update.ts index f22fe9fd3e..c8262da2f2 100644 --- a/packages/cli-v3/src/commands/update.ts +++ b/packages/cli-v3/src/commands/update.ts @@ -1,7 +1,7 @@ import { confirm, intro, isCancel, log, outro } from "@clack/prompts"; import { Command } from "commander"; import { detectPackageManager, installDependencies } from "nypm"; -import { resolve } from "path"; +import { basename, dirname, resolve } from "path"; import { PackageJson, readPackageJSON, resolvePackageJSON } from "pkg-types"; import { z } from "zod"; import { CommonCommandOptions, OutroCommandError, wrapCommandAction } from "../cli/common.js"; @@ -12,6 +12,7 @@ import { logger } from "../utilities/logger.js"; import { spinner } from "../utilities/windows.js"; import { VERSION } from "../version.js"; import { hasTTY } from "std-env"; +import nodeResolve from "resolve"; export const UpdateCommandOptions = CommonCommandOptions.pick({ logLevel: true, @@ -54,7 +55,7 @@ export async function updateTriggerPackages( let hasOutput = false; const cliVersion = VERSION; - if (cliVersion.startsWith("0.0.0")) { + if (cliVersion.startsWith("0.0.0") && process.env.ENABLE_PRERELEASE_UPDATE_CHECKS !== "1") { return false; } @@ -83,7 +84,9 @@ export async function updateTriggerPackages( hasOutput = true; } - const triggerDependencies = getTriggerDependencies(packageJson); + const triggerDependencies = await getTriggerDependencies(packageJson, packageJsonPath); + + logger.debug("Resolved trigger deps", { triggerDependencies }); function getVersionMismatches( deps: Dependency[], @@ -268,7 +271,10 @@ type Dependency = { version: string; }; -function getTriggerDependencies(packageJson: PackageJson): Dependency[] { +async function getTriggerDependencies( + packageJson: PackageJson, + packageJsonPath: string +): Promise { const deps: Dependency[] = []; for (const type of ["dependencies", "devDependencies"] as const) { @@ -291,13 +297,41 @@ function getTriggerDependencies(packageJson: PackageJson): Dependency[] { continue; } - deps.push({ type, name, version }); + const $version = await tryResolveTriggerPackageVersion(name, packageJsonPath); + + deps.push({ type, name, version: $version ?? version }); } } return deps; } +async function tryResolveTriggerPackageVersion( + name: string, + packageJsonPath: string +): Promise { + try { + const resolvedPath = nodeResolve.sync(name, { + basedir: dirname(packageJsonPath), + }); + + logger.debug(`Resolved ${name} package version path`, { name, resolvedPath }); + + // IMPORTANT: keep the two dirname calls, as the first one resolves the nested package.json inside dist/commonjs or dist/esm + const { packageJson } = await getPackageJson(dirname(dirname(resolvedPath))); + + if (packageJson.version) { + logger.debug(`Resolved ${name} package version`, { name, version: packageJson.version }); + return packageJson.version; + } + + return; + } catch (error) { + logger.debug("Failed to resolve package version", { name, error }); + return undefined; + } +} + function mutatePackageJsonWithUpdatedPackages( packageJson: PackageJson, depsToUpdate: Dependency[], diff --git a/scripts/publish-prerelease.sh b/scripts/publish-prerelease.sh index 7162c6373f..0b6e56ef2e 100755 --- a/scripts/publish-prerelease.sh +++ b/scripts/publish-prerelease.sh @@ -15,7 +15,6 @@ else fi # Run your commands -rm .changeset/pre.json echo "Running: pnpm exec changeset version --snapshot $version" pnpm exec changeset version --snapshot $version