fix(code-coverage-backend): Allow it to skip migrations

Signed-off-by: Daniel Dias Branco Arthaud <arthaud@gmail.com>
This commit is contained in:
Daniel Dias Branco Arthaud
2022-08-14 18:49:07 -03:00
parent 833e2e4904
commit f2ee2a5dbb
3 changed files with 31 additions and 10 deletions
@@ -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<JsonCodeCoverage> = [
],
},
];
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]);
});
@@ -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<CodeCoverageStore> {
await knex.migrate.latest({
directory: migrationsDir,
});
static async create(
database: PluginDatabaseManager,
): Promise<CodeCoverageStore> {
const knex = await database.getClient();
if (!database.migrations?.skip) {
await knex.migrate.latest({
directory: migrationsDir,
});
}
return new CodeCoverageDatabase(knex);
}
@@ -57,9 +57,7 @@ export const makeRouter = async (
): Promise<express.Router> => {
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);