@intentius/chant-lexicon-github 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 (66) hide show
  1. package/dist/integrity.json +2 -2
  2. package/dist/manifest.json +1 -1
  3. package/dist/okf/index.md +70 -0
  4. package/dist/okf/rules/GHA001.md +11 -0
  5. package/dist/okf/rules/GHA002.md +15 -0
  6. package/dist/okf/rules/GHA003.md +11 -0
  7. package/dist/okf/rules/GHA004.md +11 -0
  8. package/dist/okf/rules/GHA005.md +17 -0
  9. package/dist/okf/rules/GHA006.md +15 -0
  10. package/dist/okf/rules/GHA007.md +16 -0
  11. package/dist/okf/rules/GHA008.md +11 -0
  12. package/dist/okf/rules/GHA009.md +11 -0
  13. package/dist/okf/rules/GHA010.md +11 -0
  14. package/dist/okf/rules/GHA011.md +15 -0
  15. package/dist/okf/rules/GHA012.md +11 -0
  16. package/dist/okf/rules/GHA013.md +15 -0
  17. package/dist/okf/rules/GHA014.md +15 -0
  18. package/dist/okf/rules/GHA015.md +11 -0
  19. package/dist/okf/rules/GHA016.md +11 -0
  20. package/dist/okf/rules/GHA017.md +15 -0
  21. package/dist/okf/rules/GHA018.md +15 -0
  22. package/dist/okf/rules/GHA019.md +11 -0
  23. package/dist/okf/rules/GHA020.md +11 -0
  24. package/dist/okf/rules/GHA021.md +15 -0
  25. package/dist/okf/rules/GHA022.md +15 -0
  26. package/dist/okf/rules/GHA023.md +15 -0
  27. package/dist/okf/rules/GHA024.md +11 -0
  28. package/dist/okf/rules/GHA025.md +15 -0
  29. package/dist/okf/rules/GHA026.md +15 -0
  30. package/dist/okf/rules/GHA027.md +11 -0
  31. package/dist/okf/rules/GHA028.md +15 -0
  32. package/dist/okf/rules/GHA029.md +16 -0
  33. package/dist/okf/rules/GHA030.md +15 -0
  34. package/dist/okf/rules/GHA031.md +15 -0
  35. package/dist/okf/rules/GHA032.md +15 -0
  36. package/dist/okf/rules/GHA033.md +16 -0
  37. package/dist/okf/rules/GHA034.md +16 -0
  38. package/dist/okf/rules/GHA035.md +16 -0
  39. package/dist/okf/rules/GHA036.md +15 -0
  40. package/dist/okf/rules/GHA037.md +15 -0
  41. package/dist/okf/rules/GHA038.md +15 -0
  42. package/dist/okf/rules/GHA039.md +15 -0
  43. package/dist/okf/rules/GHA040.md +15 -0
  44. package/dist/okf/rules/GHA041.md +16 -0
  45. package/dist/okf/rules/GHA042.md +15 -0
  46. package/dist/okf/rules/GHA043.md +15 -0
  47. package/dist/okf/rules/GHA044.md +15 -0
  48. package/dist/okf/rules/GHA045.md +15 -0
  49. package/dist/okf/rules/GHA046.md +15 -0
  50. package/dist/okf/rules/GHA047.md +15 -0
  51. package/dist/okf/rules/GHA048.md +15 -0
  52. package/dist/okf/rules/GHA049.md +15 -0
  53. package/dist/okf/rules/GHA050.md +15 -0
  54. package/dist/okf/rules/GHA051.md +15 -0
  55. package/dist/okf/rules/GHA052.md +15 -0
  56. package/dist/okf/rules/GHA053.md +16 -0
  57. package/dist/okf/rules/GHA054.md +15 -0
  58. package/dist/okf/rules/GHA055.md +15 -0
  59. package/dist/okf/rules/GHA056.md +15 -0
  60. package/dist/okf/rules/GHA057.md +11 -0
  61. package/dist/okf/rules/GHA058.md +11 -0
  62. package/dist/okf/types/Job.md +69 -0
  63. package/dist/okf/types/ReusableWorkflowCallJob.md +26 -0
  64. package/dist/okf/types/Workflow.md +36 -0
  65. package/package.json +2 -2
  66. package/src/package-cli.ts +2 -19
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "algorithm": "sha256",
3
3
  "artifacts": {
4
- "manifest.json": "0b3bb0157719f2a9b0901870b0a4473b72cd582827bab3aed286063b47610ede",
4
+ "manifest.json": "d17a3716b8c783b875c8f6a1780af015283baef3d177618faca76716ed3e6d2a",
5
5
  "meta.json": "798c5f5f37b0174756d2451299acfdc95c014f11d06d32b9153bbdfa9f3a580c",
6
6
  "types/index.d.ts": "39c0791f0e58025bcef82e0f7a92240508f899fc2771d5dd51b2369b4d330f13",
7
7
  "rules/deprecated-action-version.ts": "d41e6e532ab7f623af1bee4ac5279fcb2baada7defa1c5d022a5bc71983e8797",
@@ -67,5 +67,5 @@
67
67
  "skills/chant-github-patterns.md": "bb3abef289a8fdfcf07d6bb2d7289dcb2f38bc0cb0321ea320b78b45a6f548c0",
68
68
  "skills/chant-github-security.md": "aab111cb0871cad30281ce48d7da23663689619351029219e2be019a1a61e394"
69
69
  },
