Skip to content

Commit 41ee6ea

Browse files
chore(server): bump current version to 2.0.0 and add 2.1.0 as next (#19907)
## Summary We are releasing Twenty v2.0. This PR sets up the upgrade-version-command machinery for the new release line: - Move `1.23.0` into `TWENTY_PREVIOUS_VERSIONS` (it just shipped) - Set `TWENTY_CURRENT_VERSION` to `2.0.0` (no specific upgrade commands — this is just the major version cut) - Set `TWENTY_NEXT_VERSIONS` to `['2.1.0']` so future PRs that previously would have targeted `1.24.0` now target `2.1.0` - Add empty `V2_0_UpgradeVersionCommandModule` and `V2_1_UpgradeVersionCommandModule` and wire them into `WorkspaceCommandProviderModule` - Refresh the `InstanceCommandGenerationService` snapshots to reflect the new current version (`2.0.0` / `2-0-` slug) The `2-0/` directory is intentionally empty — there are no specific upgrade commands for the v2.0 cut. New upgrade commands authored after this merges should land in `2-1/` (or be generated against `--version 2.1.0`). ## Test plan - [x] `npx jest` on the impacted upgrade test files (`upgrade-sequence-reader`, `upgrade-command-registry`, `instance-command-generation`) passes (41 tests, 8 snapshots) - [x] `prettier --check` and `oxlint` clean on touched files - [ ] Manual: open `nx run twenty-server:command -- upgrade --dry-run` against a local stack with workspaces still on `1.23.0` and confirm the sequence is computed without errors Made with [Cursor](https://cursor.com)
1 parent b4f996e commit 41ee6ea

8 files changed

Lines changed: 36 additions & 18 deletions

File tree

packages/twenty-server/src/database/commands/__tests__/__snapshots__/instance-command-generation.service.spec.ts.snap

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ export class TestFastInstanceCommand implements FastInstanceCommand {
2626
exports[`InstanceCommandGenerationService should escape backslashes in SQL queries 1`] = `
2727
{
2828
"className": "UpdatePathFastInstanceCommand",
29-
"fileName": "1-23-instance-command-fast-1775000000000-update-path.ts",
29+
"fileName": "2-0-instance-command-fast-1775000000000-update-path.ts",
3030
"fileTemplate": "import { QueryRunner } from 'typeorm';
3131
3232
import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
3333
import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface';
3434
35-
@RegisteredInstanceCommand('1.23.0', 1775000000000)
35+
@RegisteredInstanceCommand('2.0.0', 1775000000000)
3636
export class UpdatePathFastInstanceCommand implements FastInstanceCommand {
3737
public async up(queryRunner: QueryRunner): Promise<void> {
3838
await queryRunner.query('UPDATE "core"."config" SET "value" = E\\'path\\\\\\\\to\\\\\\\\file\\'');
@@ -49,13 +49,13 @@ export class UpdatePathFastInstanceCommand implements FastInstanceCommand {
4949
exports[`InstanceCommandGenerationService should escape single quotes in SQL queries 1`] = `
5050
{
5151
"className": "UpdateConfigFastInstanceCommand",
52-
"fileName": "1-23-instance-command-fast-1775000000000-update-config.ts",
52+
"fileName": "2-0-instance-command-fast-1775000000000-update-config.ts",
5353
"fileTemplate": "import { QueryRunner } from 'typeorm';
5454
5555
import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
5656
import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface';
5757
58-
@RegisteredInstanceCommand('1.23.0', 1775000000000)
58+
@RegisteredInstanceCommand('2.0.0', 1775000000000)
5959
export class UpdateConfigFastInstanceCommand implements FastInstanceCommand {
6060
public async up(queryRunner: QueryRunner): Promise<void> {
6161
await queryRunner.query('UPDATE "core"."config" SET "value" = \\'it\\'\\'s done\\'');
@@ -72,13 +72,13 @@ export class UpdateConfigFastInstanceCommand implements FastInstanceCommand {
7272
exports[`InstanceCommandGenerationService should generate a migration with a single up/down query 1`] = `
7373
{
7474
"className": "AddFooColumnFastInstanceCommand",
75-
"fileName": "1-23-instance-command-fast-1775000000000-add-foo-column.ts",
75+
"fileName": "2-0-instance-command-fast-1775000000000-add-foo-column.ts",
7676
"fileTemplate": "import { QueryRunner } from 'typeorm';
7777
7878
import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
7979
import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface';
8080
81-
@RegisteredInstanceCommand('1.23.0', 1775000000000)
81+
@RegisteredInstanceCommand('2.0.0', 1775000000000)
8282
export class AddFooColumnFastInstanceCommand implements FastInstanceCommand {
8383
public async up(queryRunner: QueryRunner): Promise<void> {
8484
await queryRunner.query('ALTER TABLE "core"."user" ADD "foo" varchar');
@@ -95,13 +95,13 @@ export class AddFooColumnFastInstanceCommand implements FastInstanceCommand {
9595
exports[`InstanceCommandGenerationService should generate a migration with multiple queries 1`] = `
9696
{
9797
"className": "CreateTaskTableFastInstanceCommand",
98-
"fileName": "1-23-instance-command-fast-1775000000000-create-task-table.ts",
98+
"fileName": "2-0-instance-command-fast-1775000000000-create-task-table.ts",
9999
"fileTemplate": "import { QueryRunner } from 'typeorm';
100100
101101
import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
102102
import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface';
103103
104-
@RegisteredInstanceCommand('1.23.0', 1775000000000)
104+
@RegisteredInstanceCommand('2.0.0', 1775000000000)
105105
export class CreateTaskTableFastInstanceCommand implements FastInstanceCommand {
106106
public async up(queryRunner: QueryRunner): Promise<void> {
107107
await queryRunner.query('CREATE TABLE "core"."task" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "name" varchar NOT NULL)');
@@ -120,13 +120,13 @@ export class CreateTaskTableFastInstanceCommand implements FastInstanceCommand {
120120
exports[`InstanceCommandGenerationService should generate a migration with query parameters 1`] = `
121121
{
122122
"className": "SeedSettingFastInstanceCommand",
123-
"fileName": "1-23-instance-command-fast-1775000000000-seed-setting.ts",
123+
"fileName": "2-0-instance-command-fast-1775000000000-seed-setting.ts",
124124
"fileTemplate": "import { QueryRunner } from 'typeorm';
125125
126126
import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
127127
import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface';
128128
129-
@RegisteredInstanceCommand('1.23.0', 1775000000000)
129+
@RegisteredInstanceCommand('2.0.0', 1775000000000)
130130
export class SeedSettingFastInstanceCommand implements FastInstanceCommand {
131131
public async up(queryRunner: QueryRunner): Promise<void> {
132132
await queryRunner.query('INSERT INTO "core"."setting" ("key", "value") VALUES ($1, $2)', ["theme","dark"]);
@@ -143,13 +143,13 @@ export class SeedSettingFastInstanceCommand implements FastInstanceCommand {
143143
exports[`InstanceCommandGenerationService should generate a slow instance command with populated up/down 1`] = `
144144
{
145145
"className": "MakeColumnNotNullableSlowInstanceCommand",
146-
"fileName": "1-23-instance-command-slow-1775000000000-make-column-not-nullable.ts",
146+
"fileName": "2-0-instance-command-slow-1775000000000-make-column-not-nullable.ts",
147147
"fileTemplate": "import { DataSource, QueryRunner } from 'typeorm';
148148
149149
import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
150150
import { SlowInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/slow-instance-command.interface';
151151
152-
@RegisteredInstanceCommand('1.23.0', 1775000000000, { type: 'slow' })
152+
@RegisteredInstanceCommand('2.0.0', 1775000000000, { type: 'slow' })
153153
export class MakeColumnNotNullableSlowInstanceCommand implements SlowInstanceCommand {
154154
async runDataMigration(dataSource: DataSource): Promise<void> {
155155
// TODO: implement data backfill before the DDL migration
@@ -170,13 +170,13 @@ export class MakeColumnNotNullableSlowInstanceCommand implements SlowInstanceCom
170170
exports[`InstanceCommandGenerationService should use default migration name in class and file names 1`] = `
171171
{
172172
"className": "AutoGeneratedFastInstanceCommand",
173-
"fileName": "1-23-instance-command-fast-1775000000000-auto-generated.ts",
173+
"fileName": "2-0-instance-command-fast-1775000000000-auto-generated.ts",
174174
"fileTemplate": "import { QueryRunner } from 'typeorm';
175175
176176
import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
177177
import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface';
178178
179-
@RegisteredInstanceCommand('1.23.0', 1775000000000)
179+
@RegisteredInstanceCommand('2.0.0', 1775000000000)
180180
export class AutoGeneratedFastInstanceCommand implements FastInstanceCommand {
181181
public async up(queryRunner: QueryRunner): Promise<void> {
182182
await queryRunner.query('ALTER TABLE "core"."user" ADD "bar" integer');
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Module } from '@nestjs/common';
2+
3+
@Module({
4+
imports: [],
5+
providers: [],
6+
})
7+
export class V2_0_UpgradeVersionCommandModule {}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Module } from '@nestjs/common';
2+
3+
@Module({
4+
imports: [],
5+
providers: [],
6+
})
7+
export class V2_1_UpgradeVersionCommandModule {}

packages/twenty-server/src/database/commands/upgrade-version-command/workspace-command-provider.module.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@ import { Module } from '@nestjs/common';
33
import { V1_21_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/1-21/1-21-upgrade-version-command.module';
44
import { V1_22_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/1-22/1-22-upgrade-version-command.module';
55
import { V1_23_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/1-23/1-23-upgrade-version-command.module';
6+
import { V2_0_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/2-0/2-0-upgrade-version-command.module';
7+
import { V2_1_UpgradeVersionCommandModule } from 'src/database/commands/upgrade-version-command/2-1/2-1-upgrade-version-command.module';
68

79
@Module({
810
imports: [
911
V1_21_UpgradeVersionCommandModule,
1012
V1_22_UpgradeVersionCommandModule,
1113
V1_23_UpgradeVersionCommandModule,
14+
V2_0_UpgradeVersionCommandModule,
15+
V2_1_UpgradeVersionCommandModule,
1216
],
1317
})
1418
export class WorkspaceCommandProviderModule {}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export const TWENTY_CURRENT_VERSION = '1.23.0' as const;
1+
export const TWENTY_CURRENT_VERSION = '2.0.0' as const;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export const TWENTY_NEXT_VERSIONS = [] as const;
1+
export const TWENTY_NEXT_VERSIONS = ['2.1.0'] as const;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export const TWENTY_PREVIOUS_VERSIONS = ['1.21.0', '1.22.0'] as const;
1+
export const TWENTY_PREVIOUS_VERSIONS = ['1.21.0', '1.22.0', '1.23.0'] as const;
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
22

3-
exports[`UpgradeSequenceRunnerService — failing sequence (integration) should throw when cursor command is not found in the sequence 1`] = `"Step "RemovedCommand" not found in upgrade sequence. The sequence only covers versions [1.21.0, 1.22.0, 1.23.0]. Please upgrade to 1.21.0 first."`;
3+
exports[`UpgradeSequenceRunnerService — failing sequence (integration) should throw when cursor command is not found in the sequence 1`] = `"Step "RemovedCommand" not found in upgrade sequence. The sequence only covers versions [1.21.0, 1.22.0, 1.23.0, 2.0.0]. Please upgrade to 1.21.0 first."`;

0 commit comments

Comments
 (0)