Skip to content

Commit c3c0ba9

Browse files
authored
Merge pull request #22 from dominykas/runs-on
2 parents d062b60 + 9b55056 commit c3c0ba9

File tree

4 files changed

+79
-23
lines changed

4 files changed

+79
-23
lines changed

.github/actions/prepare-node-test-matrix-action/action.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,15 @@ inputs:
1111
description: "Node.js version upgrade policy. Allowed values: `lts` (default), `lts/strict`, `all`."
1212
default: lts
1313
required: false
14+
runs-on:
15+
description: "Comma separated list of runner labels (note: not YAML!), see https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idruns-on."
16+
default: "ubuntu-latest"
17+
required: false
1418

1519
outputs:
1620
matrix:
1721
description: "A JSON with a list of Node.js versions matching the upgrade policy, where the minimum version is the one defined in the `package.json` `engines.node` field."
1822
lts-latest:
1923
description: "Which version of node is the latest active LTS."
24+
runs-on:
25+
description: "A JSON with a list of OS versions for use in `jobs.<job_id>.runs-on`"

.github/actions/prepare-node-test-matrix-action/index.js

+16-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,16 @@ const Semver = require('semver');
1616
const Package = require(Path.join(process.cwd(), 'package.json'));
1717

1818

19+
const internals = {};
20+
21+
22+
internals.setOutput = function (name, value, { debug }) {
23+
24+
debug('Output', { name, value });
25+
ActionsCore.setOutput(name, value);
26+
};
27+
28+
1929
exports.main = function ({ now = new Date(), pkg = Package, debug = console.info } = {}) {
2030

2131
if (!pkg.engines || !pkg.engines.node) {
@@ -81,8 +91,12 @@ exports.main = function ({ now = new Date(), pkg = Package, debug = console.info
8191
}
8292

8393
const sorted = versions.sort((a, b) => b - a);
84-
ActionsCore.setOutput('matrix', JSON.stringify(sorted));
85-
ActionsCore.setOutput('lts-latest', ltsLatest);
94+
internals.setOutput('matrix', JSON.stringify(sorted), { debug });
95+
internals.setOutput('lts-latest', ltsLatest, { debug });
96+
97+
const runsOnInput = ActionsCore.getInput('runs-on') || 'ubuntu-latest';
98+
const runsOn = runsOnInput.split(/[,\s]+/);
99+
internals.setOutput('runs-on', JSON.stringify(runsOn), { debug });
86100
};
87101

88102

.github/actions/prepare-node-test-matrix-action/test/index.js

+47-20
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ exports.main = function () {
4343

4444
const originalEnv = { ...process.env };
4545

46-
// does not fail with defaults
46+
// does not fail with defaults, cannot assert, as output is dependent on date
4747

4848
Assert.ok(exports.getOutput());
4949

@@ -60,19 +60,23 @@ exports.main = function () {
6060
process.env = { ...originalEnv };
6161
Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [
6262
'::set-output name=matrix::[14]',
63-
'::set-output name=lts-latest::12'
63+
'::set-output name=lts-latest::12',
64+
'::set-output name=runs-on::["ubuntu-latest"]'
6465
]);
6566
Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '*' } }), [
6667
'::set-output name=matrix::[14,12,10,8,6,4]',
67-
'::set-output name=lts-latest::12'
68+
'::set-output name=lts-latest::12',
69+
'::set-output name=runs-on::["ubuntu-latest"]'
6870
]);
6971
Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14 || ^12 || ^10' } }), [
7072
'::set-output name=matrix::[14,12,10]',
71-
'::set-output name=lts-latest::12'
73+
'::set-output name=lts-latest::12',
74+
'::set-output name=runs-on::["ubuntu-latest"]'
7275
]);
7376
Assert.deepStrictEqual(exports.getOutput(new Date('2010-07-01'), { engines: { node: '*' } }), [
7477
'::set-output name=matrix::[]',
75-
'::set-output name=lts-latest::4'
78+
'::set-output name=lts-latest::4',
79+
'::set-output name=runs-on::["ubuntu-latest"]'
7680
]);
7781

7882

@@ -81,69 +85,92 @@ exports.main = function () {
8185
process.env = { ...originalEnv, 'INPUT_UPGRADE-POLICY': 'lts' };
8286
Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [
8387
'::set-output name=matrix::[14,12,10]',
84-
'::set-output name=lts-latest::12'
88+
'::set-output name=lts-latest::12',
89+
'::set-output name=runs-on::["ubuntu-latest"]'
8590
]);
8691
Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [
8792
'::set-output name=matrix::[15,14,12,10]',
88-
'::set-output name=lts-latest::14'
93+
'::set-output name=lts-latest::14',
94+
'::set-output name=runs-on::["ubuntu-latest"]'
8995
]);
9096
Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [
9197
'::set-output name=matrix::[16,15,14,12,10]',
92-
'::set-output name=lts-latest::14'
98+
'::set-output name=lts-latest::14',
99+
'::set-output name=runs-on::["ubuntu-latest"]'
93100
]);
94101
Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [
95102
'::set-output name=matrix::[16,14,12,10]',
96-
'::set-output name=lts-latest::14'
103+
'::set-output name=lts-latest::14',
104+
'::set-output name=runs-on::["ubuntu-latest"]'
97105
]);
98106
Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [
99107
'::set-output name=matrix::[17,16,14,12,10]',
100-
'::set-output name=lts-latest::16'
108+
'::set-output name=lts-latest::16',
109+
'::set-output name=runs-on::["ubuntu-latest"]'
101110
]);
102111