70
- "composite": "e2451e4ba3d69dbf6966cd4ea316494a39103f921d1d64ec649e75bb6e334e67"
70
+ "composite": "ca61feaee9c33a0a8282bedfa8fafff2c335b8d827a52d37a4c10131b19d7a4d"
71
71
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github",
3
- "version": "0.41.20",
3
+ "version": "0.44.1",
4
4
  "chantVersion": ">=0.1.0",
5
5
  "namespace": "GitHub",
6
6
  "intrinsics": [
@@ -0,0 +1,70 @@
1
+ ---
2
+ okf_version: '0.2'
3
+ ---
4
+
5
+ # Resource types
6
+
7
+ * [Job](/types/Job.md) - GitHub::Actions::Job
8
+ * [ReusableWorkflowCallJob](/types/ReusableWorkflowCallJob.md) - GitHub::Actions::ReusableWorkflowCallJob
9
+ * [Workflow](/types/Workflow.md) - GitHub::Actions::Workflow
10
+
11
+ # Rules
12
+
13
+ * [GHA001](/rules/GHA001.md) - Use Typed Action Composites
14
+ * [GHA002](/rules/GHA002.md) - Use Condition Builders
15
+ * [GHA003](/rules/GHA003.md) - No Hardcoded Secrets
16
+ * [GHA004](/rules/GHA004.md) - Use Matrix Builder
17
+ * [GHA005](/rules/GHA005.md) - Extract Inline Structs
18
+ * [GHA006](/rules/GHA006.md) - Multiple workflows share the same name
19
+ * [GHA007](/rules/GHA007.md) - File Job Limit
20
+ * [GHA008](/rules/GHA008.md) - No Raw Expressions
21
+ * [GHA009](/rules/GHA009.md) - Matrix dimension has empty values array
22
+ * [GHA010](/rules/GHA010.md) - Missing Recommended Inputs
23
+ * [GHA011](/rules/GHA011.md) - Job needs: references non-existent job
24
+ * [GHA012](/rules/GHA012.md) - Deprecated Action Version
25
+ * [GHA013](/rules/GHA013.md) - Missing job-level permissions for sensitive triggers
26
+ * [GHA014](/rules/GHA014.md) - Job Timeout
27
+ * [GHA015](/rules/GHA015.md) - Suggest Cache
28
+ * [GHA016](/rules/GHA016.md) - Validate Concurrency
29
+ * [GHA017](/rules/GHA017.md) - Workflow without explicit permissions block
30
+ * [GHA018](/rules/GHA018.md) - pull_request_target with checkout action is a security risk
31
+ * [GHA019](/rules/GHA019.md) - Circular needs: chain — cycle in job dependency graph
32
+ * [GHA020](/rules/GHA020.md) - Detect Secrets
33
+ * [GHA021](/rules/GHA021.md) - actions/checkout used without pinned SHA
34
+ * [GHA022](/rules/GHA022.md) - Job without timeout-minutes
35
+ * [GHA023](/rules/GHA023.md) - Deprecated ::set-output command usage
36
+ * [GHA024](/rules/GHA024.md) - Missing concurrency block for deploy workflow
37
+ * [GHA025](/rules/GHA025.md) - Using pull_request_target without restrictions
38
+ * [GHA026](/rules/GHA026.md) - Secret passed to action without environment protection
39
+ * [GHA027](/rules/GHA027.md) - Missing `if: always()` on cleanup steps
40
+ * [GHA028](/rules/GHA028.md) - Workflow with no `on` triggers
41
+ * [GHA029](/rules/GHA029.md) - Action or reusable workflow not pinned to a commit SHA
42
+ * [GHA030](/rules/GHA030.md) - Container image not pinned to an immutable digest
43
+ * [GHA031](/rules/GHA031.md) - Action reference resembles a well-known action (possible impersonation)
44
+ * [GHA032](/rules/GHA032.md) - Action is archived/abandoned or has a disclosed security issue
45
+ * [GHA033](/rules/GHA033.md) - Blanket write-all token permissions
46
+ * [GHA034](/rules/GHA034.md) - Write permissions granted workflow-wide instead of per-job
47
+ * [GHA035](/rules/GHA035.md) - Elevated token scope on a trigger that can run untrusted code
48
+ * [GHA036](/rules/GHA036.md) - Untrusted input interpolated into a run: shell command
49
+ * [GHA037](/rules/GHA037.md) - Untrusted input written to GITHUB_ENV / GITHUB_PATH
50
+ * [GHA038](/rules/GHA038.md) - workflow_run trigger with checkout runs untrusted code in a privileged context
51
+ * [GHA039](/rules/GHA039.md) - Authorization gate on a spoofable commit-author identity field
52
+ * [GHA040](/rules/GHA040.md) - Self-hosted runner on a trigger that can run untrusted code
53
+ * [GHA041](/rules/GHA041.md) - Blanket secrets: inherit into a reusable workflow
54
+ * [GHA042](/rules/GHA042.md) - Entire secrets context passed where specific secrets would do
55
+ * [GHA043](/rules/GHA043.md) - Secret consumed in a job without an environment gate
56
+ * [GHA044](/rules/GHA044.md) - Hardcoded registry/container credential
57
+ * [GHA045](/rules/GHA045.md) - Secret interpolated directly into a run: shell command
58
+ * [GHA046](/rules/GHA046.md) - Logically unsound (constant) guard condition
59
+ * [GHA047](/rules/GHA047.md) - Ineffective contains() guard with reversed arguments
60
+ * [GHA048](/rules/GHA048.md) - Obfuscated guard condition (operand built by indirection)
61
+ * [GHA049](/rules/GHA049.md) - Persisted checkout credentials reachable by an uploaded artifact
62
+ * [GHA050](/rules/GHA050.md) - Cache populated in a privileged context (poisoning risk)
63
+ * [GHA051](/rules/GHA051.md) - Publish/release step using a long-lived token instead of OIDC
64
+ * [GHA052](/rules/GHA052.md) - Software fetched and piped to a shell without verification
65
+ * [GHA053](/rules/GHA053.md) - Re-enables unsafe set-env / add-path workflow commands
66
+ * [GHA054](/rules/GHA054.md) - Use of a feature with a known security footgun
67
+ * [GHA055](/rules/GHA055.md) - Runtime install of a tool already present on the runner
68
+ * [GHA056](/rules/GHA056.md) - Workflow without a name
69
+ * [GHA057](/rules/GHA057.md) - Dependency update allows executing untrusted external code
70
+ * [GHA058](/rules/GHA058.md) - Dependency update has no cooldown window
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA001
4
+ description: Use Typed Action Composites
5
+ id: GHA001
6
+ severity: warning
7
+ category: style
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Use Typed Action Composites
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA002
4
+ description: Use Condition Builders
5
+ id: GHA002
6
+ severity: warning
7
+ category: style
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Use Condition Builders
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA003
4
+ description: No Hardcoded Secrets
5
+ id: GHA003
6
+ severity: error
7
+ category: security
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ No Hardcoded Secrets
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA004
4
+ description: Use Matrix Builder
5
+ id: GHA004
6
+ severity: info
7
+ category: style
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Use Matrix Builder
@@ -0,0 +1,17 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA005
4
+ description: Extract Inline Structs
5
+ id: GHA005
6
+ severity: info
7
+ category: style
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Extract Inline Structs
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
16
+ - [ReusableWorkflowCallJob](/types/ReusableWorkflowCallJob.md)
17
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA006
4
+ description: Multiple workflows share the same name
5
+ id: GHA006
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Multiple workflows share the same name
12
+
13
+ ## Applies to
14
+
15
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,16 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA007
4
+ description: File Job Limit
5
+ id: GHA007
6
+ severity: warning
7
+ category: style
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ File Job Limit
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
16
+ - [ReusableWorkflowCallJob](/types/ReusableWorkflowCallJob.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA008
4
+ description: No Raw Expressions
5
+ id: GHA008
6
+ severity: info
7
+ category: style
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ No Raw Expressions
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA009
4
+ description: Matrix dimension has empty values array
5
+ id: GHA009
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Matrix dimension has empty values array
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA010
4
+ description: Missing Recommended Inputs
5
+ id: GHA010
6
+ severity: warning
7
+ category: correctness
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Missing Recommended Inputs
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA011
4
+ description: 'Job needs: references non-existent job'
5
+ id: GHA011
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Job needs: references non-existent job
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA012
4
+ description: Deprecated Action Version
5
+ id: GHA012
6
+ severity: warning
7
+ category: correctness
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Deprecated Action Version
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA013
4
+ description: Missing job-level permissions for sensitive triggers
5
+ id: GHA013
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Missing job-level permissions for sensitive triggers
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA014
4
+ description: Job Timeout
5
+ id: GHA014
6
+ severity: warning
7
+ category: correctness
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Job Timeout
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA015
4
+ description: Suggest Cache
5
+ id: GHA015
6
+ severity: warning
7
+ category: performance
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Suggest Cache
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA016
4
+ description: Validate Concurrency
5
+ id: GHA016
6
+ severity: warning
7
+ category: correctness
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Validate Concurrency
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA017
4
+ description: Workflow without explicit permissions block
5
+ id: GHA017
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Workflow without explicit permissions block
12
+
13
+ ## Applies to
14
+
15
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA018
4
+ description: pull_request_target with checkout action is a security risk
5
+ id: GHA018
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ pull_request_target with checkout action is a security risk
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA019
4
+ description: 'Circular needs: chain — cycle in job dependency graph'
5
+ id: GHA019
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Circular needs: chain — cycle in job dependency graph
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: lint-rule
3
+ title: GHA020
4
+ description: Detect Secrets
5
+ id: GHA020
6
+ severity: error
7
+ category: security
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Detect Secrets
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA021
4
+ description: actions/checkout used without pinned SHA
5
+ id: GHA021
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ actions/checkout used without pinned SHA
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA022
4
+ description: Job without timeout-minutes
5
+ id: GHA022
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Job without timeout-minutes
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA023
4
+ description: Deprecated ::set-output command usage
5
+ id: GHA023
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Deprecated ::set-output command usage
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA024
4
+ description: Missing concurrency block for deploy workflow
5
+ id: GHA024
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Missing concurrency block for deploy workflow
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA025
4
+ description: Using pull_request_target without restrictions
5
+ id: GHA025
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Using pull_request_target without restrictions
12
+
13
+ ## Applies to
14
+
15
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA026
4
+ description: Secret passed to action without environment protection
5
+ id: GHA026
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Secret passed to action without environment protection
12
+
13
+ ## Applies to
14
+
15
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA027
4
+ description: 'Missing `if: always()` on cleanup steps'
5
+ id: GHA027
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Missing `if: always()` on cleanup steps
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA028
4
+ description: Workflow with no `on` triggers
5
+ id: GHA028
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Workflow with no `on` triggers
12
+
13
+ ## Applies to
14
+
15
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,16 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA029
4
+ description: Action or reusable workflow not pinned to a commit SHA
5
+ id: GHA029
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Action or reusable workflow not pinned to a commit SHA
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
16
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA030
4
+ description: Container image not pinned to an immutable digest
5
+ id: GHA030
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Container image not pinned to an immutable digest
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA031
4
+ description: Action reference resembles a well-known action (possible impersonation)
5
+ id: GHA031
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Action reference resembles a well-known action (possible impersonation)
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA032
4
+ description: Action is archived/abandoned or has a disclosed security issue
5
+ id: GHA032
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Action is archived/abandoned or has a disclosed security issue
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,16 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA033
4
+ description: Blanket write-all token permissions
5
+ id: GHA033
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Blanket write-all token permissions
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
16
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,16 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA034
4
+ description: Write permissions granted workflow-wide instead of per-job
5
+ id: GHA034
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Write permissions granted workflow-wide instead of per-job
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
16
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,16 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA035
4
+ description: Elevated token scope on a trigger that can run untrusted code
5
+ id: GHA035
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Elevated token scope on a trigger that can run untrusted code
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
16
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA036
4
+ description: 'Untrusted input interpolated into a run: shell command'
5
+ id: GHA036
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Untrusted input interpolated into a run: shell command
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA037
4
+ description: Untrusted input written to GITHUB_ENV / GITHUB_PATH
5
+ id: GHA037
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Untrusted input written to GITHUB_ENV / GITHUB_PATH
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA038
4
+ description: workflow_run trigger with checkout runs untrusted code in a privileged context
5
+ id: GHA038
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ workflow_run trigger with checkout runs untrusted code in a privileged context
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA039
4
+ description: Authorization gate on a spoofable commit-author identity field
5
+ id: GHA039
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Authorization gate on a spoofable commit-author identity field
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA040
4
+ description: Self-hosted runner on a trigger that can run untrusted code
5
+ id: GHA040
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Self-hosted runner on a trigger that can run untrusted code
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,16 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA041
4
+ description: 'Blanket secrets: inherit into a reusable workflow'
5
+ id: GHA041
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Blanket secrets: inherit into a reusable workflow
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
16
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA042
4
+ description: Entire secrets context passed where specific secrets would do
5
+ id: GHA042
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Entire secrets context passed where specific secrets would do
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA043
4
+ description: Secret consumed in a job without an environment gate
5
+ id: GHA043
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Secret consumed in a job without an environment gate
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA044
4
+ description: Hardcoded registry/container credential
5
+ id: GHA044
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Hardcoded registry/container credential
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA045
4
+ description: 'Secret interpolated directly into a run: shell command'
5
+ id: GHA045
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Secret interpolated directly into a run: shell command
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA046
4
+ description: Logically unsound (constant) guard condition
5
+ id: GHA046
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Logically unsound (constant) guard condition
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA047
4
+ description: Ineffective contains() guard with reversed arguments
5
+ id: GHA047
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Ineffective contains() guard with reversed arguments
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA048
4
+ description: Obfuscated guard condition (operand built by indirection)
5
+ id: GHA048
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Obfuscated guard condition (operand built by indirection)
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA049
4
+ description: Persisted checkout credentials reachable by an uploaded artifact
5
+ id: GHA049
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Persisted checkout credentials reachable by an uploaded artifact
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA050
4
+ description: Cache populated in a privileged context (poisoning risk)
5
+ id: GHA050
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Cache populated in a privileged context (poisoning risk)
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA051
4
+ description: Publish/release step using a long-lived token instead of OIDC
5
+ id: GHA051
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Publish/release step using a long-lived token instead of OIDC
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA052
4
+ description: Software fetched and piped to a shell without verification
5
+ id: GHA052
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/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,16 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA053
4
+ description: Re-enables unsafe set-env / add-path workflow commands
5
+ id: GHA053
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Re-enables unsafe set-env / add-path workflow commands
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
16
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA054
4
+ description: Use of a feature with a known security footgun
5
+ id: GHA054
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Use of a feature with a known security footgun
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA055
4
+ description: Runtime install of a tool already present on the runner
5
+ id: GHA055
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Runtime install of a tool already present on the runner
12
+
13
+ ## Applies to
14
+
15
+ - [Job](/types/Job.md)
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA056
4
+ description: Workflow without a name
5
+ id: GHA056
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Workflow without a name
12
+
13
+ ## Applies to
14
+
15
+ - [Workflow](/types/Workflow.md)
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA057
4
+ description: Dependency update allows executing untrusted external code
5
+ id: GHA057
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Dependency update allows executing untrusted external code
@@ -0,0 +1,11 @@
1
+ ---
2
+ type: post-synth-check
3
+ title: GHA058
4
+ description: Dependency update has no cooldown window
5
+ id: GHA058
6
+ severity: error
7
+ category: post-synth
8
+ lexicon: github
9
+ docs: https://intentius.io/chant/lexicons/github/rules/
10
+ ---
11
+ Dependency update has no cooldown window
@@ -0,0 +1,69 @@
1
+ ---
2
+ type: resource-type
3
+ title: Job
4
+ description: github resource type GitHub::Actions::Job
5
+ name: Job
6
+ lexicon: github
7
+ resource_type: GitHub::Actions::Job
8
+ ---
9
+ `GitHub::Actions::Job`, a resource type of the github lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `runs-on` (`string | string[]`, required): The type of machine to run the job on. The machine can be either a GitHub-hosted runner, or a self-hosted runner.
14
+ - `concurrency` (`Concurrency | string`, optional): Concurrency ensures that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. The expression can use any context except for the secrets context. You can also specify concurrency at the workflow level. When a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. By default any previously pending job or workflow in the concurrency group will be canceled; this behavior can be changed with `queue`. To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true.
15
+ - `container` (`Container | string`, optional): A container to run any steps in a job that don't already specify a container. If you have steps that use both script and container actions, the container actions will run as sibling containers on the same network with the same volume mounts. If you do not set a container, all steps will run directly on the host specified by runs-on unless a step refers to an action configured to run in a container.
16
+ - `continue-on-error` (`boolean`, optional): Prevents a workflow run from failing when a job fails. Set to true to allow a workflow run to pass when this job fails.
17
+ - `defaults` (`Defaults`, optional): A map of default settings that will apply to all steps in the job.
18
+ - `env` (`Record<string, string>`, optional): A map of environment variables that are available to all steps in the job.
19
+ - `environment` (`Environment | string`, optional): The environment that the job references.
20
+ - `if` (`string`, optional): You can use the if conditional to prevent a job from running unless a condition is met. You can use any supported context and expression to create a conditional. Expressions in an if conditional do not require the ${{ }} syntax. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
21
+ - `name` (`string`, optional): The name of the job displayed on GitHub.
22
+ - `needs` (`string[]`, optional)
23
+ - `outputs` (`Record<string, string>`, optional): A map of outputs for a job. Job outputs are available to all downstream jobs that depend on this job.
24
+ - `permissions` (`Permissions | string`, optional)
25
+ - `services` (`Record<string, Service>`, optional): Additional containers to host services for a job in a workflow. These are useful for creating databases or cache services like redis. The runner on the virtual machine will automatically create a network and manage the life cycle of the service containers. When you use a service container for a job or your step uses container actions, you don't need to set port information to access the service. Docker automatically exposes all ports between containers on the same network. When both the job and the action run in a container, you can directly reference the container by its hostname. The hostname is automatically mapped to the service name. When a step does not use a container action, you must access the service using localhost and bind the ports.
26
+ - `snapshot` (`any`, optional)
27
+ - `steps` (`Step[]`, optional): A job contains a sequence of tasks called steps. Steps can run commands, run setup tasks, or run an action in your repository, a public repository, or an action published in a Docker registry. Not all steps run actions, but all actions run as a step. Each step runs in its own process in the virtual environment and has access to the workspace and filesystem. Because steps run in their own process, changes to environment variables are not preserved between steps. GitHub provides built-in steps to set up and complete a job. Must contain either `uses` or `run`
28
+ - `strategy` (`Strategy`, optional): A strategy creates a build matrix for your jobs. You can define different variations of an environment to run each job in.
29
+ - `timeout-minutes` (`number`, optional): The maximum number of minutes to let a workflow run before GitHub automatically cancels it. Default: 360
30
+
31
+ ## Governed by
32
+
33
+ - [GHA002](/rules/GHA002.md): Use Condition Builders
34
+ - [GHA005](/rules/GHA005.md): Extract Inline Structs
35
+ - [GHA007](/rules/GHA007.md): File Job Limit
36
+ - [GHA011](/rules/GHA011.md): Job needs: references non-existent job
37
+ - [GHA013](/rules/GHA013.md): Missing job-level permissions for sensitive triggers
38
+ - [GHA014](/rules/GHA014.md): Job Timeout
39
+ - [GHA018](/rules/GHA018.md): pull_request_target with checkout action is a security risk
40
+ - [GHA021](/rules/GHA021.md): actions/checkout used without pinned SHA
41
+ - [GHA022](/rules/GHA022.md): Job without timeout-minutes
42
+ - [GHA023](/rules/GHA023.md): Deprecated ::set-output command usage
43
+ - [GHA029](/rules/GHA029.md): Action or reusable workflow not pinned to a commit SHA
44
+ - [GHA030](/rules/GHA030.md): Container image not pinned to an immutable digest
45
+ - [GHA031](/rules/GHA031.md): Action reference resembles a well-known action (possible impersonation)
46
+ - [GHA032](/rules/GHA032.md): Action is archived/abandoned or has a disclosed security issue
47
+ - [GHA033](/rules/GHA033.md): Blanket write-all token permissions
48
+ - [GHA034](/rules/GHA034.md): Write permissions granted workflow-wide instead of per-job
49
+ - [GHA035](/rules/GHA035.md): Elevated token scope on a trigger that can run untrusted code
50
+ - [GHA036](/rules/GHA036.md): Untrusted input interpolated into a run: shell command
51
+ - [GHA037](/rules/GHA037.md): Untrusted input written to GITHUB_ENV / GITHUB_PATH
52
+ - [GHA038](/rules/GHA038.md): workflow_run trigger with checkout runs untrusted code in a privileged context
53
+ - [GHA039](/rules/GHA039.md): Authorization gate on a spoofable commit-author identity field
54
+ - [GHA040](/rules/GHA040.md): Self-hosted runner on a trigger that can run untrusted code
55
+ - [GHA041](/rules/GHA041.md): Blanket secrets: inherit into a reusable workflow
56
+ - [GHA042](/rules/GHA042.md): Entire secrets context passed where specific secrets would do
57
+ - [GHA043](/rules/GHA043.md): Secret consumed in a job without an environment gate
58
+ - [GHA044](/rules/GHA044.md): Hardcoded registry/container credential
59
+ - [GHA045](/rules/GHA045.md): Secret interpolated directly into a run: shell command
60
+ - [GHA046](/rules/GHA046.md): Logically unsound (constant) guard condition
61
+ - [GHA047](/rules/GHA047.md): Ineffective contains() guard with reversed arguments
62
+ - [GHA048](/rules/GHA048.md): Obfuscated guard condition (operand built by indirection)
63
+ - [GHA049](/rules/GHA049.md): Persisted checkout credentials reachable by an uploaded artifact
64
+ - [GHA050](/rules/GHA050.md): Cache populated in a privileged context (poisoning risk)
65
+ - [GHA051](/rules/GHA051.md): Publish/release step using a long-lived token instead of OIDC
66
+ - [GHA052](/rules/GHA052.md): Software fetched and piped to a shell without verification
67
+ - [GHA053](/rules/GHA053.md): Re-enables unsafe set-env / add-path workflow commands
68
+ - [GHA054](/rules/GHA054.md): Use of a feature with a known security footgun
69
+ - [GHA055](/rules/GHA055.md): Runtime install of a tool already present on the runner
@@ -0,0 +1,26 @@
1
+ ---
2
+ type: resource-type
3
+ title: ReusableWorkflowCallJob
4
+ description: github resource type GitHub::Actions::ReusableWorkflowCallJob
5
+ name: ReusableWorkflowCallJob
6
+ lexicon: github
7
+ resource_type: GitHub::Actions::ReusableWorkflowCallJob
8
+ ---
9
+ `GitHub::Actions::ReusableWorkflowCallJob`, a resource type of the github lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `uses` (`string`, required): The location and version of a reusable workflow file to run as a job, of the form './{path/to}/{localfile}.yml' or '{owner}/{repo}/{path}/{filename}@{ref}'. {ref} can be a SHA, a release tag, or a branch name. Using the commit SHA is the safest for stability and security.
14
+ - `concurrency` (`string | Record<string, any>`, optional): Concurrency ensures that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. The expression can use any context except for the secrets context. You can also specify concurrency at the workflow level. When a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. By default any previously pending job or workflow in the concurrency group will be canceled; this behavior can be changed with `queue`. To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true.
15
+ - `if` (`boolean`, optional): You can use the if conditional to prevent a job from running unless a condition is met. You can use any supported context and expression to create a conditional. Expressions in an if conditional do not require the ${{ }} syntax. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
16
+ - `name` (`string`, optional): The name of the job displayed on GitHub.
17
+ - `needs` (`any`, optional)
18
+ - `permissions` (`any`, optional)
19
+ - `secrets` (`"inherit"`, optional): When a job is used to call a reusable workflow, you can use 'secrets' to provide a map of secrets that are passed to the called workflow. Any secrets that you pass must match the names defined in the called workflow.
20
+ - `strategy` (`Record<string, unknown>`, optional): A strategy creates a build matrix for your jobs. You can define different variations of an environment to run each job in.
21
+ - `with` (`any`, optional): A map of inputs that are passed to the called workflow. Any inputs that you pass must match the input specifications defined in the called workflow. Unlike 'jobs.<job_id>.steps[*].with', the inputs you pass with 'jobs.<job_id>.with' are not be available as environment variables in the called workflow. Instead, you can reference the inputs by using the inputs context.
22
+
23
+ ## Governed by
24
+
25
+ - [GHA005](/rules/GHA005.md): Extract Inline Structs
26
+ - [GHA007](/rules/GHA007.md): File Job Limit
@@ -0,0 +1,36 @@
1
+ ---
2
+ type: resource-type
3
+ title: Workflow
4
+ description: github resource type GitHub::Actions::Workflow
5
+ name: Workflow
6
+ lexicon: github
7
+ resource_type: GitHub::Actions::Workflow
8
+ ---
9
+ `GitHub::Actions::Workflow`, a resource type of the github lexicon.
10
+
11
+ ## Properties
12
+
13
+ - `jobs` (`Record<string, unknown>`, required): A workflow run is made up of one or more jobs. Jobs run in parallel by default. To run jobs sequentially, you can define dependencies on other jobs using the jobs.<job_id>.needs keyword. Each job runs in a fresh instance of the virtual environment specified by runs-on. You can run an unlimited number of jobs as long as you are within the workflow usage limits. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#usage-limits.
14
+ - `on` (`Record<string, unknown>`, required): The name of the GitHub event that triggers the workflow. You can provide a single event string, array of events, array of event types, or an event configuration map that schedules a workflow or restricts the execution of a workflow to specific files, tags, or branch changes. For a list of available events, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows.
15
+ - `concurrency` (`Concurrency | string`, optional): Concurrency ensures that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. The expression can use any context except for the secrets context. You can also specify concurrency at the workflow level. When a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. By default any previously pending job or workflow in the concurrency group will be canceled; this behavior can be changed with `queue`. To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true.
16
+ - `defaults` (`Defaults`, optional): A map of default settings that will apply to all jobs in the workflow.
17
+ - `env` (`Record<string, string>`, optional): A map of environment variables that are available to all jobs and steps in the workflow.
18
+ - `name` (`string`, optional): The name of your workflow. GitHub displays the names of your workflows on your repository's actions page. If you omit this field, GitHub sets the name to the workflow's filename.
19
+ - `permissions` (`Permissions | string`, optional)
20
+ - `run-name` (`string`, optional): The name for workflow runs generated from the workflow. GitHub displays the workflow run name in the list of workflow runs on your repository's 'Actions' tab.
21
+
22
+ ## Governed by
23
+
24
+ - [GHA005](/rules/GHA005.md): Extract Inline Structs
25
+ - [GHA006](/rules/GHA006.md): Multiple workflows share the same name
26
+ - [GHA017](/rules/GHA017.md): Workflow without explicit permissions block
27
+ - [GHA025](/rules/GHA025.md): Using pull_request_target without restrictions
28
+ - [GHA026](/rules/GHA026.md): Secret passed to action without environment protection
29
+ - [GHA028](/rules/GHA028.md): Workflow with no `on` triggers
30
+ - [GHA029](/rules/GHA029.md): Action or reusable workflow not pinned to a commit SHA
31
+ - [GHA033](/rules/GHA033.md): Blanket write-all token permissions
32
+ - [GHA034](/rules/GHA034.md): Write permissions granted workflow-wide instead of per-job
33
+ - [GHA035](/rules/GHA035.md): Elevated token scope on a trigger that can run untrusted code
34
+ - [GHA041](/rules/GHA041.md): Blanket secrets: inherit into a reusable workflow
35
+ - [GHA053](/rules/GHA053.md): Re-enables unsafe set-env / add-path workflow commands
36
+ - [GHA056](/rules/GHA056.md): Workflow without a name
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentius/chant-lexicon-github",
3
- "version": "0.41.20",
3
+ "version": "0.44.1",
4
4
  "description": "GitHub Actions lexicon for chant — declarative IaC in TypeScript",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://intentius.io/chant",
@@ -61,7 +61,7 @@
61
61
  "typescript": "^5.9.3"
62
62
  },
63
63
  "peerDependencies": {
64
- "@intentius/chant": "^0.41.20",
64
+ "@intentius/chant": "^0.44.1",
65
65
  "typescript": "^5.9.3"
66
66
  }
67
67
  }
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { generate, writeGeneratedFiles } from "./codegen/generate";
6
6
  import { packageLexicon } from "./codegen/package";
