@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.
- package/dist/integrity.json +2 -2
- package/dist/manifest.json +1 -1
- package/dist/okf/index.md +70 -0
- package/dist/okf/rules/GHA001.md +11 -0
- package/dist/okf/rules/GHA002.md +15 -0
- package/dist/okf/rules/GHA003.md +11 -0
- package/dist/okf/rules/GHA004.md +11 -0
- package/dist/okf/rules/GHA005.md +17 -0
- package/dist/okf/rules/GHA006.md +15 -0
- package/dist/okf/rules/GHA007.md +16 -0
- package/dist/okf/rules/GHA008.md +11 -0
- package/dist/okf/rules/GHA009.md +11 -0
- package/dist/okf/rules/GHA010.md +11 -0
- package/dist/okf/rules/GHA011.md +15 -0
- package/dist/okf/rules/GHA012.md +11 -0
- package/dist/okf/rules/GHA013.md +15 -0
- package/dist/okf/rules/GHA014.md +15 -0
- package/dist/okf/rules/GHA015.md +11 -0
- package/dist/okf/rules/GHA016.md +11 -0
- package/dist/okf/rules/GHA017.md +15 -0
- package/dist/okf/rules/GHA018.md +15 -0
- package/dist/okf/rules/GHA019.md +11 -0
- package/dist/okf/rules/GHA020.md +11 -0
- package/dist/okf/rules/GHA021.md +15 -0
- package/dist/okf/rules/GHA022.md +15 -0
- package/dist/okf/rules/GHA023.md +15 -0
- package/dist/okf/rules/GHA024.md +11 -0
- package/dist/okf/rules/GHA025.md +15 -0
- package/dist/okf/rules/GHA026.md +15 -0
- package/dist/okf/rules/GHA027.md +11 -0
- package/dist/okf/rules/GHA028.md +15 -0
- package/dist/okf/rules/GHA029.md +16 -0
- package/dist/okf/rules/GHA030.md +15 -0
- package/dist/okf/rules/GHA031.md +15 -0
- package/dist/okf/rules/GHA032.md +15 -0
- package/dist/okf/rules/GHA033.md +16 -0
- package/dist/okf/rules/GHA034.md +16 -0
- package/dist/okf/rules/GHA035.md +16 -0
- package/dist/okf/rules/GHA036.md +15 -0
- package/dist/okf/rules/GHA037.md +15 -0
- package/dist/okf/rules/GHA038.md +15 -0
- package/dist/okf/rules/GHA039.md +15 -0
- package/dist/okf/rules/GHA040.md +15 -0
- package/dist/okf/rules/GHA041.md +16 -0
- package/dist/okf/rules/GHA042.md +15 -0
- package/dist/okf/rules/GHA043.md +15 -0
- package/dist/okf/rules/GHA044.md +15 -0
- package/dist/okf/rules/GHA045.md +15 -0
- package/dist/okf/rules/GHA046.md +15 -0
- package/dist/okf/rules/GHA047.md +15 -0
- package/dist/okf/rules/GHA048.md +15 -0
- package/dist/okf/rules/GHA049.md +15 -0
- package/dist/okf/rules/GHA050.md +15 -0
- package/dist/okf/rules/GHA051.md +15 -0
- package/dist/okf/rules/GHA052.md +15 -0
- package/dist/okf/rules/GHA053.md +16 -0
- package/dist/okf/rules/GHA054.md +15 -0
- package/dist/okf/rules/GHA055.md +15 -0
- package/dist/okf/rules/GHA056.md +15 -0
- package/dist/okf/rules/GHA057.md +11 -0
- package/dist/okf/rules/GHA058.md +11 -0
- package/dist/okf/types/Job.md +69 -0
- package/dist/okf/types/ReusableWorkflowCallJob.md +26 -0
- package/dist/okf/types/Workflow.md +36 -0
- package/package.json +2 -2
- package/src/package-cli.ts +2 -19
package/dist/integrity.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"algorithm": "sha256",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"manifest.json": "
|
|
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": "
|
|
70
|
+
"composite": "ca61feaee9c33a0a8282bedfa8fafff2c335b8d827a52d37a4c10131b19d7a4d"
|
|
71
71
|
}
|
package/dist/manifest.json
CHANGED
|
@@ -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,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,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: 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,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,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,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,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.
|
|
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.
|
|
64
|
+
"@intentius/chant": "^0.44.1",
|
|
65
65
|
"typescript": "^5.9.3"
|
|
66
66
|
}
|
|
67
67
|
}
|
package/src/package-cli.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { generate, writeGeneratedFiles } from "./codegen/generate";
|
|
6
6
|
import { packageLexicon } from "./codegen/package";
|
|
7
|
-
import {
|
|
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
|
-
|
|
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}`);
|