Skip to content

Commit ec05966

Browse files
committed
feat(workflow-result): depend on verify-matrix when it exists
1 parent e0887e9 commit ec05966

7 files changed

Lines changed: 66 additions & 17 deletions

File tree

src/jobs/lifter.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import buildNodeVersionMatrix from './node-version-matrix-builder.js';
22
import insertMissingJobs from './missing-job-inserter.js';
33
import * as matrixVerificationJobEnhancer from './verify-matrix/index.js';
4+
import * as workflowResultJobEnhancer from './workflow-result/index.js';
45
import {lift as liftJob} from '../job/index.js';
56

67
export default function ({jobs, engines, runner}) {
78
const nodeEnginesMatrix = buildNodeVersionMatrix(engines);
89

9-
const liftedJobs = Object.entries(jobs).map(([jobName, job]) => liftJob(
10-
[jobName, job],
11-
[matrixVerificationJobEnhancer],
12-
{inRangeNodeVersions: nodeEnginesMatrix}
13-
));
10+
const jobEntries = Object.entries(jobs);
11+
const jobsWithMissingInserted = insertMissingJobs({versions: nodeEnginesMatrix, jobs: jobEntries, runner});
1412

15-
return Object.fromEntries(insertMissingJobs({versions: nodeEnginesMatrix, jobs: liftedJobs, runner}));
13+
return Object.fromEntries(jobsWithMissingInserted.map(([jobName, job]) => liftJob(
14+
[jobName, job],
15+
[matrixVerificationJobEnhancer, workflowResultJobEnhancer],
16+
{inRangeNodeVersions: nodeEnginesMatrix, jobs}
17+
)));
1618
}

src/jobs/lifter.test.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {when} from 'jest-when';
66

77
import {lift as liftJob} from '../job/index.js';
88
import * as matrixVerificationJobEnhancer from './verify-matrix/index.js';
9+
import * as workflowResultJobEnhancer from './workflow-result/index.js';
910
import insertMissingJob from './missing-job-inserter.js';
1011
import buildNodeVersionMatrix from './node-version-matrix-builder.js';
1112
import liftJobs from './lifter.js';
@@ -17,26 +18,29 @@ vi.mock('../job/index.js');
1718
describe('steps lifter', () => {
1819
it('should lift the steps', async () => {
1920
const jobNames = any.listOf(any.word);
21+
const jobNamesWithMissingInjected = any.listOf(any.word);
2022
const jobDefinitions = jobNames.map(any.simpleObject);
21-
const liftedJobDefinitions = jobDefinitions.map(any.simpleObject);
23+
const jobDefinitionsWithMissingInjected = jobNamesWithMissingInjected.map(any.simpleObject);
24+
const liftedJobDefinitions = jobDefinitionsWithMissingInjected.map(any.simpleObject);
2225
const supportedNodeVersionRange = any.string();
2326
const supportedNodeVersions = any.listOf(any.integer);
24-
const jobPairsWithMissingInjected = zip(any.listOf(any.word), any.listOf(any.simpleObject));
2527
const runner = any.word();
28+
const jobs = Object.fromEntries(zip(jobNames, jobDefinitions));
2629
when(buildNodeVersionMatrix).calledWith(supportedNodeVersionRange).mockReturnValue(supportedNodeVersions);
2730
when(insertMissingJob)
28-
.calledWith({versions: supportedNodeVersions, jobs: zip(jobNames, liftedJobDefinitions), runner})
29-
.mockReturnValue(jobPairsWithMissingInjected);
30-
zip(jobDefinitions, liftedJobDefinitions, jobNames).forEach(
31+
.calledWith({versions: supportedNodeVersions, jobs: zip(jobNames, jobDefinitions), runner})
32+
.mockReturnValue(zip(jobNamesWithMissingInjected, jobDefinitionsWithMissingInjected));
33+
zip(jobDefinitionsWithMissingInjected, liftedJobDefinitions, jobNamesWithMissingInjected).forEach(
3134
([job, liftedJob, jobName]) => when(liftJob)
32-
.calledWith([jobName, job], [matrixVerificationJobEnhancer], {inRangeNodeVersions: supportedNodeVersions})
35+
.calledWith(
36+
[jobName, job],
37+
[matrixVerificationJobEnhancer, workflowResultJobEnhancer],
38+
{inRangeNodeVersions: supportedNodeVersions, jobs}
39+
)
3340
.mockReturnValue([jobName, liftedJob])
3441
);
3542

36-
expect(await liftJobs({
37-
jobs: Object.fromEntries(zip(jobNames, jobDefinitions)),
38-
engines: supportedNodeVersionRange,
39-
runner
40-
})).toEqual(Object.fromEntries(jobPairsWithMissingInjected));
43+
expect(await liftJobs({jobs, engines: supportedNodeVersionRange, runner}))
44+
.toEqual(Object.fromEntries(zip(jobNamesWithMissingInjected, liftedJobDefinitions)));
4145
});
4246
});

src/jobs/workflow-result/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
export {default as scaffold} from './scaffolder.js';
2+
export {default as test} from './tester.js';
3+
export {default as lift} from './lifter.js';

src/jobs/workflow-result/lifter.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export default function (job, {jobs}) {
2+
if (!Object.keys(jobs).includes('verify-matrix')) return job;
3+
4+
return {...job, needs: ['verify', 'verify-matrix']};
5+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import {describe, it, expect} from 'vitest';
2+
import any from '@travi/any';
3+
4+
import liftWorkflowResultJob from './lifter.js';
5+
6+
describe('workflow-result job lifter', () => {
7+
const existingJobDetails = any.simpleObject();
8+
9+
it('should not modify the job if no `verify-matrix` job exists', () => {
10+
expect(liftWorkflowResultJob(existingJobDetails, {jobs: any.simpleObject()})).toEqual(existingJobDetails);
11+
});
12+
13+
it('should make the job depend on the `verify-matrix` job if it exists', () => {
14+
expect(liftWorkflowResultJob(
15+
existingJobDetails,
16+
{jobs: {...any.simpleObject(), 'verify-matrix': any.simpleObject()}}
17+
)).toEqual({...existingJobDetails, needs: ['verify', 'verify-matrix']});
18+
});
19+
});

src/jobs/workflow-result/tester.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default function ({jobName}) {
2+
return 'workflow-result' === jobName;
3+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import any from '@travi/any';
2+
import {it, describe, expect} from 'vitest';
3+
4+
import jobIsMatrixVerification from './tester.js';
5+
6+
describe('workflow-result predicate', () => {
7+
it('should return `true` when the job name is `workflow-result`', () => {
8+
expect(jobIsMatrixVerification({jobName: 'workflow-result'})).toBe(true);
9+
});
10+
11+
it('should return `false` when the job name is not `workflow-result`', () => {
12+
expect(jobIsMatrixVerification({jobName: any.word()})).toBe(false);
13+
});
14+
});

0 commit comments

Comments
 (0)