@intentius/chant-lexicon-gitlab 0.41.20 → 0.44.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/integrity.json +2 -2
  2. package/dist/manifest.json +1 -1
  3. package/dist/okf/index.md +55 -0
  4. package/dist/okf/rules/WGL001.md +15 -0
  5. package/dist/okf/rules/WGL002.md +15 -0
  6. package/dist/okf/rules/WGL003.md +15 -0
  7. package/dist/okf/rules/WGL004.md +11 -0
  8. package/dist/okf/rules/WGL010.md +15 -0
  9. package/dist/okf/rules/WGL011.md +15 -0
  10. package/dist/okf/rules/WGL012.md +11 -0
  11. package/dist/okf/rules/WGL013.md +15 -0
  12. package/dist/okf/rules/WGL014.md +15 -0
  13. package/dist/okf/rules/WGL015.md +11 -0
  14. package/dist/okf/rules/WGL016.md +11 -0
  15. package/dist/okf/rules/WGL017.md +15 -0
  16. package/dist/okf/rules/WGL018.md +15 -0
  17. package/dist/okf/rules/WGL019.md +15 -0
  18. package/dist/okf/rules/WGL020.md +15 -0
  19. package/dist/okf/rules/WGL021.md +11 -0
  20. package/dist/okf/rules/WGL022.md +16 -0
  21. package/dist/okf/rules/WGL023.md +15 -0
  22. package/dist/okf/rules/WGL024.md +15 -0
  23. package/dist/okf/rules/WGL025.md +15 -0
  24. package/dist/okf/rules/WGL026.md +15 -0
  25. package/dist/okf/rules/WGL027.md +15 -0
  26. package/dist/okf/rules/WGL028.md +15 -0
  27. package/dist/okf/rules/WGL029.md +11 -0
  28. package/dist/okf/rules/WGL030.md +11 -0
  29. package/dist/okf/rules/WGL031.md +15 -0
  30. package/dist/okf/rules/WGL032.md +11 -0
  31. package/dist/okf/rules/WGL033.md +15 -0
  32. package/dist/okf/rules/WGL034.md +15 -0
  33. package/dist/okf/rules/WGL035.md +15 -0
  34. package/dist/okf/rules/WGL036.md +15 -0
  35. package/dist/okf/rules/WGL037.md +15 -0
  36. package/dist/okf/rules/WGL038.md +15 -0
  37. package/dist/okf/rules/WGL039.md +15 -0
  38. package/dist/okf/rules/WGL040.md +15 -0
  39. package/dist/okf/rules/WGL041.md +15 -0
  40. package/dist/okf/rules/WGL042.md +15 -0
  41. package/dist/okf/rules/WGL043.md +15 -0
  42. package/dist/okf/rules/WGL044.md +15 -0
  43. package/dist/okf/rules/WGL045.md +15 -0
  44. package/dist/okf/rules/WGL046.md +15 -0
  45. package/dist/okf/rules/WGL047.md +15 -0
  46. package/dist/okf/rules/WGL048.md +11 -0
  47. package/dist/okf/types/Default.md +29 -0
  48. package/dist/okf/types/Job.md +86 -0
  49. package/dist/okf/types/Workflow.md +15 -0
  50. package/package.json +3 -3
  51. package/src/package-cli.ts +2 -19
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "algorithm": "sha256",
3
3
  "artifacts": {
4
- "manifest.json": "b735d6b0ca7dddfcb9b75e81d13864af5aa9250dd1711b982dfe606680dab1b4",
4
+ "manifest.json": "f82c7b0dfe276a36be2d81b0e167d1916b46db86710c5e14c2ff497d600b6248",
5
5
  "meta.json": "931fc3246a55645b1493080bbeb160e5d205e42349e8bdca96ca243adb5f0da3",
6
6
  "types/index.d.ts": "5cd2e99f135a929b72bdd822d00d780d39b1cd407ba0cfb3d511c7ac9d667b58",
7
7
  "rules/artifact-no-expiry.ts": "3f3cabf9792cbf8207e53a25f506715466b19ec25e9c3b4d0d77fed6b2eb4542",
@@ -52,5 +52,5 @@
52
52
  "skills/chant-gitlab-migrate.md": "4853d04980560b379e5b0f7267dcb0a1e5d5879cb9e9931681ce76b2a5fe69d8",
53
53
  "skills/chant-gitlab-patterns.md": "6d9a44e9e8de4c3820be9d65381b0d2ede4cb3626aaaf0011e21838a9fbf556e"
54
54
  },
