Skip to content

Commit bb5535f

Browse files
committed
fix(5955): ensure getEnvironment() function to return the correct environment values
1 parent 27aa96d commit bb5535f

File tree

5 files changed

+148
-9
lines changed

5 files changed

+148
-9
lines changed

development/build/constants.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@ const ENVIRONMENT = {
2525
TESTING: 'testing',
2626
};
2727

28+
/**
29+
* Task prefixes for each build target.
30+
* Used to create task names like 'scripts:core:dev:standardEntryPoints'.
31+
*/
32+
const TASK_PREFIXES = {
33+
[BUILD_TARGETS.DEV]: 'scripts:core:dev',
34+
[BUILD_TARGETS.DIST]: 'scripts:core:dist',
35+
[BUILD_TARGETS.PROD]: 'scripts:core:prod',
36+
[BUILD_TARGETS.TEST]: 'scripts:core:test',
37+
[BUILD_TARGETS.TEST_DEV]: 'scripts:core:test-live',
38+
};
39+
2840
const TASKS = {
2941
...BUILD_TARGETS,
3042
CLEAN: 'clean',
@@ -87,6 +99,7 @@ const MANIFEST_RELEASE_CANDIDATE_KEY =
8799
module.exports = {
88100
BUILD_TARGETS,
89101
ENVIRONMENT,
102+
TASK_PREFIXES,
90103
TASKS,
91104
MANIFEST_DEV_KEY,
92105
MANIFEST_RELEASE_CANDIDATE_KEY,

development/build/manifest.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ const {
1616
MANIFEST_RELEASE_CANDIDATE_KEY,
1717
} = require('./constants');
1818
const { createTask, composeSeries } = require('./task');
19-
const { getEnvironment, getBuildName } = require('./utils');
19+
const {
20+
getEnvironment,
21+
getBuildName,
22+
getBuildTargetFromTask,
23+
} = require('./utils');
2024
const { fromIniFile } = require('./config');
2125

2226
module.exports = createManifestTasks;
@@ -55,7 +59,8 @@ function createManifestTasks({
5559
shouldIncludeOcapKernel = false,
5660
shouldIncludeSnow,
5761
}) {
58-
const environment = getEnvironment({ buildTarget: entryTask });
62+
const buildTarget = getBuildTargetFromTask(entryTask);
63+
const environment = getEnvironment({ buildTarget });
5964

6065
// merge base manifest with per-platform manifests
6166
const prepPlatforms = async () => {

development/build/scripts.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const bifyModuleGroups = require('bify-module-groups');
3131
const { streamFlatMap } = require('../stream-flat-map');
3232
const { isManifestV3 } = require('../../shared/modules/mv3.utils');
3333
const { setEnvironmentVariables } = require('./set-environment-variables');
34-
const { BUILD_TARGETS } = require('./constants');
34+
const { BUILD_TARGETS, TASK_PREFIXES } = require('./constants');
3535
const { getConfig, getActiveFeatures } = require('./config');
3636
const {
3737
isDevBuild,
@@ -155,27 +155,27 @@ function createScriptTasks({
155155
// dev tasks (live reload)
156156
dev: createTasksForScriptBundles({
157157
buildTarget: BUILD_TARGETS.DEV,
158-
taskPrefix: 'scripts:core:dev',
158+
taskPrefix: TASK_PREFIXES[BUILD_TARGETS.DEV],
159159
}),
160160
// production-like distributable build
161161
dist: createTasksForScriptBundles({
162162
buildTarget: BUILD_TARGETS.DIST,
163-
taskPrefix: 'scripts:core:dist',
163+
taskPrefix: TASK_PREFIXES[BUILD_TARGETS.DIST],
164164
}),
165165
// production
166166
prod: createTasksForScriptBundles({
167167
buildTarget: BUILD_TARGETS.PROD,
168-
taskPrefix: 'scripts:core:prod',
168+
taskPrefix: TASK_PREFIXES[BUILD_TARGETS.PROD],
169169
}),
170170
// built for CI tests
171171
test: createTasksForScriptBundles({
172172
buildTarget: BUILD_TARGETS.TEST,
173-
taskPrefix: 'scripts:core:test',
173+
taskPrefix: TASK_PREFIXES[BUILD_TARGETS.TEST],
174174
}),
175175
// built for CI test debugging
176176
testDev: createTasksForScriptBundles({
177177
buildTarget: BUILD_TARGETS.TEST_DEV,
178-
taskPrefix: 'scripts:core:test-live',
178+
taskPrefix: TASK_PREFIXES[BUILD_TARGETS.TEST_DEV],
179179
}),
180180
};
181181

development/build/utils.js

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const { readFileSync, writeFileSync } = require('fs');
33
const semver = require('semver');
44
const { capitalize } = require('lodash');
55
const { loadBuildTypesConfig } = require('../lib/build-type');
6-
const { BUILD_TARGETS, ENVIRONMENT } = require('./constants');
6+
const { BUILD_TARGETS, ENVIRONMENT, TASK_PREFIXES } = require('./constants');
77

88
/**
99
* Returns whether the current build is a development build or not.
@@ -29,6 +29,43 @@ function isTestBuild(buildTarget) {
2929
);
3030
}
3131

32+
/**
33+
* Extract the actual build target from a task name.
34+
*
35+
* Task names follow patterns like:
36+
* - 'scripts:core:dev:standardEntryPoints' -> 'dev'
37+
* - 'scripts:core:test:contentscript' -> 'test'
38+
* - 'scripts:core:test-live:sentry' -> 'testDev'
39+
* - 'test' -> 'test' (already a build target)
40+
*
41+
* @param {string} taskName - The task name or build target.
42+
* @returns {BUILD_TARGETS | string} The extracted build target.
43+
*/
44+
function getBuildTargetFromTask(taskName) {
45+
// If it's already a valid build target, return it
46+
const validTargets = Object.values(BUILD_TARGETS);
47+
if (validTargets.includes(taskName)) {
48+
return taskName;
49+
}
50+
51+
// Create reverse mapping from prefix to build target
52+
// Sort by prefix length descending to ensure longer prefixes match first
53+
// (e.g., 'scripts:core:test-live' before 'scripts:core:test')
54+
const prefixEntries = Object.entries(TASK_PREFIXES).sort(
55+
([, prefixA], [, prefixB]) => prefixB.length - prefixA.length,
56+
);
57+
58+
for (const [buildTarget, prefix] of prefixEntries) {
59+
if (taskName.startsWith(prefix)) {
60+
return buildTarget;
61+
}
62+
}
63+
64+
// If no match found, return the original task name
65+
// (getEnvironment will handle it appropriately)
66+
return taskName;
67+
}
68+
3269
/**
3370
* Map the current version to a format that is compatible with each browser.
3471
*
@@ -299,6 +336,7 @@ function makeSelfInjecting(filePath) {
299336
module.exports = {
300337
getBrowserVersionMap,
301338
getBuildName,
339+
getBuildTargetFromTask,
302340
getEnvironment,
303341
isDevBuild,
304342
isTestBuild,

development/build/utils.test.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { getEnvironment, getBuildTargetFromTask } from './utils';
2+
import { TASKS } from './constants';
3+
4+
describe('getBuildTargetFromTask', () => {
5+
it('passes through valid build targets', () => {
6+
expect(getBuildTargetFromTask('dev')).toBe('dev');
7+
expect(getBuildTargetFromTask('test')).toBe('test');
8+
expect(getBuildTargetFromTask('prod')).toBe('prod');
9+
expect(getBuildTargetFromTask('dist')).toBe('dist');
10+
expect(getBuildTargetFromTask('testDev')).toBe('testDev');
11+
});
12+
13+
it('extracts build target from task names', () => {
14+
expect(
15+
getBuildTargetFromTask(TASKS.SCRIPTS_CORE_DEV_STANDARD_ENTRY_POINTS),
16+
).toBe('dev');
17+
expect(
18+
getBuildTargetFromTask(TASKS.SCRIPTS_CORE_TEST_STANDARD_ENTRY_POINTS),
19+
).toBe('test');
20+
expect(
21+
getBuildTargetFromTask(TASKS.SCRIPTS_CORE_PROD_STANDARD_ENTRY_POINTS),
22+
).toBe('prod');
23+
expect(
24+
getBuildTargetFromTask(TASKS.SCRIPTS_CORE_DIST_STANDARD_ENTRY_POINTS),
25+
).toBe('dist');
26+
expect(
27+
getBuildTargetFromTask(
28+
TASKS.SCRIPTS_CORE_TEST_LIVE_STANDARD_ENTRY_POINTS,
29+
),
30+
).toBe('testDev');
31+
});
32+
33+
it('returns unknown patterns unchanged', () => {
34+
expect(getBuildTargetFromTask('unknown:task')).toBe('unknown:task');
35+
expect(getBuildTargetFromTask(TASKS.MANIFEST_DEV)).toBe(TASKS.MANIFEST_DEV);
36+
});
37+
});
38+
39+
describe('getEnvironment', () => {
40+
const { env } = process;
41+
42+
beforeEach(() => {
43+
process.env = { ...env };
44+
});
45+
46+
afterAll(() => {
47+
process.env = env;
48+
});
49+
50+
it('returns correct environment for build targets', () => {
51+
expect(getEnvironment({ buildTarget: 'prod' as never })).toBe('production');
52+
expect(getEnvironment({ buildTarget: 'dev' as never })).toBe('development');
53+
expect(getEnvironment({ buildTarget: 'test' as never })).toBe('testing');
54+
expect(getEnvironment({ buildTarget: 'testDev' as never })).toBe(
55+
'development',
56+
);
57+
expect(getEnvironment({ buildTarget: 'dist' as never })).toBe('other');
58+
});
59+
60+
it('returns RELEASE_CANDIDATE for dist on release branch', () => {
61+
process.env.GITHUB_REF_NAME = 'release/13.12.0';
62+
expect(getEnvironment({ buildTarget: 'dist' as never })).toBe(
63+
'release-candidate',
64+
);
65+
});
66+
67+
it('returns STAGING for dist on main branch', () => {
68+
process.env.GITHUB_REF_NAME = 'main';
69+
expect(getEnvironment({ buildTarget: 'dist' as never })).toBe('staging');
70+
});
71+
72+
it('returns PULL_REQUEST for dist on pull_request event', () => {
73+
process.env.GITHUB_EVENT_NAME = 'pull_request';
74+
expect(getEnvironment({ buildTarget: 'dist' as never })).toBe(
75+
'pull-request',
76+
);
77+
});
78+
79+
it('returns TESTING for test even with pull_request event', () => {
80+
process.env.GITHUB_EVENT_NAME = 'pull_request';
81+
expect(getEnvironment({ buildTarget: 'test' as never })).toBe('testing');
82+
});
83+
});

0 commit comments

Comments
 (0)