From 440d2a3a0ec79dcea9ac3f6a318b6ad66c472d22 Mon Sep 17 00:00:00 2001 From: Rowan Manning <138944+rowanmanning@users.noreply.github.com> Date: Tue, 25 Mar 2025 11:10:16 +0000 Subject: [PATCH] feat: set cloud provider to AWS for Hako apps This updates our cloud provider detection to assume AWS if the `HAKO_SERVICE_URL` environment variable is set. At present, the cloud provider will be `null` for Hako apps. --- packages/app-info/lib/index.js | 2 +- packages/app-info/test/unit/lib/index.spec.js | 51 ++++++++++++++----- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/packages/app-info/lib/index.js b/packages/app-info/lib/index.js index 318536a8..f7494d1d 100644 --- a/packages/app-info/lib/index.js +++ b/packages/app-info/lib/index.js @@ -58,7 +58,7 @@ const processType = * Returns the cloud provider type (either aws or heroku). */ const cloudProvider = () => { - if (process.env.AWS_LAMBDA_FUNCTION_NAME) { + if (process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.HAKO_SERVICE_URL) { return 'aws'; } if (process.env.HEROKU_RELEASE_CREATED_AT) { diff --git a/packages/app-info/test/unit/lib/index.spec.js b/packages/app-info/test/unit/lib/index.spec.js index 48b7b70b..b10b7d33 100644 --- a/packages/app-info/test/unit/lib/index.spec.js +++ b/packages/app-info/test/unit/lib/index.spec.js @@ -6,7 +6,7 @@ describe('@dotcom-reliability-kit/app-info', () => { beforeEach(() => { jest.spyOn(process, 'cwd').mockReturnValue('/mock-cwd'); process.env.AWS_LAMBDA_FUNCTION_VERSION = 'mock-aws-release-version'; - process.env.AWS_LAMBDA_FUNCTION_NAME = 'mock-aws-process-type'; + process.env.AWS_LAMBDA_FUNCTION_NAME = 'mock-lambda-function-name'; process.env.AWS_REGION = 'mock-aws-region'; process.env.GIT_COMMIT = 'mock-git-commit'; process.env.GIT_COMMIT_LONG = 'mock-git-commit-long'; @@ -341,7 +341,7 @@ describe('@dotcom-reliability-kit/app-info', () => { describe('.processType', () => { it('is set to `process.env.AWS_LAMBDA_FUNCTION_NAME`', () => { - expect(appInfo.processType).toBe('mock-aws-process-type'); + expect(appInfo.processType).toBe('mock-lambda-function-name'); }); describe('when `process.env.DYNO` is defined and `process.env.AWS_LAMBDA_FUNCTION_NAME` is not', () => { @@ -371,28 +371,51 @@ describe('@dotcom-reliability-kit/app-info', () => { }); describe('.cloudProvider', () => { - it('is set to `aws` if processType is set to `process.env.AWS_LAMBDA_FUNCTION_NAME`', () => { - if (appInfo.processType === process.env.AWS_LAMBDA_FUNCTION_NAME) { + beforeEach(() => { + jest.resetModules(); + delete process.env.AWS_LAMBDA_FUNCTION_NAME; + delete process.env.HEROKU_RELEASE_CREATED_AT; + delete process.env.HAKO_SERVICE_URL; + appInfo = require('../../../lib'); + }); + + it('is set to null', () => { + expect(appInfo.cloudProvider).toBe(null); + }); + + describe('when `process.env.AWS_LAMBDA_FUNCTION_NAME` is defined', () => { + beforeEach(() => { + jest.resetModules(); + process.env.AWS_LAMBDA_FUNCTION_NAME = 'mock-lambda-function-name'; + appInfo = require('../../../lib'); + }); + + it('is set to "aws"', () => { expect(appInfo.cloudProvider).toBe('aws'); - } + }); }); - it('is set to `heroku` if `process.env.HEROKU_RELEASE_CREATED_AT` is set to true', () => { - if (process.env.HEROKU_RELEASE_CREATED_AT) { - expect(appInfo.cloudProvider).toBe('heroku'); - } + describe('when `process.env.HAKO_SERVICE_URL` is defined', () => { + beforeEach(() => { + jest.resetModules(); + process.env.HAKO_SERVICE_URL = 'mock-hako-service-url'; + appInfo = require('../../../lib'); + }); + + it('is set to "aws"', () => { + expect(appInfo.cloudProvider).toBe('aws'); + }); }); - describe('when neither `process.env.AWS_LAMBDA_FUNCTION_NAME` or `process.env.HEROKU_RELEASE_CREATED_AT` are defined', () => { + describe('when `process.env.HEROKU_RELEASE_CREATED_AT` is defined', () => { beforeEach(() => { jest.resetModules(); - delete process.env.HEROKU_RELEASE_CREATED_AT; - delete process.env.AWS_LAMBDA_FUNCTION_NAME; + process.env.HEROKU_RELEASE_CREATED_AT = 'mock-release-created-at'; appInfo = require('../../../lib'); }); - it('is set to null', () => { - expect(appInfo.cloudProvider).toBe(null); + it('is set to "heroku"', () => { + expect(appInfo.cloudProvider).toBe('heroku'); }); }); });