55
- "composite": "442a763a4c853dd9941b0be51f95c32f86ee17ee6766d989d1905ee902328324"
55
+ "composite": "d1961531e031999d0e0a5f04eeba712d4e1948143e4666cd3d0fa391991eb4d8"
56
56
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitlab",
3
- "version": "0.41.20",
3
+ "version": "0.44.1",
4
4
  "chantVersion": ">=0.1.0",
5
5
  "namespace": "GitLab",
6
6
  "intrinsics": [
@@ -0,0 +1,55 @@
1
+ ---
2
+ okf_version: '0.2'
3
+ ---
4
+
5
+ # Resource types
6
+
7
+ * [Default](/types/Default.md) - GitLab::CI::Default
8
+ * [Job](/types/Job.md) - GitLab::CI::Job
9
+ * [Workflow](/types/Workflow.md) - GitLab::CI::Workflow
10
+
11
+ # Rules
12
+
13
+ * [WGL001](/rules/WGL001.md) - Deprecated only/except keywords
14
+ * [WGL002](/rules/WGL002.md) - Missing script
15
+ * [WGL003](/rules/WGL003.md) - Missing stage
16
+ * [WGL004](/rules/WGL004.md) - Artifacts without expiry
17
+ * [WGL010](/rules/WGL010.md) - Job references a stage not in the stages list
18
+ * [WGL011](/rules/WGL011.md) - Job has rules that always evaluate to never (unreachable)
19
+ * [WGL012](/rules/WGL012.md) - Deprecated property usage — flags properties marked as deprecated in the GitLab CI schema
20
+ * [WGL013](/rules/WGL013.md) - Invalid needs: target — dangling reference or self-reference
21
+ * [WGL014](/rules/WGL014.md) - Invalid extends: target — references a template not in the pipeline
22
+ * [WGL015](/rules/WGL015.md) - Circular needs: chain — cycle in job dependency graph
23
+ * [WGL016](/rules/WGL016.md) - Secrets in variables — hardcoded passwords or tokens in variables blocks
24
+ * [WGL017](/rules/WGL017.md) - Insecure registry — Docker push/pull to non-HTTPS registry
25
+ * [WGL018](/rules/WGL018.md) - Missing timeout — jobs without explicit timeout may run too long
26
+ * [WGL019](/rules/WGL019.md) - Missing retry — deploy jobs without retry strategy
27
+ * [WGL020](/rules/WGL020.md) - Duplicate job names — multiple jobs resolving to same name
28
+ * [WGL021](/rules/WGL021.md) - Unused variables — global variables not referenced by any job
29
+ * [WGL022](/rules/WGL022.md) - Missing artifacts expiry — artifacts without expire_in cause disk bloat
30
+ * [WGL023](/rules/WGL023.md) - Overly broad rules — job with only when: always rule (no conditions)
31
+ * [WGL024](/rules/WGL024.md) - Manual without allow_failure — manual jobs block pipeline without allow_failure: true
32
+ * [WGL025](/rules/WGL025.md) - Missing cache key — cache without key causes collisions
33
+ * [WGL026](/rules/WGL026.md) - Privileged services without TLS — DinD services without DOCKER_TLS_CERTDIR
34
+ * [WGL027](/rules/WGL027.md) - Empty script — jobs with empty or blank script entries
35
+ * [WGL028](/rules/WGL028.md) - Redundant needs — needs listing jobs already implied by stage ordering
36
+ * [WGL029](/rules/WGL029.md) - include:project / component resolved by a moving ref instead of a pinned tag or SHA
37
+ * [WGL030](/rules/WGL030.md) - include:remote is insecure (HTTP) or mutable
38
+ * [WGL031](/rules/WGL031.md) - Container image not pinned to an immutable digest
39
+ * [WGL032](/rules/WGL032.md) - Include/component source resembles a well-known project (possible impersonation)
40
+ * [WGL033](/rules/WGL033.md) - OIDC id_token without a scoped audience
41
+ * [WGL034](/rules/WGL034.md) - OIDC id_token mintable from a merge-request pipeline
42
+ * [WGL035](/rules/WGL035.md) - Untrusted CI variable interpolated into a script command
43
+ * [WGL036](/rules/WGL036.md) - Privileged service / DinD reachable from merge-request pipelines
44
+ * [WGL037](/rules/WGL037.md) - Security gate on a regex match of an untrusted ref variable
45
+ * [WGL038](/rules/WGL038.md) - Secret-like variable reachable from a merge-request pipeline
46
+ * [WGL039](/rules/WGL039.md) - Secret-like variable printed to job logs
47
+ * [WGL040](/rules/WGL040.md) - Hardcoded credential in a registry login command
48
+ * [WGL041](/rules/WGL041.md) - Logically unsound (tautological) rules:if condition
49
+ * [WGL042](/rules/WGL042.md) - Unreachable rules after an unconditional match
50
+ * [WGL043](/rules/WGL043.md) - Match-anything regex gate in rules:if
51
+ * [WGL044](/rules/WGL044.md) - Public artifacts expose build output
52
+ * [WGL045](/rules/WGL045.md) - Artifact path that may capture a credential file
53
+ * [WGL046](/rules/WGL046.md) - Cache populated in a merge-request pipeline (poisoning risk)
54
+ * [WGL047](/rules/WGL047.md) - Software fetched and piped to a shell without verification
55
+ * [WGL048](/rules/WGL048.md) - Pipeline defines workflow: but no workflow:name
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: lint-rule
3
+ title: WGL001
4
+ description: Deprecated only/except keywords
5
+ id: WGL001
6
+ severity: warning
7
+ category: style
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Deprecated only/except keywords
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: lint-rule
3
+ title: WGL002
4
+ description: Missing script
5
+ id: WGL002
6
+ severity: error
7
+ category: correctness
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Missing script
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: lint-rule
3
+ title: WGL003
4
+ description: Missing stage
5
+ id: WGL003
6
+ severity: info
7
+ category: style
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Missing stage
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: lint-rule
3
+ title: WGL004
4
+ description: Artifacts without expiry
5
+ id: WGL004
6
+ severity: warning
7
+ category: performance
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Artifacts without expiry
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL010
4
+ description: Job references a stage not in the stages list
5
+ id: WGL010
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Job references a stage not in the stages list
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL011
4
+ description: Job has rules that always evaluate to never (unreachable)
5
+ id: WGL011
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Job has rules that always evaluate to never (unreachable)
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL012
4
+ description: Deprecated property usage — flags properties marked as deprecated in the GitLab CI schema
5
+ id: WGL012
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Deprecated property usage — flags properties marked as deprecated in the GitLab CI schema
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL013
4
+ description: 'Invalid needs: target — dangling reference or self-reference'
5
+ id: WGL013
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Invalid needs: target — dangling reference or self-reference
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL014
4
+ description: 'Invalid extends: target — references a template not in the pipeline'
5
+ id: WGL014
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Invalid extends: target — references a template not in the pipeline
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL015
4
+ description: 'Circular needs: chain — cycle in job dependency graph'
5
+ id: WGL015
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Circular needs: chain — cycle in job dependency graph
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL016
4
+ description: Secrets in variables — hardcoded passwords or tokens in variables blocks
5
+ id: WGL016
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Secrets in variables — hardcoded passwords or tokens in variables blocks
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL017
4
+ description: Insecure registry — Docker push/pull to non-HTTPS registry
5
+ id: WGL017
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Insecure registry — Docker push/pull to non-HTTPS registry
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL018
4
+ description: Missing timeout — jobs without explicit timeout may run too long
5
+ id: WGL018
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Missing timeout — jobs without explicit timeout may run too long
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL019
4
+ description: Missing retry — deploy jobs without retry strategy
5
+ id: WGL019
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Missing retry — deploy jobs without retry strategy
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL020
4
+ description: Duplicate job names — multiple jobs resolving to same name
5
+ id: WGL020
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Duplicate job names — multiple jobs resolving to same name
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL021
4
+ description: Unused variables — global variables not referenced by any job
5
+ id: WGL021
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Unused variables — global variables not referenced by any job
@@ -0,0 +1,16 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL022
4
+ description: Missing artifacts expiry — artifacts without expire_in cause disk bloat
5
+ id: WGL022
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Missing artifacts expiry — artifacts without expire_in cause disk bloat
12
+
13
+ ## Applies to
14
+
15
+ - [Default](/types/Default.md)
16
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL023
4
+ description: 'Overly broad rules — job with only when: always rule (no conditions)'
5
+ id: WGL023
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Overly broad rules — job with only when: always rule (no conditions)
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL024
4
+ description: 'Manual without allow_failure — manual jobs block pipeline without allow_failure: true'
5
+ id: WGL024
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Manual without allow_failure — manual jobs block pipeline without allow_failure: true
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL025
4
+ description: Missing cache key — cache without key causes collisions
5
+ id: WGL025
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Missing cache key — cache without key causes collisions
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL026
4
+ description: Privileged services without TLS — DinD services without DOCKER_TLS_CERTDIR
5
+ id: WGL026
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Privileged services without TLS — DinD services without DOCKER_TLS_CERTDIR
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL027
4
+ description: Empty script — jobs with empty or blank script entries
5
+ id: WGL027
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Empty script — jobs with empty or blank script entries
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL028
4
+ description: Redundant needs — needs listing jobs already implied by stage ordering
5
+ id: WGL028
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Redundant needs — needs listing jobs already implied by stage ordering
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL029
4
+ description: include:project / component resolved by a moving ref instead of a pinned tag or SHA
5
+ id: WGL029
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ include:project / component resolved by a moving ref instead of a pinned tag or SHA
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL030
4
+ description: include:remote is insecure (HTTP) or mutable
5
+ id: WGL030
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ include:remote is insecure (HTTP) or mutable
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL031
4
+ description: Container image not pinned to an immutable digest
5
+ id: WGL031
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Container image not pinned to an immutable digest
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL032
4
+ description: Include/component source resembles a well-known project (possible impersonation)
5
+ id: WGL032
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Include/component source resembles a well-known project (possible impersonation)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL033
4
+ description: OIDC id_token without a scoped audience
5
+ id: WGL033
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ OIDC id_token without a scoped audience
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL034
4
+ description: OIDC id_token mintable from a merge-request pipeline
5
+ id: WGL034
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ OIDC id_token mintable from a merge-request pipeline
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL035
4
+ description: Untrusted CI variable interpolated into a script command
5
+ id: WGL035
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Untrusted CI variable interpolated into a script command
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL036
4
+ description: Privileged service / DinD reachable from merge-request pipelines
5
+ id: WGL036
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Privileged service / DinD reachable from merge-request pipelines
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL037
4
+ description: Security gate on a regex match of an untrusted ref variable
5
+ id: WGL037
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Security gate on a regex match of an untrusted ref variable
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL038
4
+ description: Secret-like variable reachable from a merge-request pipeline
5
+ id: WGL038
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Secret-like variable reachable from a merge-request pipeline
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL039
4
+ description: Secret-like variable printed to job logs
5
+ id: WGL039
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Secret-like variable printed to job logs
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL040
4
+ description: Hardcoded credential in a registry login command
5
+ id: WGL040
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Hardcoded credential in a registry login command
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL041
4
+ description: Logically unsound (tautological) rules:if condition
5
+ id: WGL041
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Logically unsound (tautological) rules:if condition
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL042
4
+ description: Unreachable rules after an unconditional match
5
+ id: WGL042
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Unreachable rules after an unconditional match
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL043
4
+ description: Match-anything regex gate in rules:if
5
+ id: WGL043
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Match-anything regex gate in rules:if
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL044
4
+ description: Public artifacts expose build output
5
+ id: WGL044
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Public artifacts expose build output
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL045
4
+ description: Artifact path that may capture a credential file
5
+ id: WGL045
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Artifact path that may capture a credential file
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL046
4
+ description: Cache populated in a merge-request pipeline (poisoning risk)
5
+ id: WGL046
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Cache populated in a merge-request pipeline (poisoning risk)
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL047
4
+ description: Software fetched and piped to a shell without verification
5
+ id: WGL047
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Software fetched and piped to a shell without verification
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: WGL048
4
+ description: 'Pipeline defines workflow: but no workflow:name'
5
+ id: WGL048
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: gitlab
9
+ docs: https://intentius.io/chant/lexicons/gitlab/rules/
10
+ ---
11
+ Pipeline defines workflow: but no workflow:name
@@ -0,0 +1,29 @@
1
+ ---
2
+ type: resource-type
3
+ title: Default
4
+ description: gitlab resource type GitLab::CI::Default
5
+ name: Default
6
+ lexicon: gitlab
7
+ resource_type: GitLab::CI::Default
8
+ ---
9
+ `GitLab::CI::Default`, a resource type of the gitlab lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `after_script` (`string | string[]`, optional)
14
+ - `artifacts` (`Artifacts`, optional)
15
+ - `before_script` (`string | string[]`, optional)
16
+ - `cache` (`Cache | Cache[]`, optional)
17
+ - `hooks` (`Record<string, unknown>`, optional)
18
+ - `id_tokens` (`Record<string, { aud: string | string[] }>`, optional)
19
+ - `identity` (`"google_cloud"`, optional)
20
+ - `image` (`Image`, optional)
21
+ - `interruptible` (`boolean`, optional)
22
+ - `retry` (`Retry | number`, optional)
23
+ - `services` (`Service[]`, optional)
24
+ - `tags` (`any[]`, optional)
25
+ - `timeout` (`string`, optional)
26
+
27
+ ## Governed by
28
+
29
+ - [WGL022](/rules/WGL022.md): Missing artifacts expiry — artifacts without expire_in cause disk bloat
@@ -0,0 +1,86 @@
1
+ ---
2
+ type: resource-type
3
+ title: Job
4
+ description: gitlab resource type GitLab::CI::Job
5
+ name: Job
6
+ lexicon: gitlab
7
+ resource_type: GitLab::CI::Job
8
+ ---
9
+ `GitLab::CI::Job`, a resource type of the gitlab lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `after_script` (`string | string[]`, optional)
14
+ - `allow_failure` (`AllowFailure | boolean`, optional)
15
+ - `artifacts` (`Artifacts`, optional)
16
+ - `before_script` (`string | string[]`, optional)
17
+ - `cache` (`Cache | Cache[]`, optional)
18
+ - `coverage` (`string`, optional): Must be a regular expression, optionally but recommended to be quoted, and must be surrounded with '/'. Example: '/Code coverage: \d+\.\d+/'
19
+ - `dependencies` (`string[]`, optional): Specify a list of job names from earlier stages from which artifacts should be loaded. By default, all previous artifacts are passed. Use an empty array to skip downloading artifacts.
20
+ - `environment` (`Environment | string`, optional): Used to associate environment metadata with a deploy. Environment can have a name and URL attached to it, and will be displayed under /environments under the project.
21
+ - `except` (`any`, optional): Job will run *except* for when these filtering options match.
22
+ - `extends` (`string | string[]`, optional): The name of one or more jobs to inherit configuration from.
23
+ - `hooks` (`Record<string, unknown>`, optional)
24
+ - `id_tokens` (`Record<string, { aud: string | string[] }>`, optional)
25
+ - `identity` (`"google_cloud"`, optional)
26
+ - `image` (`Image`, optional)
27
+ - `inherit` (`Inherit`, optional)
28
+ - `interruptible` (`boolean`, optional)
29
+ - `manual_confirmation` (`string`, optional)
30
+ - `needs` (`Need[]`, optional): The list of jobs in previous stages whose sole completion is needed to start the current job.
31
+ - `only` (`any`, optional): Job will run *only* when these filtering options match.
32
+ - `pages` (`Record<string, any> | boolean`, optional)
33
+ - `parallel` (`Parallel | number`, optional)
34
+ - `publish` (`string`, optional): A path to a directory that contains the files to be published with Pages
35
+ - `release` (`Release`, optional): Indicates that the job creates a Release.
36
+ - `resource_group` (`string`, optional): Limit job concurrency. Can be used to ensure that the Runner will not run certain jobs simultaneously.
37
+ - `retry` (`Retry | number`, optional)
38
+ - `rules` (`Rule[]`, optional)
39
+ - `run` (`any[]`, optional)
40
+ - `script` (`string | string[]`, optional)
41
+ - `secrets` (`Record<string, unknown>`, optional)
42
+ - `services` (`Service[]`, optional)
43
+ - `stage` (`string | string[]`, optional): Define what stage the job will run in.
44
+ - `start_in` (`string`, optional)
45
+ - `tags` (`any[]`, optional)
46
+ - `timeout` (`string`, optional)
47
+ - `trigger` (`Trigger | string`, optional)
48
+ - `variables` (`Record<string, unknown>`, optional)
49
+ - `when` (`"on_success" | "on_failure" | "always" | "never" | "manual" | "delayed"`, optional)
50
+
51
+ ## Governed by
52
+
53
+ - [WGL001](/rules/WGL001.md): Deprecated only/except keywords
54
+ - [WGL002](/rules/WGL002.md): Missing script
55
+ - [WGL003](/rules/WGL003.md): Missing stage
56
+ - [WGL010](/rules/WGL010.md): Job references a stage not in the stages list
57
+ - [WGL011](/rules/WGL011.md): Job has rules that always evaluate to never (unreachable)
58
+ - [WGL013](/rules/WGL013.md): Invalid needs: target — dangling reference or self-reference
59
+ - [WGL014](/rules/WGL014.md): Invalid extends: target — references a template not in the pipeline
60
+ - [WGL017](/rules/WGL017.md): Insecure registry — Docker push/pull to non-HTTPS registry
61
+ - [WGL018](/rules/WGL018.md): Missing timeout — jobs without explicit timeout may run too long
62
+ - [WGL019](/rules/WGL019.md): Missing retry — deploy jobs without retry strategy
63
+ - [WGL020](/rules/WGL020.md): Duplicate job names — multiple jobs resolving to same name
64
+ - [WGL022](/rules/WGL022.md): Missing artifacts expiry — artifacts without expire_in cause disk bloat
65
+ - [WGL023](/rules/WGL023.md): Overly broad rules — job with only when: always rule (no conditions)
66
+ - [WGL024](/rules/WGL024.md): Manual without allow_failure — manual jobs block pipeline without allow_failure: true
67
+ - [WGL025](/rules/WGL025.md): Missing cache key — cache without key causes collisions
68
+ - [WGL026](/rules/WGL026.md): Privileged services without TLS — DinD services without DOCKER_TLS_CERTDIR
69
+ - [WGL027](/rules/WGL027.md): Empty script — jobs with empty or blank script entries
70
+ - [WGL028](/rules/WGL028.md): Redundant needs — needs listing jobs already implied by stage ordering
71
+ - [WGL031](/rules/WGL031.md): Container image not pinned to an immutable digest
72
+ - [WGL033](/rules/WGL033.md): OIDC id_token without a scoped audience
73
+ - [WGL034](/rules/WGL034.md): OIDC id_token mintable from a merge-request pipeline
74
+ - [WGL035](/rules/WGL035.md): Untrusted CI variable interpolated into a script command
75
+ - [WGL036](/rules/WGL036.md): Privileged service / DinD reachable from merge-request pipelines
76
+ - [WGL037](/rules/WGL037.md): Security gate on a regex match of an untrusted ref variable
77
+ - [WGL038](/rules/WGL038.md): Secret-like variable reachable from a merge-request pipeline
78
+ - [WGL039](/rules/WGL039.md): Secret-like variable printed to job logs
79
+ - [WGL040](/rules/WGL040.md): Hardcoded credential in a registry login command
80
+ - [WGL041](/rules/WGL041.md): Logically unsound (tautological) rules:if condition
81
+ - [WGL042](/rules/WGL042.md): Unreachable rules after an unconditional match
82
+ - [WGL043](/rules/WGL043.md): Match-anything regex gate in rules:if
83
+ - [WGL044](/rules/WGL044.md): Public artifacts expose build output
84
+ - [WGL045](/rules/WGL045.md): Artifact path that may capture a credential file
85
+ - [WGL046](/rules/WGL046.md): Cache populated in a merge-request pipeline (poisoning risk)
86
+ - [WGL047](/rules/WGL047.md): Software fetched and piped to a shell without verification
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: resource-type
3
+ title: Workflow
4
+ description: gitlab resource type GitLab::CI::Workflow
5
+ name: Workflow
6
+ lexicon: gitlab
7
+ resource_type: GitLab::CI::Workflow
8
+ ---
9
+ `GitLab::CI::Workflow`, a resource type of the gitlab lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `auto_cancel` (`AutoCancel`, optional)
14
+ - `name` (`string`, optional)
15
+ - `rules` (`WorkflowRule[]`, optional)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentius/chant-lexicon-gitlab",
3
- "version": "0.41.20",
3
+ "version": "0.44.1",
4
4
  "description": "GitLab CI lexicon for chant — declarative IaC in TypeScript",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://intentius.io/chant",
@@ -67,8 +67,8 @@
67
67
  "typescript": "^5.9.3"
68
68
  },
