Skip to content

Commit f0caf7a

Browse files
bcouetilCopilot
andcommitted
feat(list-csv): remove description, improve allowFailure and needs output
- Remove description column from --list-csv entirely for stable CSV structure (description is already visible in --list) - Improve allowFailure to properly render exit_codes as [code1,code2] - Improve needs to show empty string when null (stage ordering) vs [] when explicitly set to no dependencies Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 17ffa0b commit f0caf7a

5 files changed

Lines changed: 52 additions & 20 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@
99
/.gitlab-ci-local/
1010
.DS_Store
1111
.vscode
12+
.history
13+
/tmp/
1214
/.gitlab-ci.yml

README.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -201,25 +201,27 @@ deploy-job deploy never false [build-job]
201201
The command `gitlab-ci-local --list-csv` will output the pipeline jobs as csv formatted list and will also filter all
202202
jobs which are set
203203
to `when: never`.
204-
The description will always be wrapped in quotes (even if there is none) to prevent semicolons in the description
205-
disturb the csv structure.
206204

207205
```text
208-
name;description;stage;when;allow_failure;needs
209-
test-job;"Run Tests";test;on_success;false;[]
210-
build-job;"";build;on_success;true;[test-job]
206+
name;stage;when;allowFailure;needs
207+
test-job;test;on_success;false;
208+
build-job;build;on_success;true;[test-job]
209+
deploy-job;deploy;on_success;[99];
211210
```
212211

212+
- **allowFailure**: `true`, `false`, or `[exit_code1,exit_code2]` when specific exit codes are allowed to fail
213+
- **needs**: empty when not specified (job follows stage ordering), `[]` when explicitly set to no dependencies (job starts immediately)
214+
213215
#### --list-csv-all
214216

215-
Same as `--list-csv-all` but will also print out jobs which are set to `when: never` (directly and implicit e.g. via
217+
Same as `--list-csv` but will also print out jobs which are set to `when: never` (directly and implicit e.g. via
216218
rules).
217219

218220
```text
219-
name;description;stage;when;allow_failure;needs
220-
test-job;"Run Tests";test;on_success;false;[]
221-
build-job;"";build;on_success;true;[test-job]
222-
deploy-job;"";deploy;never;false;[build-job]
221+
name;stage;when;allowFailure;needs
222+
test-job;test;on_success;false;
223+
build-job;build;on_success;true;[test-job]
224+
deploy-job;deploy;never;false;
223225
```
224226

225227
## Quirks

src/commander.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,10 +267,20 @@ export class Commander {
267267
jobs = jobs.filter(j => j.when !== "never");
268268
}
269269

270-
writeStreams.stdout("name;description;stage;when;allowFailure;needs\n");
270+
writeStreams.stdout("name;stage;when;allowFailure;needs\n");
271+
271272
jobs.forEach((job) => {
272-
const needs = job.needs?.filter(n => !n.project && !n.pipeline).map(n => n.job).join(",") ?? [];
273-
writeStreams.stdout(`${job.name};"${job.description}";${job.stage};${job.when};${job.allowFailure ? "true" : "false"};[${needs}]\n`);
273+
const needs = job.needs === null ? "" : `[${job.needs.filter(n => !n.project && !n.pipeline).map(n => n.job).join(",")}]`;
274+
let allowFailure: string;
275+
if (typeof job.allowFailure === "object") {
276+
const codes = Array.isArray(job.allowFailure.exit_codes) ? job.allowFailure.exit_codes : [job.allowFailure.exit_codes];
277+
allowFailure = `[${codes.join(",")}]`;
278+
} else {
279+
allowFailure = job.allowFailure ? "true" : "false";
280+
}
281+
282+
const row = [job.name, job.stage, job.when, allowFailure, needs].join(";");
283+
writeStreams.stdout(`${row}\n`);
274284
});
275285
}
276286

tests/test-cases/list-csv-case/.gitlab-ci.yml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
stages: [test, build]
2+
stages: [test, build, deploy]
33

44
# @Description Run Tests
55
test-job:
@@ -14,3 +14,18 @@ build-job:
1414
allow_failure: true
1515
script:
1616
- 'echo "Build something"'
17+
18+
exit-codes-job:
19+
stage: build
20+
needs: []
21+
allow_failure:
22+
exit_codes: [42, 137]
23+
script:
24+
- 'echo "Exit codes"'
25+
26+
deploy-job:
27+
stage: deploy
28+
allow_failure:
29+
exit_codes: 1
30+
script:
31+
- 'echo "Deploy"'

tests/test-cases/list-csv-case/integration.test.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@ test.concurrent("list-csv-case --list-csv", async () => {
1616
}, writeStreams);
1717

1818
const expected = [
19-
"name;description;stage;when;allowFailure;needs",
20-
"test-job;\"Run Tests\";test;on_success;false;[]",
21-
"build-job;\"\";build;on_success;true;[test-job]",
19+
"name;stage;when;allowFailure;needs",
20+
"test-job;test;on_success;false;",
21+
"build-job;build;on_success;true;[test-job]",
22+
"exit-codes-job;build;on_success;[42,137];[]",
23+
"deploy-job;deploy;on_success;[1];",
2224
];
2325
expect(writeStreams.stdoutLines).toEqual(expect.arrayContaining(expected));
2426
});
@@ -34,10 +36,11 @@ test.concurrent("list-csv-case --list-csv colon should add process descriptors w
3436
}, writeStreams);
3537

3638
const expected = [
37-
"name;description;stage;when;allowFailure;needs",
38-
"test-job;\"Run;Tests\";test;on_success;false;[]",
39-
"build-job;\"\";build;on_success;true;[test-job]",
39+
"name;stage;when;allowFailure;needs",
40+
"test-job;test;on_success;false;",
41+
"build-job;build;on_success;true;[test-job]",
4042
];
4143
expect(writeStreams.stdoutLines).toEqual(expect.arrayContaining(expected));
4244
});
4345

46+

0 commit comments

Comments
 (0)