f129bc0ac4
# Introduction This PR refactors the way we previously manually handled the upgrade command `versionTo` and `versionFrom` values to be replaced by a programmatic inferring using the `APP_VERSION` env variable. It raises new invariant edge cases that are covered by new tests and so on Please keep in mind that an upgrade will run agnostically of any `patch` semver value as it should be done only when releasing a `major/minor` version update [Related discord thread](https://discord.com/channels/1130383047699738754/1368953221921505280) ## Testing in local In order to test in local we have to define an `APP_VERSION` value in `packages/twenty-server/.env` following semver ( or not 🙃 ) ## Logs example ```ts Computing new Datasource for cacheKey: 20202020-1c25-4d02-bf25-6aeccf7ea419-8 out of 0 query: SELECT * FROM current_schema() query: SELECT version(); [Nest] 37872 - 05/06/2025, 4:07:21 PM LOG [UpgradeCommand] Initialized upgrade context with: - currentVersion (migrating to): 0.53.0 - fromWorkspaceVersion: 0.52.0 - 2 commands [Nest] 37872 - 05/06/2025, 4:07:21 PM LOG [UpgradeCommand] Upgrading workspace 20202020-1c25-4d02-bf25-6aeccf7ea419 from=0.52.0 to=0.53.0 1/2 [Nest] 37872 - 05/06/2025, 4:07:21 PM LOG [UpgradeCommand] Upgrade for workspace 20202020-1c25-4d02-bf25-6aeccf7ea419 ignored as is already at a higher version. [Nest] 37872 - 05/06/2025, 4:07:21 PM LOG [UpgradeCommand] Running command on workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db 2/2 Computing new Datasource for cacheKey: 3b8e6458-5fc1-4e63-8563-008ccddaa6db-8 out of 0 query: SELECT * FROM current_schema() query: SELECT version(); [Nest] 37872 - 05/06/2025, 4:07:21 PM LOG [UpgradeCommand] Upgrading workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db from=0.52.0 to=0.53.0 2/2 [Nest] 37872 - 05/06/2025, 4:07:21 PM LOG [UpgradeCommand] Upgrade for workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db ignored as is already at a higher version. [Nest] 37872 - 05/06/2025, 4:07:21 PM LOG [UpgradeCommand] Command completed! ``` ## Misc Related to https://github.com/twentyhq/twenty/issues/11780
27 lines
617 B
TypeScript
27 lines
617 B
TypeScript
import { SemVer } from 'semver';
|
|
|
|
type GetPreviousVersionFromArrayArgs = {
|
|
versions: string[];
|
|
currentVersion: string;
|
|
};
|
|
export const getPreviousVersion = ({
|
|
versions,
|
|
currentVersion,
|
|
}: GetPreviousVersionFromArrayArgs): SemVer | undefined => {
|
|
try {
|
|
const semverVersions = versions
|
|
.map((version) => new SemVer(version))
|
|
.sort((a, b) => b.compare(a));
|
|
|
|
const currentSemver = new SemVer(currentVersion);
|
|
|
|
const previousVersion = semverVersions.find(
|
|
(version) => version.compare(currentSemver) < 0,
|
|
);
|
|
|
|
return previousVersion;
|
|
} catch {
|
|
return undefined;
|
|
}
|
|
};
|