103112

104113
process.env = { ...originalEnv, 'INPUT_UPGRADE-POLICY': 'lts/strict' };
105114
Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [
106115
'::set-output name=matrix::[12,10]',
107-
'::set-output name=lts-latest::12'
116+
'::set-output name=lts-latest::12',
117+
'::set-output name=runs-on::["ubuntu-latest"]'
108118
]);
109119
Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [
110120
'::set-output name=matrix::[14,12,10]',
111-
'::set-output name=lts-latest::14'
121+
'::set-output name=lts-latest::14',
122+
'::set-output name=runs-on::["ubuntu-latest"]'
112123
]);
113124
Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [
114125
'::set-output name=matrix::[14,12,10]',
115-
'::set-output name=lts-latest::14'
126+
'::set-output name=lts-latest::14',
127+
'::set-output name=runs-on::["ubuntu-latest"]'
116128
]);
117129
Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [
118130
'::set-output name=matrix::[14,12,10]',
119-
'::set-output name=lts-latest::14'
131+
'::set-output name=lts-latest::14',
132+
'::set-output name=runs-on::["ubuntu-latest"]'
120133
]);
121134
Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [
122135
'::set-output name=matrix::[16,14,12,10]',
123-
'::set-output name=lts-latest::16'
136+
'::set-output name=lts-latest::16',
137+
'::set-output name=runs-on::["ubuntu-latest"]'
124138
]);
125139

126140

127141
process.env = { ...originalEnv, 'INPUT_UPGRADE-POLICY': 'all' };
128142
Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [
129143
'::set-output name=matrix::[14,13,12,11,10]',
130-
'::set-output name=lts-latest::12'
144+
'::set-output name=lts-latest::12',
145+
'::set-output name=runs-on::["ubuntu-latest"]'
131146
]);
132147
Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [
133148
'::set-output name=matrix::[15,14,13,12,11,10]',
134-
'::set-output name=lts-latest::14'
149+
'::set-output name=lts-latest::14',
150+
'::set-output name=runs-on::["ubuntu-latest"]'
135151
]);
136152
Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [
137153
'::set-output name=matrix::[16,15,14,13,12,11,10]',
138-
'::set-output name=lts-latest::14'
154+
'::set-output name=lts-latest::14',
155+
'::set-output name=runs-on::["ubuntu-latest"]'
139156
]);
140157
Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [
141158
'::set-output name=matrix::[16,15,14,13,12,11,10]',
142-
'::set-output name=lts-latest::14'
159+
'::set-output name=lts-latest::14',
160+
'::set-output name=runs-on::["ubuntu-latest"]'
143161
]);
144162
Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [
145163
'::set-output name=matrix::[17,16,15,14,13,12,11,10]',
146-
'::set-output name=lts-latest::16'
164+
'::set-output name=lts-latest::16',
165+
'::set-output name=runs-on::["ubuntu-latest"]'
166+
]);
167+
168+
// runs-on - simple comma separated list
169+
process.env = { ...originalEnv, 'INPUT_RUNS-ON': 'ubuntu-latest, windows-latest, macos-latest' };
170+
Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [
171+
'::set-output name=matrix::[14]',
172+
'::set-output name=lts-latest::12',
173+
'::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]'
147174
]);
148175
};
149176

.github/workflows/node-test.yaml

+10-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ on:
77
default: lts
88
required: false
99
type: string
10+
runs-on:
11+
description: "Comma separated list of runner labels (note: not YAML!), see https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idruns-on."
12+
default: "ubuntu-latest"
13+
required: false
14+
type: string
1015

1116
post-checkout-steps:
1217
description: "Steps to execute after checkout (i.e. before installing dependencies)"
@@ -36,6 +41,7 @@ jobs:
3641

3742
outputs:
3843
matrix: ${{ steps.set-matrix.outputs.matrix }}
44+
runs-on: ${{ steps.set-matrix.outputs.runs-on }}
3945
lts-latest: ${{ steps.set-matrix.outputs.lts-latest }}
4046

4147
steps:
@@ -48,14 +54,17 @@ jobs:
4854
id: set-matrix
4955
with:
5056
upgrade-policy: ${{ inputs.upgrade-policy }}
57+
runs-on: ${{ inputs.runs-on }}
5158

5259
test:
53-
runs-on: ubuntu-latest
5460
needs: prepare-node-matrix
5561

5662
strategy:
5763
matrix:
5864
node-version: ${{ fromJson(needs.prepare-node-matrix.outputs.matrix) }}
65+
runs-on: ${{ fromJson(needs.prepare-node-matrix.outputs.runs-on) }}
66+
67+
runs-on: ${{ matrix.runs-on }}
5968

6069
steps:
6170

0 commit comments

Comments
 (0)