diff --git a/models/activity/src/migration.ts b/models/activity/src/migration.ts index 092cad49cf..dca532efb7 100644 --- a/models/activity/src/migration.ts +++ b/models/activity/src/migration.ts @@ -38,7 +38,6 @@ import { type MigrationDocumentQuery, type MigrationIterator, type MigrationUpgradeClient, - type MigrateMode, tryMigrate } from '@hcengineering/model' import { htmlToMarkup } from '@hcengineering/text' @@ -457,8 +456,8 @@ async function migrateSocialIdsInDocUpdates (client: MigrationClient): Promise { - await tryMigrate(client, activityId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, activityId, [ { state: 'reactions', mode: 'upgrade', @@ -507,6 +506,7 @@ export const activityOperation: MigrateOperation = { }, { state: 'migrate-employee-space-v1', + mode: 'upgrade', func: async () => { await client.update( DOMAIN_ACTIVITY, @@ -517,10 +517,12 @@ export const activityOperation: MigrateOperation = { }, { state: 'migrate-activity-markup', + mode: 'upgrade', func: migrateActivityMarkup }, { state: 'move-reactions', + mode: 'upgrade', func: async (client: MigrationClient): Promise => { await client.move(DOMAIN_ACTIVITY, { _class: activity.class.Reaction }, DOMAIN_REACTION) await client.move(DOMAIN_ACTIVITY, { _class: activity.class.UserMentionInfo }, DOMAIN_USER_MENTION) @@ -528,15 +530,18 @@ export const activityOperation: MigrateOperation = { }, { state: 'accounts-to-social-ids-v2', + mode: 'upgrade', func: migrateAccountsToSocialIds }, { state: 'accounts-in-doc-updates-v2', + mode: 'upgrade', func: migrateAccountsInDocUpdates }, // ONLY FOR STAGING. REMOVE IT BEFORE MERGING TO PRODUCTION { state: 'social-ids-in-doc-updates', + mode: 'upgrade', func: migrateSocialIdsInDocUpdates } ]) diff --git a/models/ai-bot/src/migration.ts b/models/ai-bot/src/migration.ts index 502173e1a1..ac223adafb 100644 --- a/models/ai-bot/src/migration.ts +++ b/models/ai-bot/src/migration.ts @@ -22,8 +22,8 @@ import { import { aiBotId } from '@hcengineering/ai-bot' export const aiBotOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, aiBotId, []) + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, aiBotId, []) }, async upgrade (state: Map>, client: () => Promise): Promise {} } diff --git a/models/analytics-collector/src/migration.ts b/models/analytics-collector/src/migration.ts index 3ce33df046..d4082e4426 100644 --- a/models/analytics-collector/src/migration.ts +++ b/models/analytics-collector/src/migration.ts @@ -13,15 +13,15 @@ // limitations under the License. // +import analyticsCollector, { analyticsCollectorId } from '@hcengineering/analytics-collector' import { + tryMigrate, type MigrateOperation, type MigrateUpdate, type MigrationClient, type MigrationDocumentQuery, - type MigrationUpgradeClient, - tryMigrate + type MigrationUpgradeClient } from '@hcengineering/model' -import analyticsCollector, { analyticsCollectorId } from '@hcengineering/analytics-collector' import { DOMAIN_SPACE, getSocialKeyByOldEmail } from '@hcengineering/model-core' import { DOMAIN_DOC_NOTIFY, DOMAIN_NOTIFICATION } from '@hcengineering/model-notification' import { DOMAIN_ACTIVITY } from '@hcengineering/model-activity' @@ -87,10 +87,11 @@ async function migrateAccountsToSocialIds (client: MigrationClient): Promise { - await tryMigrate(client, analyticsCollectorId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, analyticsCollectorId, [ { state: 'remove-analytics-channels-v3', + mode: 'upgrade', func: removeOnboardingChannels }, { diff --git a/models/attachment/src/migration.ts b/models/attachment/src/migration.ts index 8b733db333..45e0df82bc 100644 --- a/models/attachment/src/migration.ts +++ b/models/attachment/src/migration.ts @@ -22,10 +22,11 @@ import { import attachment, { attachmentId, DOMAIN_ATTACHMENT } from '.' export const attachmentOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, attachmentId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, attachmentId, [ { state: 'fix-attachedTo', + mode: 'upgrade', func: async (client: MigrationClient): Promise => { await client.update( DOMAIN_ATTACHMENT, diff --git a/models/bitrix/src/migration.ts b/models/bitrix/src/migration.ts index be7da16447..aca1b7f797 100644 --- a/models/bitrix/src/migration.ts +++ b/models/bitrix/src/migration.ts @@ -25,8 +25,8 @@ import { bitrixId } from '@hcengineering/bitrix' export const bitrixOperation: MigrateOperation = { async migrate (client: MigrationClient): Promise {}, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, bitrixId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, bitrixId, [ { state: 'create-defaults-v2', func: async (client) => { diff --git a/models/board/src/migration.ts b/models/board/src/migration.ts index 19835e7c9c..1716aedac7 100644 --- a/models/board/src/migration.ts +++ b/models/board/src/migration.ts @@ -82,16 +82,17 @@ async function migrateIdentifiers (client: MigrationClient): Promise { } export const boardOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, boardId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, boardId, [ { state: 'identifier', + mode: 'upgrade', func: migrateIdentifiers } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, boardId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, boardId, [ { state: 'board0001', func: async (client) => { diff --git a/models/calendar/src/migration.ts b/models/calendar/src/migration.ts index 2798d530c7..6986ac17f0 100644 --- a/models/calendar/src/migration.ts +++ b/models/calendar/src/migration.ts @@ -207,10 +207,11 @@ async function migrateTimezone (client: MigrationClient): Promise { } export const calendarOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, calendarId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, calendarId, [ { state: 'calendar001', + mode: 'upgrade', func: async (client) => { await fixEventDueDate(client) await migrateReminders(client) @@ -220,14 +221,17 @@ export const calendarOperation: MigrateOperation = { }, { state: 'timezone', + mode: 'upgrade', func: migrateTimezone }, { state: 'migrate_calendars', + mode: 'upgrade', func: migrateCalendars }, { state: 'move-events', + mode: 'upgrade', func: async (client) => { await client.move( DOMAIN_CALENDAR, @@ -242,8 +246,8 @@ export const calendarOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, calendarId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, calendarId, [ { state: 'default-space', func: (client) => diff --git a/models/card/src/migration.ts b/models/card/src/migration.ts index 101c04c5a9..0cfe1319d9 100644 --- a/models/card/src/migration.ts +++ b/models/card/src/migration.ts @@ -27,16 +27,17 @@ import view from '@hcengineering/view' import card from '.' export const cardOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, chunterId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, chunterId, [ { state: 'set-parent-info', + mode: 'upgrade', func: setParentInfo } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, chunterId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, chunterId, [ { state: 'migrateViewlets', func: migrateViewlets diff --git a/models/chunter/src/migration.ts b/models/chunter/src/migration.ts index 047891e2cf..abfa2b4139 100644 --- a/models/chunter/src/migration.ts +++ b/models/chunter/src/migration.ts @@ -37,8 +37,8 @@ import contact, { getAllAccounts } from '@hcengineering/contact' import { DOMAIN_DOC_NOTIFY, DOMAIN_NOTIFICATION } from '@hcengineering/model-notification' import { type DocUpdateMessage } from '@hcengineering/activity' -import chunter from './plugin' import { DOMAIN_CHUNTER } from './index' +import chunter from './plugin' export const DOMAIN_COMMENT = 'comment' as Domain @@ -232,8 +232,8 @@ async function removeWrongActivity (client: MigrationClient): Promise { } export const chunterOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, chunterId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, chunterId, [ { state: 'create-chat-messages', mode: 'upgrade', @@ -308,8 +308,8 @@ export const chunterOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, chunterId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, chunterId, [ { state: 'create-defaults-v2', func: async (client) => { diff --git a/models/contact/src/migration.ts b/models/contact/src/migration.ts index 6e16eed822..cddee2e694 100644 --- a/models/contact/src/migration.ts +++ b/models/contact/src/migration.ts @@ -263,10 +263,11 @@ async function createSocialIdentities (client: MigrationClient): Promise { } export const contactOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, contactId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, contactId, [ { state: 'employees', + mode: 'upgrade', func: async (client) => { await client.update( DOMAIN_TX, @@ -373,6 +374,7 @@ export const contactOperation: MigrateOperation = { }, { state: 'removeEmployeeSpace', + mode: 'upgrade', func: async (client) => { await client.update( DOMAIN_CONTACT, @@ -387,12 +389,14 @@ export const contactOperation: MigrateOperation = { }, { state: 'avatars', + mode: 'upgrade', func: async (client) => { await migrateAvatars(client) } }, { state: 'avatarsKind', + mode: 'upgrade', func: async (client) => { await client.update( DOMAIN_CONTACT, @@ -419,8 +423,8 @@ export const contactOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, contactId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, contactId, [ { state: 'createSpace-v2', func: async (client) => { diff --git a/models/controlled-documents/src/migration.ts b/models/controlled-documents/src/migration.ts index 4059cb7832..5ee2dd15b0 100644 --- a/models/controlled-documents/src/migration.ts +++ b/models/controlled-documents/src/migration.ts @@ -457,8 +457,8 @@ async function migrateDocumentMetaInternalCode (client: MigrationClient): Promis } export const documentsOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, documentsId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, documentsId, [ { state: 'migrateSpaceTypes', func: migrateSpaceTypes @@ -488,8 +488,8 @@ export const documentsOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, documentsId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, documentsId, [ { state: 'init-documents', func: async (client) => { diff --git a/models/core/src/migration.ts b/models/core/src/migration.ts index bd99a9aca3..104709654d 100644 --- a/models/core/src/migration.ts +++ b/models/core/src/migration.ts @@ -884,8 +884,8 @@ async function processMigrateJsonForDoc ( } export const coreOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, coreId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, coreId, [ { state: 'statuses-to-model', mode: 'upgrade', @@ -996,8 +996,8 @@ export const coreOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, coreId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, coreId, [ { state: 'create-defaults-v2', func: async (client) => { diff --git a/models/document/src/migration.ts b/models/document/src/migration.ts index b8d2bfeba2..2262c62cc2 100644 --- a/models/document/src/migration.ts +++ b/models/document/src/migration.ts @@ -353,8 +353,8 @@ async function removeOldClasses (client: MigrationClient): Promise { } } export const documentOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, documentId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, documentId, [ { state: 'updateDocumentIcons', mode: 'upgrade', diff --git a/models/drive/src/migration.ts b/models/drive/src/migration.ts index 59829f2ec1..317028c417 100644 --- a/models/drive/src/migration.ts +++ b/models/drive/src/migration.ts @@ -121,8 +121,8 @@ async function renameFields (client: MigrationClient): Promise { } export const driveOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, driveId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, driveId, [ { state: 'file-versions', func: migrateFileVersions @@ -134,7 +134,7 @@ export const driveOperation: MigrateOperation = { ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, driveId, []) + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, driveId, []) } } diff --git a/models/gmail/src/migration.ts b/models/gmail/src/migration.ts index 162a6c43b2..90abbac9ed 100644 --- a/models/gmail/src/migration.ts +++ b/models/gmail/src/migration.ts @@ -43,8 +43,8 @@ async function migrateSettings (client: MigrationClient): Promise { } export const gmailOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, gmailId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, gmailId, [ { state: 'removeDeprecatedSpace', func: async (client: MigrationClient) => { diff --git a/models/guest/src/migration.ts b/models/guest/src/migration.ts index beaf98af8d..2a550a0a84 100644 --- a/models/guest/src/migration.ts +++ b/models/guest/src/migration.ts @@ -7,8 +7,8 @@ import { } from '@hcengineering/model' export const guestOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, guestId, []) + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, guestId, []) }, async upgrade (state: Map>, client: () => Promise): Promise {} } diff --git a/models/hr/src/migration.ts b/models/hr/src/migration.ts index 6ad85ac5e9..a0fa8fe9e8 100644 --- a/models/hr/src/migration.ts +++ b/models/hr/src/migration.ts @@ -104,10 +104,11 @@ async function migrateDepartmentMembersToEmployee (client: MigrationClient): Pro } export const hrOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, hrId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, hrId, [ { state: 'migrateDepartments', + mode: 'upgrade', func: migrateDepartments }, { @@ -122,8 +123,8 @@ export const hrOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, hrId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, hrId, [ { state: 'create-defaults-v2', func: async (client) => { diff --git a/models/inventory/src/migration.ts b/models/inventory/src/migration.ts index 6c443d0b3b..f98bed9252 100644 --- a/models/inventory/src/migration.ts +++ b/models/inventory/src/migration.ts @@ -25,8 +25,8 @@ import { import { DOMAIN_INVENTORY } from '.' export const inventoryOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, inventoryId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, inventoryId, [ { state: 'removeDeprecatedSpace', func: async (client: MigrationClient) => { diff --git a/models/lead/src/migration.ts b/models/lead/src/migration.ts index 98ae6106bf..8033b862b0 100644 --- a/models/lead/src/migration.ts +++ b/models/lead/src/migration.ts @@ -148,18 +148,19 @@ async function migrateDefaultTypeMixins (client: MigrationClient): Promise } export const leadOperation: MigrateOperation = { - async preMigrate (client: MigrationClient, logger: ModelLogger): Promise { - await tryMigrate(client, leadId, [ + async preMigrate (client: MigrationClient, logger: ModelLogger, mode): Promise { + await tryMigrate(mode, client, leadId, [ { state: 'migrate-default-statuses', func: (client) => migrateDefaultStatuses(client, logger) } ]) }, - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, leadId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, leadId, [ { state: 'identifier', + mode: 'upgrade', func: migrateIdentifiers }, { @@ -170,6 +171,7 @@ export const leadOperation: MigrateOperation = { }, { state: 'migrate-customer-description', + mode: 'upgrade', func: async (client) => { await client.update( DOMAIN_CONTACT, @@ -186,8 +188,8 @@ export const leadOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, leadId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, leadId, [ { state: 'u-default-funnel', func: async (client) => { diff --git a/models/love/src/migration.ts b/models/love/src/migration.ts index db983c7aa4..1d654568ed 100644 --- a/models/love/src/migration.ts +++ b/models/love/src/migration.ts @@ -14,7 +14,7 @@ // import contact from '@hcengineering/contact' -import { type Space, TxOperations, type Ref } from '@hcengineering/core' +import { TxOperations, type Ref, type Space } from '@hcengineering/core' import drive from '@hcengineering/drive' import { MeetingStatus, @@ -35,8 +35,8 @@ import { type MigrationUpgradeClient } from '@hcengineering/model' import core from '@hcengineering/model-core' -import love from './plugin' import { DOMAIN_LOVE, DOMAIN_MEETING_MINUTES } from '.' +import love from './plugin' async function createDefaultFloor (tx: TxOperations): Promise { const current = await tx.findOne(love.class.Floor, { @@ -96,16 +96,18 @@ async function createReception (client: MigrationUpgradeClient): Promise { } export const loveOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, loveId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, loveId, [ { state: 'removeDeprecatedSpace', + mode: 'upgrade', func: async (client: MigrationClient) => { await migrateSpace(client, 'love:space:Rooms' as Ref, core.space.Workspace, [DOMAIN_LOVE]) } }, { state: 'setup-defaults-settings-v2', + mode: 'upgrade', func: async (client: MigrationClient) => { await client.update( DOMAIN_LOVE, @@ -151,12 +153,14 @@ export const loveOperation: MigrateOperation = { }, { state: 'move-meeting-minutes', + mode: 'upgrade', func: async (client) => { await client.move(DOMAIN_LOVE, { _class: love.class.MeetingMinutes }, DOMAIN_MEETING_MINUTES) } }, { state: 'default-meeting-minutes-status', + mode: 'upgrade', func: async (client) => { await client.update( DOMAIN_MEETING_MINUTES, @@ -167,8 +171,8 @@ export const loveOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, loveId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, loveId, [ { state: 'initial-defaults', func: async (client) => { diff --git a/models/notification/src/migration.ts b/models/notification/src/migration.ts index 4730bd1c84..0f7a52cb1c 100644 --- a/models/notification/src/migration.ts +++ b/models/notification/src/migration.ts @@ -670,22 +670,25 @@ export async function migrateNotificationsObject (client: MigrationClient): Prom } export const notificationOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, notificationId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, notificationId, [ { state: 'delete-hidden-notifications', + mode: 'upgrade', func: async (client) => { await removeNotifications(client, { hidden: true }) } }, { state: 'delete-invalid-notifications', + mode: 'upgrade', func: async (client) => { await removeNotifications(client, { attachedToClass: 'chunter:class:Comment' as Ref> }) } }, { state: 'remove-old-classes', + mode: 'upgrade', func: async (client) => { await client.deleteMany(DOMAIN_NOTIFICATION, { _class: 'notification:class:DocUpdates' as Ref> }) await client.deleteMany(DOMAIN_TX, { objectClass: 'notification:class:DocUpdates' as Ref> }) @@ -693,6 +696,7 @@ export const notificationOperation: MigrateOperation = { }, { state: 'removeDeprecatedSpace', + mode: 'upgrade', func: async (client: MigrationClient) => { await migrateSpace(client, 'notification:space:Notifications' as Ref, core.space.Workspace, [ DOMAIN_NOTIFICATION @@ -701,34 +705,40 @@ export const notificationOperation: MigrateOperation = { }, { state: 'migrate-setting', + mode: 'upgrade', func: migrateSettings }, { state: 'move-doc-notify', + mode: 'upgrade', func: async (client) => { await client.move(DOMAIN_NOTIFICATION, { _class: notification.class.DocNotifyContext }, DOMAIN_DOC_NOTIFY) } }, { state: 'remove-last-view', + mode: 'upgrade', func: async (client) => { await client.deleteMany(DOMAIN_NOTIFICATION, { _class: 'notification:class:LastView' as any }) } }, { state: 'remove-notification', + mode: 'upgrade', func: async (client) => { await client.deleteMany(DOMAIN_NOTIFICATION, { _class: 'notification:class:Notification' as any }) } }, { state: 'remove-email-notification', + mode: 'upgrade', func: async (client) => { await client.deleteMany(DOMAIN_NOTIFICATION, { _class: 'notification:class:EmailNotification' as any }) } }, { state: 'move-user', + mode: 'upgrade', func: async (client) => { await client.move( DOMAIN_NOTIFICATION, @@ -739,6 +749,7 @@ export const notificationOperation: MigrateOperation = { }, { state: 'fill-notification-archived-field-v1', + mode: 'upgrade', func: async (client) => { await client.update( DOMAIN_NOTIFICATION, @@ -759,6 +770,7 @@ export const notificationOperation: MigrateOperation = { }, { state: 'fill-contexts-pinned-field-v1', + mode: 'upgrade', func: async (client) => { await client.update( DOMAIN_DOC_NOTIFY, @@ -769,10 +781,12 @@ export const notificationOperation: MigrateOperation = { }, { state: 'migrate-notifications-space-v1', + mode: 'upgrade', func: migrateNotificationsSpace }, { state: 'migrate-employee-space-v1', + mode: 'upgrade', func: async () => { await client.update( DOMAIN_DOC_NOTIFY, @@ -783,6 +797,7 @@ export const notificationOperation: MigrateOperation = { }, { state: 'migrate-wrong-spaces-v1', + mode: 'upgrade', func: async () => { await client.update( DOMAIN_DOC_NOTIFY, @@ -803,10 +818,12 @@ export const notificationOperation: MigrateOperation = { }, { state: 'migrate-duplicated-contexts-v4', + mode: 'upgrade', func: migrateDuplicateContexts }, { state: 'set-default-hidden', + mode: 'upgrade', func: async () => { await client.update( DOMAIN_DOC_NOTIFY, @@ -817,6 +834,7 @@ export const notificationOperation: MigrateOperation = { }, { state: 'remove-update-txes-docnotify-ctx-v2', + mode: 'upgrade', func: async (client) => { await client.deleteMany(DOMAIN_TX, { _class: core.class.TxUpdateDoc, @@ -836,6 +854,7 @@ export const notificationOperation: MigrateOperation = { }, { state: 'remove-browser-notification-v2', + mode: 'upgrade', func: async (client) => { await client.deleteMany(DOMAIN_USER_NOTIFY, { _class: notification.class.BrowserNotification @@ -848,6 +867,7 @@ export const notificationOperation: MigrateOperation = { }, { state: 'migrate-dnc-space', + mode: 'upgrade', func: async (client) => { await client.update(DOMAIN_DOC_NOTIFY, { space: core.space.Space }, { space: core.space.Workspace }) } @@ -858,11 +878,13 @@ export const notificationOperation: MigrateOperation = { // }, { state: 'accounts-to-social-ids', + mode: 'upgrade', func: migrateAccounts }, // ONLY FOR STAGING. REMOVE IT BEFORE MERGING TO PRODUCTION { state: 'migrate-social-ids-to-account-uuids', + mode: 'upgrade', func: migrateSocialIdsToAccountUuids } ]) diff --git a/models/preference/src/migration.ts b/models/preference/src/migration.ts index 7bd1dfeffb..e62571e7cd 100644 --- a/models/preference/src/migration.ts +++ b/models/preference/src/migration.ts @@ -24,8 +24,8 @@ import { import { DOMAIN_PREFERENCE, preferenceId } from '@hcengineering/preference' export const preferenceOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, preferenceId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, preferenceId, [ { state: 'removeDeprecatedSpace', func: async (client: MigrationClient) => { diff --git a/models/recruit/src/migration.ts b/models/recruit/src/migration.ts index c1e82a38e8..aaebfabcb3 100644 --- a/models/recruit/src/migration.ts +++ b/models/recruit/src/migration.ts @@ -43,18 +43,19 @@ import recruit from './plugin' import { defaultApplicantStatuses } from './spaceType' export const recruitOperation: MigrateOperation = { - async preMigrate (client: MigrationClient, logger: ModelLogger): Promise { - await tryMigrate(client, recruitId, [ + async preMigrate (client: MigrationClient, logger: ModelLogger, mode): Promise { + await tryMigrate(mode, client, recruitId, [ { state: 'migrate-default-statuses', func: (client) => migrateDefaultStatuses(client, logger) } ]) }, - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, recruitId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, recruitId, [ { state: 'identifier', + mode: 'upgrade', func: migrateIdentifiers }, { @@ -71,6 +72,7 @@ export const recruitOperation: MigrateOperation = { }, { state: 'migrate-applicants', + mode: 'upgrade', func: async (client: MigrationClient) => { await client.update( DOMAIN_TASK, @@ -81,8 +83,8 @@ export const recruitOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, recruitId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, recruitId, [ { state: 'create-defaults-v2', func: async (client) => { diff --git a/models/request/src/migration.ts b/models/request/src/migration.ts index 5d92ea9bec..b8476b8b40 100644 --- a/models/request/src/migration.ts +++ b/models/request/src/migration.ts @@ -21,8 +21,8 @@ import { } from '@hcengineering/model' export const requestOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, requestId, []) + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, requestId, []) }, async upgrade (state: Map>, client: () => Promise): Promise {} } diff --git a/models/server-activity/src/migration.ts b/models/server-activity/src/migration.ts index 1d8e809c46..f2270f57ef 100644 --- a/models/server-activity/src/migration.ts +++ b/models/server-activity/src/migration.ts @@ -32,7 +32,8 @@ import { type MigrateOperation, type MigrationClient, type MigrationIterator, - type MigrationUpgradeClient + type MigrationUpgradeClient, + type MigrateMode } from '@hcengineering/model' import { DOMAIN_ACTIVITY } from '@hcengineering/model-activity' import { @@ -263,8 +264,8 @@ async function createDocUpdateMessages (client: MigrationClient): Promise } export const activityServerOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, serverActivityId, [ + async migrate (client: MigrationClient, mode: MigrateMode): Promise { + await tryMigrate(mode, client, serverActivityId, [ { state: 'doc-update-messages', mode: 'upgrade', diff --git a/models/setting/src/migration.ts b/models/setting/src/migration.ts index 75bea82d56..1f90415251 100644 --- a/models/setting/src/migration.ts +++ b/models/setting/src/migration.ts @@ -142,8 +142,8 @@ async function migrateSocialIdsToAccountUuids (client: MigrationClient): Promise } export const settingOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, settingId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, settingId, [ { state: 'removeDeprecatedSpace', func: async (client: MigrationClient) => { diff --git a/models/survey/src/migration.ts b/models/survey/src/migration.ts index 0f88ca17a3..07a96149d7 100644 --- a/models/survey/src/migration.ts +++ b/models/survey/src/migration.ts @@ -25,11 +25,11 @@ import { import survey, { surveyId } from './index' export const surveyOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, surveyId, []) + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, surveyId, []) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, surveyId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, surveyId, [ { state: 'createSpace', func: async (client) => { diff --git a/models/tags/src/migration.ts b/models/tags/src/migration.ts index dae6c50a37..f34c825e95 100644 --- a/models/tags/src/migration.ts +++ b/models/tags/src/migration.ts @@ -10,8 +10,8 @@ import { tagsId } from '@hcengineering/tags' import { DOMAIN_TAGS } from '.' export const tagsOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, tagsId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, tagsId, [ { state: 'removeDeprecatedSpace', func: async (client: MigrationClient) => { diff --git a/models/task/src/migration.ts b/models/task/src/migration.ts index 196268b34a..3a8c764155 100644 --- a/models/task/src/migration.ts +++ b/models/task/src/migration.ts @@ -515,10 +515,11 @@ function areSameArrays (arr1: any[] | undefined, arr2: any[] | undefined): boole } export const taskOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, taskId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, taskId, [ { state: 'migrate-tt-model-states', + mode: 'upgrade', func: async (client) => { const prTaskTypes = client.model.findAllSync(task.class.TaskType, {}) @@ -547,10 +548,12 @@ export const taskOperation: MigrateOperation = { }, { state: 'migrateRanks', + mode: 'upgrade', func: migrateRanks }, { state: 'migrate_wrong_isdone', + mode: 'upgrade', func: async (client: MigrationClient) => { const statuses = client.model.findAllSync(core.class.Status, { category: { $in: [task.statusCategory.Won, task.statusCategory.Lost] } @@ -582,6 +585,7 @@ export const taskOperation: MigrateOperation = { }, { state: 'migrateSequnce', + mode: 'upgrade', func: async (client: MigrationClient) => { await client.update( 'kanban' as Domain, @@ -593,8 +597,8 @@ export const taskOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, taskId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, taskId, [ { state: 'u-task-001', func: async (client) => { diff --git a/models/telegram/src/migration.ts b/models/telegram/src/migration.ts index 7bad58ad9d..bfa44e7ea4 100644 --- a/models/telegram/src/migration.ts +++ b/models/telegram/src/migration.ts @@ -25,8 +25,8 @@ import { telegramId } from '@hcengineering/telegram' import { DOMAIN_TELEGRAM } from '.' export const telegramOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, telegramId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, telegramId, [ { state: 'removeDeprecatedSpace', func: async (client: MigrationClient) => { diff --git a/models/templates/src/migration.ts b/models/templates/src/migration.ts index d1bac2a5ec..01ea9245c8 100644 --- a/models/templates/src/migration.ts +++ b/models/templates/src/migration.ts @@ -25,8 +25,8 @@ import { templatesId } from '@hcengineering/templates' export const templatesOperation: MigrateOperation = { async migrate (client: MigrationClient): Promise {}, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, templatesId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, templatesId, [ { state: 'create-defaults', func: async (client) => { diff --git a/models/text-editor/src/migration.ts b/models/text-editor/src/migration.ts index 3efc911713..34245bfc22 100644 --- a/models/text-editor/src/migration.ts +++ b/models/text-editor/src/migration.ts @@ -163,14 +163,16 @@ async function processFixMigrateMarkupFor ( } export const textEditorOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, 'text-editor', [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, 'text-editor', [ { state: 'markup', + mode: 'upgrade', func: migrateMarkup }, { state: 'fix-markup', + mode: 'upgrade', func: fixMigrateMarkup } ]) diff --git a/models/time/src/migration.ts b/models/time/src/migration.ts index 9065ef2ca0..4c078f7bfa 100644 --- a/models/time/src/migration.ts +++ b/models/time/src/migration.ts @@ -44,18 +44,19 @@ async function fillProps (client: MigrationClient): Promise { } export const timeOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, timeId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, timeId, [ { state: 'm-time-001', + mode: 'upgrade', func: async (client) => { await fillProps(client) } } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, timeId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, timeId, [ { state: 'create-defaults-v2', func: async (client) => { diff --git a/models/tracker/src/migration.ts b/models/tracker/src/migration.ts index 17cca7e59e..ac2f219eaa 100644 --- a/models/tracker/src/migration.ts +++ b/models/tracker/src/migration.ts @@ -363,8 +363,8 @@ async function migrateIssueStatuses (client: MigrationClient): Promise { } export const trackerOperation: MigrateOperation = { - async preMigrate (client: MigrationClient, logger: ModelLogger): Promise { - await tryMigrate(client, trackerId, [ + async preMigrate (client: MigrationClient, logger: ModelLogger, mode): Promise { + await tryMigrate(mode, client, trackerId, [ { state: 'fixIncorrectIssueStatuses', func: migrateIssueStatuses @@ -375,28 +375,32 @@ export const trackerOperation: MigrateOperation = { } ]) }, - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, trackerId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, trackerId, [ { state: 'identifier', + mode: 'upgrade', func: migrateIdentifiers }, { state: 'passIdentifierToParentInfo', + mode: 'upgrade', func: passIdentifierToParentInfo }, { state: 'statusesToModel-2', + mode: 'upgrade', func: migrateStatusesToModel }, { state: 'migrateDefaultTypeMixins', + mode: 'upgrade', func: migrateDefaultTypeMixins } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, trackerId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, trackerId, [ { state: 'create-defaults', func: async (client) => { diff --git a/models/training/src/migration.ts b/models/training/src/migration.ts index 5de33cc4dc..507640d29c 100644 --- a/models/training/src/migration.ts +++ b/models/training/src/migration.ts @@ -26,10 +26,11 @@ import training, { trainingId } from '@hcengineering/training' import { DOMAIN_TRAINING } from './types' export const trainingOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, trainingId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, trainingId, [ { state: 'migrateSequnce', + mode: 'upgrade', func: async (client: MigrationClient) => { await client.update( DOMAIN_TRAINING, @@ -41,8 +42,8 @@ export const trainingOperation: MigrateOperation = { } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, trainingId, [ + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, trainingId, [ { state: 'create-defaults', func: async (client) => { diff --git a/models/view/src/migration.ts b/models/view/src/migration.ts index 7c7f9769ed..47cdbe9ca8 100644 --- a/models/view/src/migration.ts +++ b/models/view/src/migration.ts @@ -127,14 +127,16 @@ async function migrateAccountsToSocialIds (client: MigrationClient): Promise { - await tryMigrate(client, viewId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, viewId, [ { state: 'remove-done-state-pref', + mode: 'upgrade', func: removeDoneStatePref }, { state: 'remove-done-state-filter', + mode: 'upgrade', func: removeDoneStateFilter }, { diff --git a/models/workbench/src/migration.ts b/models/workbench/src/migration.ts index dc4116f42f..01939638a5 100644 --- a/models/workbench/src/migration.ts +++ b/models/workbench/src/migration.ts @@ -44,14 +44,16 @@ async function migrateTabsToSocialIds (client: MigrationClient): Promise { } export const workbenchOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, workbenchId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, workbenchId, [ { state: 'remove-wrong-tabs-v1', + mode: 'upgrade', func: removeTabs }, { state: 'remove-txes-update-tabs-v1', + mode: 'upgrade', func: async () => { await client.deleteMany(DOMAIN_TX, { objectClass: workbench.class.WorkbenchTab, diff --git a/packages/model/src/migration.ts b/packages/model/src/migration.ts index 248ba1974f..e3faa3e1f9 100644 --- a/packages/model/src/migration.ts +++ b/packages/model/src/migration.ts @@ -162,10 +162,10 @@ export interface UpgradeOperations { * @public */ export async function tryMigrate ( + mode: MigrateMode, client: MigrationClient, plugin: string, - migrations: Migrations[], - mode: MigrateMode = 'upgrade' + migrations: Migrations[] ): Promise { const states = client.migrateState.get(plugin) ?? new Set() for (const migration of migrations) { @@ -197,11 +197,11 @@ export async function tryMigrate ( * @public */ export async function tryUpgrade ( + mode: MigrateMode, state: Map>, client: () => Promise, plugin: string, - migrations: UpgradeOperations[], - mode: MigrateMode = 'upgrade' + migrations: UpgradeOperations[] ): Promise { const states = state.get(plugin) ?? new Set() for (const upgrades of migrations) { diff --git a/pods/workspace/download-init-scripts.sh b/pods/workspace/download-init-scripts.sh index 21aa5bfc74..4f7f58d03d 100755 --- a/pods/workspace/download-init-scripts.sh +++ b/pods/workspace/download-init-scripts.sh @@ -8,6 +8,7 @@ else wget https://github.com/hcengineering/init/archive/refs/heads/${INIT_SCRIPTS_BRANCH}.zip fi -unzip ${INIT_SCRIPTS_BRANCH}.zip -d ./temp +unzip ${INIT_SCRIPTS_BRANCH}.zip -d ./temp +rm -rf ./init mv temp/init-${INIT_SCRIPTS_BRANCH} ./init rm -rf ./temp diff --git a/server/tool/src/index.ts b/server/tool/src/index.ts index db8a00a67f..5358833efe 100644 --- a/server/tool/src/index.ts +++ b/server/tool/src/index.ts @@ -164,23 +164,27 @@ export async function updateModel ( const migrateState = new Map>(sts.map((it) => [it[0], _toSet(it[1])])) - try { - let i = 0 - for (const op of migrateOperations) { - const st = platformNow() - await op[1].upgrade(migrateState, async () => connection as any, 'upgrade') - const tdelta = platformNowDiff(st) - if (tdelta > 0.5) { - logger.log('Create', { name: op[0], time: tdelta }) + await ctx.with('create-upgrade', {}, async () => { + try { + let i = 0 + for (const op of migrateOperations) { + const st = platformNow() + await ctx.with(op[0], {}, async () => { + await op[1].upgrade(migrateState, async () => connection as any, mode) + }) + const tdelta = platformNowDiff(st) + if (tdelta > 0) { + logger.log('Create', { name: op[0], time: tdelta }) + } + i++ + await progress((((100 / migrateOperations.length) * i) / 100) * 100) } - i++ - await progress((((100 / migrateOperations.length) * i) / 100) * 100) + await progress(100) + } catch (e: any) { + logger.error('error', { error: e }) + throw e } - await progress(100) - } catch (e: any) { - logger.error('error', { error: e }) - throw e - } + }) } /** @@ -336,7 +340,7 @@ export async function upgradeModel ( } if (updateIndexes === 'skip') { - await tryMigrate(migrateClient, coreId, [ + await tryMigrate('upgrade', migrateClient, coreId, [ { state: 'indexes-v5', func: upgradeIndexes diff --git a/services/github/model-github/src/migration.ts b/services/github/model-github/src/migration.ts index f0de51684b..ff8ae04215 100644 --- a/services/github/model-github/src/migration.ts +++ b/services/github/model-github/src/migration.ts @@ -127,20 +127,22 @@ async function migrateDocSyncInfo (client: MigrationClient): Promise { } export const githubOperation: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, githubId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, githubId, [ { state: 'pull-requests', + mode: 'upgrade', func: migratePullRequests }, { state: 'update-doc-sync-info', + mode: 'upgrade', func: migrateDocSyncInfo } ]) }, - async upgrade (state: Map>, client: () => Promise): Promise { - await tryUpgrade(state, client, githubId, []) + async upgrade (state: Map>, client: () => Promise, mode): Promise { + await tryUpgrade(mode, state, client, githubId, []) } } @@ -301,36 +303,43 @@ async function processMigrateMarkupFor ( } export const githubOperationPreTime: MigrateOperation = { - async migrate (client: MigrationClient): Promise { - await tryMigrate(client, githubId, [ + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, githubId, [ { state: 'fix-todo-spaces', + mode: 'upgrade', func: migrateTodoSpaces }, { state: 'fix-missing-doc-sync-info', + mode: 'upgrade', func: migrateFixMissingDocSyncInfo }, { state: 'remove-github-components', + mode: 'upgrade', func: migrateRemoveGithubComponents }, { state: 'markup', + mode: 'upgrade', func: migrateMarkup }, { state: 'migrate-missing-states', + mode: 'upgrade', func: migrateMissingStates }, { state: 'remove-doc-sync-info-txes', + mode: 'upgrade', func: async (client) => { await client.deleteMany(DOMAIN_TX, { objectClass: github.class.DocSyncInfo }) } }, { state: 'migrate-github-sync-domain', + mode: 'upgrade', func: async (client) => { await client.move(DOMAIN_GITHUB, { _class: github.class.DocSyncInfo }, DOMAIN_GITHUB_SYNC, 100) await client.move(DOMAIN_GITHUB, { _class: github.class.GithubUserInfo }, DOMAIN_GITHUB_USER) diff --git a/ws-tests/create-version-override.sh b/ws-tests/create-version-override.sh new file mode 100755 index 0000000000..6319fd91ad --- /dev/null +++ b/ws-tests/create-version-override.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Define the target version +VERSION="$1" + +# Path to docker-compose.yaml file +COMPOSE_FILE="./docker-compose.yaml" +OVERRIDE_FILE="./docker-compose.override.yml" + +# Check if docker-compose file exists +if [ ! -f "$COMPOSE_FILE" ]; then + echo "Error: $COMPOSE_FILE not found" + exit 1 +fi + +# Create override file with header +echo "# Automatically generated docker-compose override with fixed versions" > $OVERRIDE_FILE +echo "services:" >> $OVERRIDE_FILE + +# Extract hardcoreeng services and add them to the override file with fixed versions +grep -B 1 "image: hardcoreeng/" $COMPOSE_FILE | grep -v "\-\-" | grep -v "image:" | sed 's/:$//g' | while read -r service; do + service=$(echo $service | tr -d ' ') + if [ -n "$service" ]; then + echo " $service:" >> $OVERRIDE_FILE + + # Get the image name + image=$(grep -A 1 "$service:" $COMPOSE_FILE | grep "image: hardcoreeng/" | awk '{print $2}') + pod_name=$(echo $image | sed 's/hardcoreeng\///') + + echo " image: hardcoreeng/$pod_name:$VERSION" >> $OVERRIDE_FILE + if [ "$pod_name" == "account" ]; then + echo " environment:" >> $OVERRIDE_FILE + echo " - REGION_INFO=|;europe|Europe" >> $OVERRIDE_FILE + fi + fi +done + +echo "Created $OVERRIDE_FILE with fixed version $VERSION for all hardcoreeng services" +echo "To use it, run: prepare.sh" + diff --git a/ws-tests/fetch-tool-bundle.sh b/ws-tests/fetch-tool-bundle.sh new file mode 100755 index 0000000000..1fa428e91b --- /dev/null +++ b/ws-tests/fetch-tool-bundle.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +# Define the path to the docker-compose.override.yml +DOCKER_COMPOSE_PATH="./docker-compose.override.yml" + +# Extract the version of hardcoreeng/transactor from the docker-compose file +VERSION=$(grep "image: hardcoreeng/transactor:" "$DOCKER_COMPOSE_PATH" | head -1 | sed -E 's/.*image: hardcoreeng\/transactor:([^[:space:]]+).*/\1/') + +if [ -z "$VERSION" ]; then + echo "Error: Could not find transactor version in docker-compose file" + exit 1 +fi + +echo "Found transactor version: $VERSION" +echo "Fetching hardcoreeng/tool:$VERSION..." + +# Pull the tool image with the same version +docker pull "hardcoreeng/tool:$VERSION" + +# Create a temporary container from the image +CONTAINER_ID=$(docker container create "hardcoreeng/tool:$VERSION") + +# Extract bundle.js from the container +echo "Extracting bundle.js..." +docker cp "$CONTAINER_ID:/usr/src/app/bundle.js" "bundle.js" + +# Clean up the temporary container +docker rm "$CONTAINER_ID" + +echo "Successfully extracted bundle.js to bundle.js" diff --git a/ws-tests/prepare.sh b/ws-tests/prepare.sh index c19c9f45e3..9f0ea14804 100755 --- a/ws-tests/prepare.sh +++ b/ws-tests/prepare.sh @@ -1,8 +1,18 @@ #!/usr/bin/env bash -docker compose -p sanity kill -docker compose -p sanity down --volumes -docker compose -p sanity up -d --force-recreate --renew-anon-volumes + + +# Check if docker-compose.override.yml exists +if [ -f "docker-compose.override.yml" ]; then + echo "Using docker-compose.override.yml" + docker compose -p sanity -f docker-compose.yaml -f docker-compose.override.yml kill + docker compose -p sanity -f docker-compose.yaml -f docker-compose.override.yml down --volumes + docker compose -p sanity -f docker-compose.yaml -f docker-compose.override.yml up -d --force-recreate --renew-anon-volumes +else + docker compose -p sanity kill + docker compose -p sanity down --volumes + docker compose -p sanity up -d --force-recreate --renew-anon-volumes +fi docker_exit=$? if [ ${docker_exit} -eq 0 ]; then echo "Container started successfully" diff --git a/ws-tests/pull-images.sh b/ws-tests/pull-images.sh new file mode 100755 index 0000000000..92a9304ae8 --- /dev/null +++ b/ws-tests/pull-images.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Function to handle interrupt +handle_interrupt() { + echo -e "\nInterrupt received. Exiting..." + exit 1 +} + +# Set trap for Ctrl+C (SIGINT) +trap handle_interrupt INT + +# Path to docker-compose override file +OVERRIDE_FILE="./docker-compose.override.yml" + +# Check if override file exists +if [ ! -f "$OVERRIDE_FILE" ]; then + echo "Error: $OVERRIDE_FILE not found" + exit 1 +fi + +echo "Pulling images specified in $OVERRIDE_FILE..." + +# Extract all images from the override file without using a pipe to a subshell +images=($(grep "image:" $OVERRIDE_FILE | awk '{print $2}')) + +# Pull each image +for image in "${images[@]}"; do + if [ -n "$image" ]; then + echo "Pulling $image..." + docker pull $image 2>&1 | grep -v "What's next:" | grep -v "docker scout" + pull_status=${PIPESTATUS[0]} + if [ $pull_status -ne 0 ]; then + echo "Failed to pull $image" + else + echo "Successfully pulled $image" + fi + fi +done + +echo "All images have been processed." diff --git a/ws-tests/reset-version.sh b/ws-tests/reset-version.sh new file mode 100755 index 0000000000..6e3170029b --- /dev/null +++ b/ws-tests/reset-version.sh @@ -0,0 +1,3 @@ +#!/bin/bash +rm -rf ./docker-compose.override.yml +rm -rf ./bundle.js \ No newline at end of file diff --git a/ws-tests/tool-europe.sh b/ws-tests/tool-europe.sh index 78e2fc1d53..7a68bb17ad 100755 --- a/ws-tests/tool-europe.sh +++ b/ws-tests/tool-europe.sh @@ -16,4 +16,10 @@ export DB_URL=postgresql://root@localhost:26258/defaultdb?sslmode=disable export REGION_INFO="|America;europe|" # Europe without name will not be available for creation of new workspaces. export TRANSACTOR_URL="ws://transactor:3334;ws://localhost:3334,ws://transactor-europe:3335;ws://localhost:3335;europe," -node ${TOOL_OPTIONS} --max-old-space-size=8096 ../dev/tool/bundle/bundle.js $@ \ No newline at end of file +# Check if local bundle.js exists and use it if available +BUNDLE_PATH="../dev/tool/bundle/bundle.js" +if [ -f "./bundle.js" ]; then + BUNDLE_PATH="./bundle.js" +fi + +node ${TOOL_OPTIONS} --max-old-space-size=8096 $BUNDLE_PATH $@ \ No newline at end of file diff --git a/ws-tests/tool.sh b/ws-tests/tool.sh index 9633107e71..7795c05efe 100755 --- a/ws-tests/tool.sh +++ b/ws-tests/tool.sh @@ -13,4 +13,10 @@ export ELASTIC_URL=http://localhost:9201 export SERVER_SECRET=secret export DB_URL=$MONGO_URL -node ${TOOL_OPTIONS} --max-old-space-size=8096 ../dev/tool/bundle/bundle.js $@ \ No newline at end of file +# Check if local bundle.js exists and use it if available +BUNDLE_PATH="../dev/tool/bundle/bundle.js" +if [ -f "./bundle.js" ]; then + BUNDLE_PATH="./bundle.js" +fi + +node ${TOOL_OPTIONS} --max-old-space-size=8096 $BUNDLE_PATH $@ \ No newline at end of file