From 008e24b73891a337256bf6750caf6d03a9559663 Mon Sep 17 00:00:00 2001 From: Oliver Li Date: Thu, 19 Feb 2026 15:56:32 -0500 Subject: [PATCH] Allow passing version name via environmental variable to apps plugin --- packages/core/src/helpers/env.ts | 3 ++ packages/plugins/apps/src/upload.test.ts | 47 ++++++++++++++++++++++++ packages/plugins/apps/src/upload.ts | 4 ++ 3 files changed, 54 insertions(+) diff --git a/packages/core/src/helpers/env.ts b/packages/core/src/helpers/env.ts index 7cbe9267..88e8fa10 100644 --- a/packages/core/src/helpers/env.ts +++ b/packages/core/src/helpers/env.ts @@ -20,6 +20,8 @@ const yellow = chalk.bold.yellow; // - DATADOG_APPS_INTAKE_URL // - DD_APPS_UPLOAD_ASSETS // - DATADOG_APPS_UPLOAD_ASSETS +// - DD_APPS_VERSION_NAME +// - DATADOG_APPS_VERSION_NAME // - DD_SITE // - DATADOG_SITE const OVERRIDE_VARIABLES = [ @@ -28,6 +30,7 @@ const OVERRIDE_VARIABLES = [ 'SOURCEMAP_INTAKE_URL', 'APPS_INTAKE_URL', 'APPS_UPLOAD_ASSETS', + 'APPS_VERSION_NAME', 'SITE', ] as const; type ENV_KEY = (typeof OVERRIDE_VARIABLES)[number]; diff --git a/packages/plugins/apps/src/upload.test.ts b/packages/plugins/apps/src/upload.test.ts index b333b50a..1fc85046 100644 --- a/packages/plugins/apps/src/upload.test.ts +++ b/packages/plugins/apps/src/upload.test.ts @@ -104,6 +104,53 @@ describe('Apps Plugin - upload', () => { }); expect(data).toEqual({ data: 'data', headers: { 'x-custom': '1' } }); }); + + test('Should append version to form when APPS_VERSION_NAME env var is set', async () => { + const fakeFile = { name: 'archive' }; + getFileMock.mockResolvedValue(fakeFile as any); + getDDEnvValueMock.mockImplementation((key) => { + if (key === 'APPS_VERSION_NAME') { + return '1.2.3'; + } + return undefined; + }); + let capturedGetForm: (() => FormData | Promise) | undefined; + createRequestDataMock.mockImplementation(async (options) => { + capturedGetForm = options.getForm; + return { data: 'data' as any, headers: {} }; + }); + + await getData('/tmp/archive.zip', {}, 'my-app')(); + + // Mock append to avoid Blob validation errors from the non-Blob archiveFile fixture. + const appendSpy = jest.spyOn(FormData.prototype, 'append').mockImplementation(() => {}); + await capturedGetForm!(); + expect(appendSpy).toHaveBeenCalledWith('version', '1.2.3'); + appendSpy.mockRestore(); + }); + + test('Should not append version to form when APPS_VERSION_NAME env var is only whitespace', async () => { + const fakeFile = { name: 'archive' }; + getFileMock.mockResolvedValue(fakeFile as any); + getDDEnvValueMock.mockImplementation((key) => { + if (key === 'APPS_VERSION_NAME') { + return ' '; + } + return undefined; + }); + let capturedGetForm: (() => FormData | Promise) | undefined; + createRequestDataMock.mockImplementation(async (options) => { + capturedGetForm = options.getForm; + return { data: 'data' as any, headers: {} }; + }); + + await getData('/tmp/archive.zip', {}, 'my-app')(); + + const appendSpy = jest.spyOn(FormData.prototype, 'append').mockImplementation(() => {}); + await capturedGetForm!(); + expect(appendSpy).not.toHaveBeenCalledWith('version', expect.anything()); + appendSpy.mockRestore(); + }); }); describe('uploadArchive', () => { diff --git a/packages/plugins/apps/src/upload.ts b/packages/plugins/apps/src/upload.ts index ac5b00d5..de7a2c0c 100644 --- a/packages/plugins/apps/src/upload.ts +++ b/packages/plugins/apps/src/upload.ts @@ -54,6 +54,10 @@ export const getData = const form = new FormData(); form.append('name', name); form.append('bundle', archiveFile, ARCHIVE_FILENAME); + const versionName = getDDEnvValue('APPS_VERSION_NAME')?.trim(); + if (versionName) { + form.append('version', versionName); + } return form; }, defaultHeaders,