69
69
  "peerDependencies": {
70
- "@intentius/chant": "^0.41.20",
71
- "@intentius/chant-lexicon-github": "^0.41.20",
70
+ "@intentius/chant": "^0.44.1",
71
+ "@intentius/chant-lexicon-github": "^0.44.1",
72
72
  "typescript": "^5.9.3"
73
73
  },
74
74
  "peerDependenciesMeta": {
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { generate, writeGeneratedFiles } from "./codegen/generate";
7
7
  import { packageLexicon } from "./codegen/package";
8
- import { writeFileSync, mkdirSync } from "fs";
8
+ import { writeBundleSpec } from "@intentius/chant/codegen/package";
9
9
  import { join, dirname } from "path";
10
10
  import { fileURLToPath } from "url";
11
11
 
@@ -20,24 +20,7 @@ console.error(`Generated ${genResult.resources} entities, ${genResult.properties
20
20
  const { spec, stats } = await packageLexicon({ verbose: true });
21
21
 
22
22
  const distDir = join(pkgDir, "dist");
23
- mkdirSync(join(distDir, "types"), { recursive: true });
24
- mkdirSync(join(distDir, "rules"), { recursive: true });
25
- mkdirSync(join(distDir, "skills"), { recursive: true });
26
-
27
- writeFileSync(join(distDir, "manifest.json"), JSON.stringify(spec.manifest, null, 2));
28
- writeFileSync(join(distDir, "meta.json"), spec.registry);
29
- writeFileSync(join(distDir, "types", "index.d.ts"), spec.typesDTS);
30
-
31
- for (const [name, content] of spec.rules) {
32
- writeFileSync(join(distDir, "rules", name), content);
33
- }
34
- for (const [name, content] of spec.skills) {
35
- writeFileSync(join(distDir, "skills", name), content);
36
- }
37
-
38
- if (spec.integrity) {
39
- writeFileSync(join(distDir, "integrity.json"), JSON.stringify(spec.integrity, null, 2));
40
- }
23
+ writeBundleSpec(spec, distDir);
41
24
 
42
25
  console.error(`Packaged ${stats.resources} entities, ${stats.ruleCount} rules, ${stats.skillCount} skills`);
43
26
  console.error(`dist/ written to ${distDir}`);