Skip to content

Commit 318ea44

Browse files
committed
feat(node-version): set the reusable workflow for release based on node version
since projects that are using older node versions dont support the use of the latest version of semantic-release
1 parent ac8fd8d commit 318ea44

File tree

7 files changed

+27
-27
lines changed

7 files changed

+27
-27
lines changed

src/semantic-release/ci-providers/github-workflows/lifter-test.js

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {assert} from 'chai';
77
import sinon from 'sinon';
88

99
import * as releaseTriggerNeeds from './release-trigger-needs';
10+
import * as reusableReleaseWorkflow from './reusable-release-workflow';
1011
import * as releaseWorkflowLifter from './release-workflow-for-alpha/lifter';
1112
import lift from './lifter';
1213

@@ -22,9 +23,10 @@ suite('github-workflows lifter for semantic-release', () => {
2223
const branchTriggers = any.listOf(any.word);
2324
const moreBranchTriggers = any.listOf(any.word);
2425
const neededJobsToTriggerRelease = any.listOf(any.word);
26+
const reusableReleaseWorkflowReference = any.string();
2527
const modernReleaseJobDefinition = {
2628
needs: neededJobsToTriggerRelease,
27-
uses: 'form8ion/.github/.github/workflows/release-package.yml@master',
29+
uses: reusableReleaseWorkflowReference,
2830
// eslint-disable-next-line no-template-curly-in-string
2931
secrets: {NPM_TOKEN: '${{ secrets.NPM_PUBLISH_TOKEN }}'}
3032
};
@@ -37,10 +39,14 @@ suite('github-workflows lifter for semantic-release', () => {
3739
sandbox.stub(core, 'writeConfigFile');
3840
sandbox.stub(releaseWorkflowLifter, 'default');
3941
sandbox.stub(releaseTriggerNeeds, 'default');
42+
sandbox.stub(reusableReleaseWorkflow, 'determineAppropriateWorkflow');
4043

4144
const commonVerificationWorkflowContents = any.string();
4245
fs.readFile.withArgs(`${workflowsDirectory}/node-ci.yml`, 'utf-8').resolves(commonVerificationWorkflowContents);
4346
jsYaml.load.withArgs(commonVerificationWorkflowContents).returns({on: {push: {branches: []}}, jobs: {}});
47+
reusableReleaseWorkflow.determineAppropriateWorkflow
48+
.withArgs(nodeVersion)
49+
.returns(reusableReleaseWorkflowReference);
4450
});
4551

4652
teardown(() => sandbox.restore());
@@ -117,7 +123,7 @@ suite('github-workflows lifter for semantic-release', () => {
117123
jobs: existingJobs
118124
});
119125

120-
await lift({projectRoot});
126+
await lift({projectRoot, nodeVersion});
121127

122128
assert.calledWith(
123129
core.writeConfigFile,
@@ -156,7 +162,7 @@ suite('github-workflows lifter for semantic-release', () => {
156162
jobs: existingJobs
157163
});
158164

159-
await lift({projectRoot});
165+
await lift({projectRoot, nodeVersion});
160166

161167
assert.calledWith(
162168
core.writeConfigFile,
@@ -170,12 +176,7 @@ suite('github-workflows lifter for semantic-release', () => {
170176
jobs: {
171177
...jobs,
172178
[jobNameContainingCycjimmyAction]: {steps: otherStepsInJobContainingCycJimmyAction},
173-
release: {
174-
needs: neededJobsToTriggerRelease,
175-
uses: 'form8ion/.github/.github/workflows/release-package.yml@master',
176-
// eslint-disable-next-line no-template-curly-in-string
177-
secrets: {NPM_TOKEN: '${{ secrets.NPM_PUBLISH_TOKEN }}'}
178-
}
179+
release: modernReleaseJobDefinition
179180
}
180181
}
181182
}
@@ -193,7 +194,7 @@ suite('github-workflows lifter for semantic-release', () => {
193194
jobs
194195
});
195196

196-
await lift({projectRoot});
197+
await lift({projectRoot, nodeVersion});
197198

198199
assert.calledWith(
199200
core.writeConfigFile,
@@ -204,15 +205,7 @@ suite('github-workflows lifter for semantic-release', () => {
204205
config: {
205206
...parsedVerificationWorkflowContents,
206207
on: {push: {branches: [...branchTriggers, ...moreBranchTriggers, 'beta']}},
207-
jobs: {
208-
...jobs,
209-
release: {
210-
needs: neededJobsToTriggerRelease,
211-
uses: 'form8ion/.github/.github/workflows/release-package.yml@master',
212-
// eslint-disable-next-line no-template-curly-in-string
213-
secrets: {NPM_TOKEN: '${{ secrets.NPM_PUBLISH_TOKEN }}'}
214-
}
215-
}
208+
jobs: {...jobs, release: modernReleaseJobDefinition}
216209
}
217210
}
218211
);

src/semantic-release/ci-providers/github-workflows/lifter.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {fileTypes, writeConfigFile} from '@form8ion/core';
44

55
import determineTriggerNeedsFrom from './release-trigger-needs';
66
import {lift as liftReleaseWorkflow} from './release-workflow-for-alpha';
7+
import {determineAppropriateWorkflow} from './reusable-release-workflow';
78

89
function removeCycjimmyActionFrom(otherJobs) {
910
return Object.fromEntries(Object.entries(otherJobs).map(([jobName, job]) => [
@@ -33,7 +34,7 @@ export default async function ({projectRoot, nodeVersion}) {
3334
...removeCycjimmyActionFrom(otherJobs),
3435
release: {
3536
needs: determineTriggerNeedsFrom(otherJobs),
36-
uses: 'form8ion/.github/.github/workflows/release-package.yml@master',
37+
uses: determineAppropriateWorkflow(nodeVersion),
3738
// eslint-disable-next-line no-template-curly-in-string
3839
secrets: {NPM_TOKEN: '${{ secrets.NPM_PUBLISH_TOKEN }}'}
3940
}

src/semantic-release/ci-providers/github-workflows/release-workflow-for-alpha/scaffolder-test.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import {assert} from 'chai';
66
import sinon from 'sinon';
77
import any from '@travi/any';
88

9+
import * as reusableWorkflow from '../reusable-release-workflow';
910
import scaffoldReleaseWorkflow from './scaffolder';
1011

1112
suite('github release workflow scaffolder', () => {
1213
let sandbox;
14+
const nodeVersion = any.string();
1315

1416
setup(() => {
1517
sandbox = sinon.createSandbox();
@@ -19,6 +21,7 @@ suite('github release workflow scaffolder', () => {
1921
sandbox.stub(githubWorkflowsCore, 'scaffoldCheckoutStep');
2022
sandbox.stub(githubWorkflowsCore, 'scaffoldNodeSetupStep');
2123
sandbox.stub(githubWorkflowsCore, 'scaffoldDependencyInstallationStep');
24+
sandbox.stub(reusableWorkflow, 'determineAppropriateWorkflow');
2225
});
2326

2427
teardown(() => sandbox.restore());
@@ -27,21 +30,23 @@ suite('github release workflow scaffolder', () => {
2730
const projectRoot = any.string();
2831
const workflowsDirectory = `${projectRoot}/.github/workflows`;
2932
const dumpedWorkflowYaml = any.simpleObject();
33+
const reusableReleaseWorkflowReference = any.string();
34+
reusableWorkflow.determineAppropriateWorkflow.withArgs(nodeVersion).returns(reusableReleaseWorkflowReference);
3035
jsYaml.dump
3136
.withArgs({
3237
name: 'Release',
3338
on: {push: {branches: ['alpha']}},
3439
jobs: {
3540
release: {
36-
uses: 'form8ion/.github/.github/workflows/release-package.yml@master',
41+
uses: reusableReleaseWorkflowReference,
3742
// eslint-disable-next-line no-template-curly-in-string
3843
secrets: {NPM_TOKEN: '${{ secrets.NPM_PUBLISH_TOKEN }}'}
3944
}
4045
}
4146
})
4247
.returns(dumpedWorkflowYaml);
4348

44-
await scaffoldReleaseWorkflow({projectRoot});
49+
await scaffoldReleaseWorkflow({projectRoot, nodeVersion});
4550

4651
assert.calledWith(fs.writeFile, `${workflowsDirectory}/release.yml`, dumpedWorkflowYaml);
4752
});

src/semantic-release/ci-providers/github-workflows/release-workflow-for-alpha/scaffolder.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import {fileTypes, writeConfigFile} from '@form8ion/core';
22

3-
export default async function ({projectRoot}) {
3+
import {determineAppropriateWorkflow} from '../reusable-release-workflow';
4+
5+
export default async function ({projectRoot, nodeVersion}) {
46
await writeConfigFile({
57
format: fileTypes.YAML,
68
path: `${projectRoot}/.github/workflows`,
@@ -10,7 +12,7 @@ export default async function ({projectRoot}) {
1012
on: {push: {branches: ['alpha']}},
1113
jobs: {
1214
release: {
13-
uses: 'form8ion/.github/.github/workflows/release-package.yml@master',
15+
uses: determineAppropriateWorkflow(nodeVersion),
1416
// eslint-disable-next-line no-template-curly-in-string
1517
secrets: {NPM_TOKEN: '${{ secrets.NPM_PUBLISH_TOKEN }}'}
1618
}

src/semantic-release/ci-providers/github-workflows/reusable-release-workflow-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ suite('reusable release workflow', () => {
1515
test('that the reusable workflow for semantic-release v19 is defined for a lower node version', async () => {
1616
assert.equal(
1717
determineAppropriateWorkflow(any.fromList(['14', '16', '17'])),
18-
'form8ion/.github/.github/workflows/release-package-sematnic-release-19.yml@master'
18+
'form8ion/.github/.github/workflows/release-package-semantic-release-19.yml@master'
1919
);
2020
});
2121
});
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export function determineAppropriateWorkflow(nodeVersion) {
2-
if (18 > nodeVersion) return 'form8ion/.github/.github/workflows/release-package-sematnic-release-19.yml@master';
2+
if (18 > nodeVersion) return 'form8ion/.github/.github/workflows/release-package-semantic-release-19.yml@master';
33

44
return 'form8ion/.github/.github/workflows/release-package.yml@master';
55
}

test/integration/features/lift/older-node.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
Feature: older node version
22

3-
@wip
43
Scenario: project configured to use older node
54
Given the project uses node 16
65
And semantic-release is configured

0 commit comments

Comments
 (0)