7
- import { writeFileSync, mkdirSync } from "fs";
7
+ import { writeBundleSpec } from "@intentius/chant/codegen/package";
8
8
  import { join, dirname } from "path";
9
9
  import { fileURLToPath } from "url";
10
10
 
@@ -19,24 +19,7 @@ console.error(`Generated ${genResult.resources} entities, ${genResult.properties
19
19
  const { spec, stats } = await packageLexicon({ verbose: true });
20
20
 
21
21
  const distDir = join(pkgDir, "dist");
22
- mkdirSync(join(distDir, "types"), { recursive: true });
23
- mkdirSync(join(distDir, "rules"), { recursive: true });
24
- mkdirSync(join(distDir, "skills"), { recursive: true });
25
-
26
- writeFileSync(join(distDir, "manifest.json"), JSON.stringify(spec.manifest, null, 2));
27
- writeFileSync(join(distDir, "meta.json"), spec.registry);
28
- writeFileSync(join(distDir, "types", "index.d.ts"), spec.typesDTS);
29
-
30
- for (const [name, content] of spec.rules) {
31
- writeFileSync(join(distDir, "rules", name), content);
32
- }
33
- for (const [name, content] of spec.skills) {
34
- writeFileSync(join(distDir, "skills", name), content);
35
- }
36
-
37
- if (spec.integrity) {
38
- writeFileSync(join(distDir, "integrity.json"), JSON.stringify(spec.integrity, null, 2));
39
- }
22
+ writeBundleSpec(spec, distDir);
40
23
 
41
24
  console.error(`Packaged ${stats.resources} entities, ${stats.ruleCount} rules, ${stats.skillCount} skills`);
42
25
  console.error(`dist/ written to ${distDir}`);