feat: add dry-run option to sync-metadata command (#3758)

* feat: add dry-run option to sync-metadata command

* feat: save metadata logs in dry-run mode
This commit is contained in:
Jérémy M
2024-02-01 16:35:32 +01:00
committed by GitHub
parent cdc51add7d
commit 3c89a97a9f
7 changed files with 131 additions and 17 deletions

View File

@ -10,6 +10,7 @@ import { FeatureFlagFactory } from 'src/workspace/workspace-sync-metadata/factor
import { WorkspaceSyncObjectMetadataService } from 'src/workspace/workspace-sync-metadata/services/workspace-sync-object-metadata.service';
import { WorkspaceSyncRelationMetadataService } from 'src/workspace/workspace-sync-metadata/services/workspace-sync-relation-metadata.service';
import { WorkspaceSyncStorage } from 'src/workspace/workspace-sync-metadata/storage/workspace-sync.storage';
import { WorkspaceLogsService } from 'src/workspace/workspace-sync-metadata/services/workspace-logs.service';
@Injectable()
export class WorkspaceSyncMetadataService {
@ -22,6 +23,7 @@ export class WorkspaceSyncMetadataService {
private readonly workspaceMigrationRunnerService: WorkspaceMigrationRunnerService,
private readonly workspaceSyncObjectMetadataService: WorkspaceSyncObjectMetadataService,
private readonly workspaceSyncRelationMetadataService: WorkspaceSyncRelationMetadataService,
private readonly workspaceLogsService: WorkspaceLogsService,
) {}
/**
@ -34,6 +36,7 @@ export class WorkspaceSyncMetadataService {
*/
public async syncStandardObjectsAndFieldsMetadata(
context: WorkspaceSyncContext,
options?: { dryRun?: boolean },
) {
this.logger.log('Syncing standard objects and fields metadata');
const queryRunner = this.metadataDataSource.createQueryRunner();
@ -52,19 +55,37 @@ export class WorkspaceSyncMetadataService {
this.logger.log('Syncing standard objects and fields metadata');
await this.workspaceSyncObjectMetadataService.synchronize(
context,
manager,
storage,
workspaceFeatureFlagsMap,
);
const workspaceObjectMigrations =
await this.workspaceSyncObjectMetadataService.synchronize(
context,
manager,
storage,
workspaceFeatureFlagsMap,
);
await this.workspaceSyncRelationMetadataService.synchronize(
context,
manager,
storage,
workspaceFeatureFlagsMap,
);
const workspaceRelationMigrations =
await this.workspaceSyncRelationMetadataService.synchronize(
context,
manager,
storage,
workspaceFeatureFlagsMap,
);
// If we're running a dry run, rollback the transaction and do not execute migrations
if (options?.dryRun) {
const workspaceMigrations = [
...workspaceObjectMigrations,
...workspaceRelationMigrations,
];
this.logger.log('Running in dry run mode, rolling back transaction');
await queryRunner.rollbackTransaction();
await this.workspaceLogsService.saveLogs(storage, workspaceMigrations);
return;
}
await queryRunner.commitTransaction();