diff --git a/src/api/deploy/helpers/lookup-tenant-service.js b/src/api/deploy/helpers/lookup-tenant-service.js index ad766655..39371a56 100644 --- a/src/api/deploy/helpers/lookup-tenant-service.js +++ b/src/api/deploy/helpers/lookup-tenant-service.js @@ -2,6 +2,49 @@ import { config } from '~/src/config/index.js' import { fetcher } from '~/src/helpers/fetcher.js' import Boom from '@hapi/boom' +import Joi from 'joi' +import { getContent } from '~/src/helpers/github/get-content.js' + +const org = config.get('github.org') +const repo = config.get('github.repos.cdpTfSvcInfra') + +const schema = Joi.object({ + zone: Joi.string().valid('public', 'protected').required(), + service_code: Joi.any(), + mongo: Joi.boolean(), + redis: Joi.boolean(), + test_suite: Joi.string() +}).unknown(true) + +/** + * Get service from the multi-file version of tenants.json + * @param {string} service + * @param {string} environment + * @param {Logger} logger + * @param {string} ref + * @returns {Promise} + */ +async function lookupTenantServiceFromGitHub( + service, + environment, + logger, + ref = 'main' +) { + const filePath = `environments/${environment}/tenants/${service}.json` + try { + const data = await getContent(org, repo, filePath, ref) + if (!data) { + logger.warn(`Tenant environment file ${filePath} from GitHub not found`) + return undefined + } + const service = JSON.parse(data) + Joi.assert(service, schema) // Check file in correct format + return { testSuite: service.test_suite } + } catch (error) { + logger.error(error, `Error attempting to retrieve ${filePath} from GitHub`) + } +} + /** * Get service from portal-backend * @param {string} service @@ -24,4 +67,4 @@ async function lookupTenantService(service, environment, logger) { throw Boom.boomify(new Error(json.message), { statusCode: response.status }) } -export { lookupTenantService } +export { lookupTenantService, lookupTenantServiceFromGitHub } diff --git a/src/listeners/github/helpers/bulk-update-tf-svc-infra.js b/src/listeners/github/helpers/bulk-update-tf-svc-infra.js index 20fe30e8..e422d42c 100644 --- a/src/listeners/github/helpers/bulk-update-tf-svc-infra.js +++ b/src/listeners/github/helpers/bulk-update-tf-svc-infra.js @@ -6,7 +6,7 @@ import { import { updateOverallStatus } from '~/src/helpers/create/init-creation-status.js' import { createPlaceholderArtifact } from '~/src/listeners/github/helpers/create-placeholder-artifact.js' import { createLogger } from '~/src/helpers/logging/logger.js' -import { lookupTenantService } from '~/src/api/deploy/helpers/lookup-tenant-service.js' +import { lookupTenantServiceFromGitHub } from '~/src/api/deploy/helpers/lookup-tenant-service.js' /** * given a list of services, update the tf-svc-infra status for all of them to success @@ -32,7 +32,11 @@ const bulkUpdateTfSvcInfra = async (db, trimmedWorkflow, status) => { const name = service.repositoryName // TODO: maybe use exact commit ref of workflow - const tenantConfig = await lookupTenantService(name, 'management', logger) + const tenantConfig = await lookupTenantServiceFromGitHub( + name, + 'management', + logger + ) if (tenantConfig) { servicesToUpdate.push({ name, tenantConfig }) } diff --git a/src/listeners/github/helpers/bulk-update-tf-svc-infra.test.js b/src/listeners/github/helpers/bulk-update-tf-svc-infra.test.js index f691f42e..d4a1afb0 100644 --- a/src/listeners/github/helpers/bulk-update-tf-svc-infra.test.js +++ b/src/listeners/github/helpers/bulk-update-tf-svc-infra.test.js @@ -5,7 +5,7 @@ import { } from '~/src/listeners/github/status-repo.js' import { createPlaceholderArtifact } from '~/src/listeners/github/helpers/create-placeholder-artifact.js' -import { lookupTenantService } from '~/src/api/deploy/helpers/lookup-tenant-service.js' +import { lookupTenantServiceFromGitHub } from '~/src/api/deploy/helpers/lookup-tenant-service.js' import { updateOverallStatus } from '~/src/helpers/create/init-creation-status.js' import { statuses } from '~/src/constants/statuses.js' @@ -18,7 +18,7 @@ jest.mock('~/src/listeners/github/helpers/create-placeholder-artifact', () => ({ })) jest.mock('~/src/api/deploy/helpers/lookup-tenant-service', () => ({ - lookupTenantService: jest.fn() + lookupTenantServiceFromGitHub: jest.fn() })) jest.mock('~/src/listeners/github/status-repo', () => ({ @@ -33,7 +33,7 @@ describe('bulkUpdateTtfSvcInfra', () => { repositoryName: 'test1' } ]) - lookupTenantService.mockResolvedValue({}) + lookupTenantServiceFromGitHub.mockResolvedValue({}) const db = {} const workflow = { @@ -68,7 +68,7 @@ describe('bulkUpdateTtfSvcInfra', () => { repositoryName: 'test1' } ]) - lookupTenantService.mockResolvedValue(null) + lookupTenantServiceFromGitHub.mockResolvedValue(null) const db = {} const workflow = { @@ -92,7 +92,7 @@ describe('bulkUpdateTtfSvcInfra', () => { repositoryName: 'test1' } ]) - lookupTenantService.mockResolvedValue({ + lookupTenantServiceFromGitHub.mockResolvedValue({ testSuite: 'test1', zone: 'public', service_code: 'TST'