fix(cli): limit version alignment to release train

This commit is contained in:
Gustavo Valverde
2026-08-11 14:53:12 -04:00
parent 5071415398
commit dfa95cf560
3 changed files with 52 additions and 5 deletions
+1 -1
View File
@@ -78,7 +78,7 @@ npx auth@latest init
## Upgrade
The `upgrade` command updates older `better-auth` and official `@better-auth/*` dependencies to the version of the CLI being run. Dependencies at the same or a newer version are left unchanged.
The `upgrade` command updates older `better-auth` dependencies and official `@better-auth/*` packages that participate in the synchronized release train to the version of the CLI being run. It compares the minimum version allowed by each `package.json` specifier; specifiers whose minimum is the same or newer are left unchanged. Independently versioned packages, such as `@better-auth/utils`, are not changed.
```package-install title="Terminal"
npx auth@latest upgrade
+35 -4
View File
@@ -11,8 +11,33 @@ import { getPackageInfo } from "../utils/get-package-info";
import { installDependencies } from "../utils/install-dependencies";
import { cliVersion } from "../version";
function isBetterAuthPackage(name: string): boolean {
return name === "better-auth" || name.startsWith("@better-auth/");
// Keep this aligned with the fixed release group in .changeset/config.json.
const SYNCHRONIZED_BETTER_AUTH_PACKAGES = new Set([
"better-auth",
"@better-auth/api-key",
"@better-auth/cimd",
"@better-auth/core",
"@better-auth/drizzle-adapter",
"@better-auth/electron",
"@better-auth/expo",
"@better-auth/i18n",
"@better-auth/kysely-adapter",
"@better-auth/mcp",
"@better-auth/memory-adapter",
"@better-auth/mongo-adapter",
"@better-auth/oauth-provider",
"@better-auth/passkey",
"@better-auth/prisma-adapter",
"@better-auth/redis-storage",
"@better-auth/scim",
"@better-auth/sso",
"@better-auth/stripe",
"@better-auth/telemetry",
"@better-auth/test-utils",
]);
function isSynchronizedBetterAuthPackage(name: string): boolean {
return SYNCHRONIZED_BETTER_AUTH_PACKAGES.has(name);
}
interface UpgradeEntry {
@@ -57,12 +82,18 @@ export async function upgradeAction(opts: unknown) {
}[] = [];
for (const [name, version] of Object.entries(deps) as [string, string][]) {
if (isBetterAuthPackage(name) && !version.startsWith("workspace:")) {
if (
isSynchronizedBetterAuthPackage(name) &&
!version.startsWith("workspace:")
) {
candidates.push({ name, current: version, depType: "prod" });
}
}
for (const [name, version] of Object.entries(devDeps) as [string, string][]) {
if (isBetterAuthPackage(name) && !version.startsWith("workspace:")) {
if (
isSynchronizedBetterAuthPackage(name) &&
!version.startsWith("workspace:")
) {
candidates.push({ name, current: version, depType: "dev" });
}
}
+16
View File
@@ -82,4 +82,20 @@ describe("upgradeAction", () => {
expect(mockDetectPackageManager).not.toHaveBeenCalled();
expect(mockInstallDependencies).not.toHaveBeenCalled();
});
/**
* @see https://github.com/better-auth/better-auth/pull/10760
*/
it("does not align independently versioned Better Auth packages", async () => {
mockGetPackageInfo.mockReturnValue({
dependencies: {
"@better-auth/utils": "^0.4.0",
},
});
await upgradeAction({ cwd: process.cwd(), yes: true });
expect(mockDetectPackageManager).not.toHaveBeenCalled();
expect(mockInstallDependencies).not.toHaveBeenCalled();
});
});