diff --git a/broccoli/build-info.js b/broccoli/build-info.js index 1b4c5df4f45..2419e0ef5a2 100644 --- a/broccoli/build-info.js +++ b/broccoli/build-info.js @@ -75,8 +75,8 @@ function buildGitInfo(root) { function buildFromParts(packageVersion, gitInfo) { let { tag, branch, sha } = gitInfo; let shortSha = sha.slice(0, 8); - if (tag) { - let tagVersion = parseTagVersion(tag); + let tagVersion = tag ? parseTagVersion(tag) : null; + if (tag && tagVersion) { return { tag, branch: null, @@ -126,7 +126,8 @@ function readPackageVersion(root) { */ function parseTagVersion(tag) { if (tag) { - return semver.parse(tag.replace(/-ember-source$/, '')).version; + let parsed = semver.parse(tag.replace(/-ember-source$/, '')); + return parsed ? parsed.version : null; } } diff --git a/tests/node/build-info-test.js b/tests/node/build-info-test.js index f25bbdef90a..aede531aa48 100644 --- a/tests/node/build-info-test.js +++ b/tests/node/build-info-test.js @@ -62,10 +62,12 @@ QUnit.module('parseTagVersion', () => { }); }); - QUnit.test('parseTagVersion raises on non-semver tags', function (assert) { - assert.throws(() => { - parseTagVersion('some-non-version-tag'); - }); + QUnit.test('parseTagVersion returns null for non-semver tags', function (assert) { + assert.equal(parseTagVersion('some-non-version-tag'), null); + }); + + QUnit.test('parseTagVersion returns null for non-ember-source package tags', function (assert) { + assert.equal(parseTagVersion('v2.1.1-@glimmer/component'), null); }); }); @@ -134,6 +136,27 @@ QUnit.module('buildFromParts', () => { isBuildForTag: true, }, }, + { + args: [ + '3.4.4', // Non-ember-source tag (e.g. @glimmer/component) should be treated as channel build + { + sha: 'f572d396fae9206628714fb2ce00f72e94f2258f', + branch: 'main', + tag: 'v2.1.1-@glimmer/component', + }, + ], + expected: { + tag: null, + branch: 'main', + sha: 'f572d396fae9206628714fb2ce00f72e94f2258f', + shortSha: 'f572d396', + channel: 'canary', + packageVersion: '3.4.4', + tagVersion: null, + version: '3.4.4-canary+f572d396', + isBuildForTag: false, + }, + }, ].forEach(({ args, expected }) => { QUnit.test(JSON.stringify(args), function (assert) { assert.deepEqual(buildFromParts(...args), expected);