From f2ee2a5dbb11daebe5be36efb8edb1fdc2e0de4e Mon Sep 17 00:00:00 2001 From: Daniel Dias Branco Arthaud Date: Sun, 14 Aug 2022 18:49:07 -0300 Subject: [PATCH] fix(code-coverage-backend): Allow it to skip migrations Signed-off-by: Daniel Dias Branco Arthaud --- .../src/service/CodeCoverageDatabase.test.ts | 17 ++++++++++++++-- .../src/service/CodeCoverageDatabase.ts | 20 ++++++++++++++----- .../src/service/router.ts | 4 +--- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.test.ts b/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.test.ts index 635debca02..ed913e2c79 100644 --- a/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.test.ts +++ b/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.test.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { Knex as KnexType } from 'knex'; import { DatabaseManager } from '@backstage/backend-common'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; @@ -95,12 +96,24 @@ const coverage: Array = [ ], }, ]; - +function createDatabaseManager( + client: KnexType, + skipMigrations: boolean = false, +) { + return { + getClient: async () => client, + migrations: { + skip: skipMigrations, + }, + }; +} let database: CodeCoverageStore; describe('CodeCoverageDatabase', () => { beforeAll(async () => { const client = await db.getClient(); - database = await CodeCoverageDatabase.create(client); + const databaseManager = createDatabaseManager(client); + database = await CodeCoverageDatabase.create(databaseManager); + await database.insertCodeCoverage(coverage[0]); await database.insertCodeCoverage(coverage[1]); }); diff --git a/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.ts b/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.ts index 9235f3a8fd..4cbcd76fe0 100644 --- a/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.ts +++ b/plugins/code-coverage-backend/src/service/CodeCoverageDatabase.ts @@ -13,7 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { resolvePackagePath } from '@backstage/backend-common'; +import { + PluginDatabaseManager, + resolvePackagePath, +} from '@backstage/backend-common'; import { NotFoundError } from '@backstage/errors'; import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; import { Knex } from 'knex'; @@ -41,10 +44,17 @@ const migrationsDir = resolvePackagePath( ); export class CodeCoverageDatabase implements CodeCoverageStore { - static async create(knex: Knex): Promise { - await knex.migrate.latest({ - directory: migrationsDir, - }); + static async create( + database: PluginDatabaseManager, + ): Promise { + const knex = await database.getClient(); + + if (!database.migrations?.skip) { + await knex.migrate.latest({ + directory: migrationsDir, + }); + } + return new CodeCoverageDatabase(knex); } diff --git a/plugins/code-coverage-backend/src/service/router.ts b/plugins/code-coverage-backend/src/service/router.ts index 37279b549f..b87b21bffd 100644 --- a/plugins/code-coverage-backend/src/service/router.ts +++ b/plugins/code-coverage-backend/src/service/router.ts @@ -57,9 +57,7 @@ export const makeRouter = async ( ): Promise => { const { config, logger, discovery, database, urlReader } = options; - const codeCoverageDatabase = await CodeCoverageDatabase.create( - await database.getClient(), - ); + const codeCoverageDatabase = await CodeCoverageDatabase.create(database); const codecovUrl = await discovery.getExternalBaseUrl('code-coverage'); const catalogApi: CatalogApi = new CatalogClient({ discoveryApi: discovery }); const scm = ScmIntegrations.fromConfig(config);