Skip to content

Commit 4739609

Browse files
committed
fix: reject non-array needs with clear error
1 parent 14df5b2 commit 4739609

3 files changed

Lines changed: 28 additions & 0 deletions

File tree

src/data-expander.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ export function needsComplex (data: any) {
129129
export function needsEach (jobName: string, gitlabData: any) {
130130
const jobData = gitlabData[jobName];
131131
if (!jobData.needs) return;
132+
assert(Array.isArray(jobData.needs), chalk`{blueBright ${jobName}} {yellow needs:} must be an array`);
132133

133134
for (const [i, n] of Object.entries<any>(jobData.needs)) {
134135
jobData.needs[i] = needsComplex(n);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
build-job:
3+
script:
4+
- echo "build"
5+
6+
dev-job:
7+
needs: build-job
8+
script:
9+
- echo "dev"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import {WriteStreamsMock} from "../../../src/write-streams.js";
2+
import {handler} from "../../../src/handler.js";
3+
import {initSpawnSpy} from "../../mocks/utils.mock.js";
4+
import {WhenStatics} from "../../mocks/when-statics.js";
5+
import chalk from "chalk-template";
6+
7+
beforeAll(() => {
8+
initSpawnSpy(WhenStatics.all);
9+
});
10+
11+
test.concurrent("needs-not-array <dev-job>", async () => {
12+
const writeStreams = new WriteStreamsMock();
13+
14+
await expect(handler({
15+
cwd: "tests/test-cases/needs-not-array",
16+
stateDir: ".gitlab-ci-local-needs-not-array",
17+
}, writeStreams)).rejects.toThrow(chalk`{blueBright dev-job} {yellow needs:} must be an array`);
18+
});

0 commit comments

Comments
 (0)