Merge pull request #28 from GitHubSecurityLab/new_ast_refactor

Refactor ast nodes
This commit is contained in:
Alvaro Muñoz
2024-03-12 10:17:34 +01:00
committed by GitHub
15 changed files with 1286 additions and 1127 deletions

View File

@@ -1,7 +1,7 @@
/** Provides classes for working with locations. */
import files.FileSystem
import codeql.actions.Ast
import codeql.actions.ast.internal.Ast
bindingset[loc]
pragma[inline_late]
@@ -19,7 +19,7 @@ newtype TLocation =
locations_default(_, file, startline, startcolumn, endline, endcolumn)
)
or
exists(ExpressionNode e |
exists(ExpressionImpl e |
e.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
)
or

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -80,7 +80,7 @@ module Completion {
}
module CfgScope {
abstract class CfgScope extends WorkflowNode { }
abstract class CfgScope extends AstNode { }
class WorkflowScope extends CfgScope instanceof Workflow { }
@@ -215,7 +215,7 @@ private class StrategyTree extends StandardPreOrderTree instanceof Strategy {
override ControlFlowTree getChildNode(int i) {
result =
rank[i](AstNode child, Location l |
child = super.getAMatrixVar() and l = child.getLocation()
child = super.getAMatrixVarExpr() and l = child.getLocation()
|
child
order by
@@ -224,15 +224,14 @@ private class StrategyTree extends StandardPreOrderTree instanceof Strategy {
}
}
private class JobTree extends StandardPreOrderTree instanceof Job {
private class JobTree extends StandardPreOrderTree instanceof LocalJob {
override ControlFlowTree getChildNode(int i) {
result =
rank[i](AstNode child, Location l |
(
child = super.getAStep() or
child = super.getOutputs() or
child = super.getStrategy() or
child = super.getUses()
child = super.getStrategy()
) and
l = child.getLocation()
|
@@ -261,7 +260,7 @@ private class RunTree extends StandardPreOrderTree instanceof Run {
override ControlFlowTree getChildNode(int i) {
result =
rank[i](AstNode child, Location l |
(child = super.getInScopeEnvVarExpr(_) or child = super.getScript()) and
(child = super.getInScopeEnvVarExpr(_) or child = super.getAnScriptExpr()) and
l = child.getLocation()
|
child
@@ -271,10 +270,10 @@ private class RunTree extends StandardPreOrderTree instanceof Run {
}
}
private class StringValueTree extends StandardPreOrderTree instanceof StringValue {
private class ScalarValueTree extends StandardPreOrderTree instanceof ScalarValue {
override ControlFlowTree getChildNode(int i) {
result =
rank[i](ExpressionNode child, Location l |
rank[i](Expression child, Location l |
child = super.getAChildNode() and
l = child.getLocation()
|
@@ -289,6 +288,6 @@ private class UsesLeaf extends LeafTree instanceof Uses { }
private class InputTree extends LeafTree instanceof Input { }
private class StringValueLeaf extends LeafTree instanceof StringValue { }
private class ScalarValueLeaf extends LeafTree instanceof ScalarValue { }
private class ExpressionLeaf extends LeafTree instanceof ExpressionNode { }
private class ExpressionLeaf extends LeafTree instanceof Expression { }

View File

@@ -38,7 +38,7 @@ predicate runEnvToScriptStoreStep(DataFlow::Node pred, DataFlow::Node succ, Data
c = any(DataFlow::FieldContent ct | ct.getName() = output.replaceAll("output\\.", "")) and
r.getInScopeEnvVarExpr(varName) = pred.asExpr() and
exists(string script, string line |
script = r.getScript().getValue() and
script = r.getScript() and
line = script.splitAt("\n") and
(
output = line.regexpCapture(".*::set-output\\s+name=(.*)::.*", 1) or

View File

@@ -243,7 +243,7 @@ predicate envCtxLocalStep(Node nodeFrom, Node nodeTo) {
/**
* Holds if there is a local flow step from `nodeFrom` to `nodeTo`.
* For Actions, we dont need SSA nodes since it should be already in SSA form
* Local flow steps are always between two nodes in the same Cfg scope (job definition).
* Local flow steps are always between two nodes in the same Cfg scope.
*/
pragma[nomagic]
predicate localFlowStep(Node nodeFrom, Node nodeTo) {

View File

@@ -4,6 +4,3 @@ extensions:
extensible: sinkModel
data:
- ["actions/github-script","*","input.script","expression-injection"]

View File

@@ -15,7 +15,7 @@ import PartialFlow::PartialPathGraph
private module MyConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) {
source instanceof RemoteFlowSource and
source.getLocation().getFile().getBaseName() = "argus_case_study.yml"
source.getLocation().getFile().getBaseName() = "test.yml"
}
predicate isSink(DataFlow::Node sink) { none() }

View File

@@ -18,7 +18,7 @@ import codeql.actions.dataflow.ExternalFlow
private class ExpressionInjectionSink extends DataFlow::Node {
ExpressionInjectionSink() {
exists(Run e | e.getScript().getAnExpression() = this.asExpr()) or
exists(Run e | e.getAnScriptExpr() = this.asExpr()) or
externallyDefinedSink(this, "expression-injection")
}
}

View File

@@ -18,7 +18,7 @@ import codeql.actions.dataflow.ExternalFlow
private class ExpressionInjectionSink extends DataFlow::Node {
ExpressionInjectionSink() {
exists(Run e | e.getScript().getAnExpression() = this.asExpr()) or
exists(Run e | e.getAnScriptExpr() = this.asExpr()) or
externallyDefinedSink(this, "expression-injection")
}
}

View File

@@ -19,7 +19,7 @@ import codeql.actions.dataflow.ExternalFlow
private class ExpressionInjectionSink extends DataFlow::Node {
ExpressionInjectionSink() {
exists(Run e | e.getScript().getAnExpression() = this.asExpr()) or
exists(Run e | e.getAnScriptExpr() = this.asExpr()) or
externallyDefinedSink(this, "expression-injection")
}
}
@@ -44,4 +44,4 @@ where
.hasTriggerEvent(source.getNode().(RemoteFlowSource).getATriggerEvent())
select sink.getNode(), source, sink,
"Potential expression injection in $@, which may be controlled by an external user.", sink,
sink.getNode().asExpr().(ExpressionNode).getExpression()
sink.getNode().asExpr().(Expression).getExpression()

View File

@@ -19,7 +19,7 @@ import codeql.actions.dataflow.ExternalFlow
private class ExpressionInjectionSink extends DataFlow::Node {
ExpressionInjectionSink() {
exists(Run e | e.getScript().getAnExpression() = this.asExpr()) or
exists(Run e | e.getAnScriptExpr() = this.asExpr()) or
externallyDefinedSink(this, "expression-injection")
}
}
@@ -38,4 +38,4 @@ from MyFlow::PathNode source, MyFlow::PathNode sink
where MyFlow::flowPath(source, sink)
select sink.getNode(), source, sink,
"Potential expression injection in $@, which may be controlled by an external user.", sink,
sink.getNode().asExpr().(ExpressionNode).getRawExpression()
sink.getNode().asExpr().(Expression).getRawExpression()

View File

@@ -19,7 +19,10 @@ import actions
* An If node that contains an `actor` check
*/
class ActorCheck extends If {
ActorCheck() { this.getCondition().regexpMatch(".*github\\.(triggering_)?actor.*") }
ActorCheck() {
this.getCondition().regexpMatch(".*github\\.(triggering_)?actor.*") or
this.getCondition().regexpMatch(".*github\\.event\\.pull_request\\.user\\.login.*")
}
}
/**
@@ -32,7 +35,7 @@ class LabelCheck extends If {
}
}
from Workflow w, Job job, UsesStep checkoutStep
from Workflow w, LocalJob job, UsesStep checkoutStep
where
w.hasTriggerEvent("pull_request_target") and
w.getAJob() = job and

View File

@@ -1,110 +1,21 @@
files
| .github/workflows/expression_nodes.yml:0:0:0:0 | .github/workflows/expression_nodes.yml |
| .github/workflows/test.yml:0:0:0:0 | .github/workflows/test.yml |
yamlNodes
| .github/workflows/expression_nodes.yml:1:1:1:2 | on |
workflows
| .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:1:5:1:17 | issue_comment |
| .github/workflows/expression_nodes.yml:3:1:3:4 | jobs |
| .github/workflows/expression_nodes.yml:4:3:4:14 | echo-chamber |
| .github/workflows/expression_nodes.yml:4:3:21:47 | echo-chamber: |
| .github/workflows/expression_nodes.yml:5:5:5:11 | runs-on |
| .github/workflows/expression_nodes.yml:5:5:21:47 | runs-on ... -latest |
| .github/workflows/expression_nodes.yml:5:14:5:26 | ubuntu-latest |
| .github/workflows/expression_nodes.yml:6:5:6:9 | steps |
| .github/workflows/expression_nodes.yml:7:7:21:47 | - run: ... ody }}' |
| .github/workflows/expression_nodes.yml:7:9:7:11 | run |
| .github/workflows/expression_nodes.yml:7:9:8:6 | run: LI ... ody }}' |
| .github/workflows/expression_nodes.yml:7:14:7:58 | LINE 1e ... ody }}' |
| .github/workflows/expression_nodes.yml:8:9:8:11 | run |
| .github/workflows/expression_nodes.yml:8:9:10:6 | run: \| |
| .github/workflows/expression_nodes.yml:8:14:9:57 | \| |
| .github/workflows/expression_nodes.yml:10:9:10:11 | run |
| .github/workflows/expression_nodes.yml:10:9:13:6 | run: \| |
| .github/workflows/expression_nodes.yml:10:14:12:53 | \| |
| .github/workflows/expression_nodes.yml:13:9:13:11 | run |
| .github/workflows/expression_nodes.yml:13:9:16:6 | run: > |
| .github/workflows/expression_nodes.yml:13:14:15:46 | > |
| .github/workflows/expression_nodes.yml:16:9:16:11 | run |
| .github/workflows/expression_nodes.yml:16:9:20:6 | run: \| |
| .github/workflows/expression_nodes.yml:16:14:19:57 | \| |
| .github/workflows/expression_nodes.yml:20:9:20:11 | run |
| .github/workflows/expression_nodes.yml:20:9:21:47 | run: "L ... ody }}' |
| .github/workflows/expression_nodes.yml:20:14:21:46 | "LINE 1 ... ody }}' |
| .github/workflows/test.yml:1:1:1:2 | on |
| .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:1:5:1:8 | push |
| .github/workflows/test.yml:3:1:3:4 | jobs |
| .github/workflows/test.yml:4:3:4:6 | job1 |
| .github/workflows/test.yml:4:3:40:53 | job1: |
| .github/workflows/test.yml:5:5:5:11 | runs-on |
| .github/workflows/test.yml:5:5:31:2 | runs-on ... -latest |
| .github/workflows/test.yml:5:14:5:26 | ubuntu-latest |
| .github/workflows/test.yml:7:5:7:11 | outputs |
| .github/workflows/test.yml:8:7:8:16 | job_output |
| .github/workflows/test.yml:8:7:10:4 | job_out ... alue }} |
| .github/workflows/test.yml:8:19:8:49 | ${{ ste ... alue }} |
| .github/workflows/test.yml:10:5:10:9 | steps |
| .github/workflows/test.yml:11:7:31:2 | - uses: ... kout@v4 |
| .github/workflows/test.yml:11:9:11:12 | uses |
| .github/workflows/test.yml:11:9:15:6 | uses: a ... kout@v4 |
| .github/workflows/test.yml:11:15:11:33 | actions/checkout@v4 |
| .github/workflows/test.yml:12:9:12:12 | with |
| .github/workflows/test.yml:13:11:13:21 | fetch-depth |
| .github/workflows/test.yml:13:11:15:6 | fetch-depth: 0 |
| .github/workflows/test.yml:13:24:13:24 | 0 |
| .github/workflows/test.yml:15:9:15:12 | name |
| .github/workflows/test.yml:15:9:19:6 | name: G ... d files |
| .github/workflows/test.yml:15:15:15:31 | Get changed files |
| .github/workflows/test.yml:16:9:16:10 | id |
| .github/workflows/test.yml:16:13:16:18 | source |
| .github/workflows/test.yml:17:9:17:12 | uses |
| .github/workflows/test.yml:17:15:17:42 | tj-acti ... les@v40 |
| .github/workflows/test.yml:19:9:19:12 | name |
| .github/workflows/test.yml:19:9:26:6 | name: R ... d files |
| .github/workflows/test.yml:19:15:19:43 | Remove ... d files |
| .github/workflows/test.yml:20:9:20:10 | id |
| .github/workflows/test.yml:20:13:20:16 | step |
| .github/workflows/test.yml:21:9:21:12 | uses |
| .github/workflows/test.yml:21:15:21:55 | mad9000 ... tring@3 |
| .github/workflows/test.yml:22:9:22:12 | with |
| .github/workflows/test.yml:23:11:23:16 | source |
| .github/workflows/test.yml:23:11:26:6 | source: ... iles }} |
| .github/workflows/test.yml:23:19:23:63 | ${{ ste ... iles }} |
| .github/workflows/test.yml:24:11:24:14 | find |
| .github/workflows/test.yml:24:17:24:21 | "foo" |
| .github/workflows/test.yml:25:11:25:17 | replace |
| .github/workflows/test.yml:25:20:25:21 | "" |
| .github/workflows/test.yml:26:9:26:10 | id |
| .github/workflows/test.yml:26:9:28:6 | id: simplesink1 |
| .github/workflows/test.yml:26:13:26:23 | simplesink1 |
| .github/workflows/test.yml:27:9:27:11 | run |
| .github/workflows/test.yml:27:14:27:63 | echo ${ ... iles }} |
| .github/workflows/test.yml:28:9:28:10 | id |
| .github/workflows/test.yml:28:9:31:2 | id: simplesink2 |
| .github/workflows/test.yml:28:13:28:23 | simplesink2 |
| .github/workflows/test.yml:29:9:29:11 | run |
| .github/workflows/test.yml:29:14:29:54 | ${{ git ... .ref }} |
| .github/workflows/test.yml:31:3:31:6 | job2 |
| .github/workflows/test.yml:32:5:32:11 | runs-on |
| .github/workflows/test.yml:32:5:40:53 | runs-on ... -latest |
| .github/workflows/test.yml:32:14:32:26 | ubuntu-latest |
| .github/workflows/test.yml:34:5:34:6 | if |
| .github/workflows/test.yml:34:9:34:23 | ${{ always() }} |
| .github/workflows/test.yml:36:5:36:9 | needs |
| .github/workflows/test.yml:36:12:36:15 | job1 |
| .github/workflows/test.yml:38:5:38:9 | steps |
| .github/workflows/test.yml:39:7:40:53 | - id: sink |
| .github/workflows/test.yml:39:9:39:10 | id |
| .github/workflows/test.yml:39:9:40:53 | id: sink |
| .github/workflows/test.yml:39:13:39:16 | sink |
| .github/workflows/test.yml:40:9:40:11 | run |
| .github/workflows/test.yml:40:14:40:52 | echo ${ ... utput}} |
jobNodes
reusableWorkflows
compositeActions
jobs
| .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:32:5:40:53 | Job: job2 |
stepNodes
localJobs
| .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:32:5:40:53 | Job: job2 |
extJobs
steps
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step |
@@ -117,17 +28,17 @@ stepNodes
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink |
runNodes
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step |
| .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step |
| .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step |
| .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink |
runExprNodes
runSteps
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step | LINE 1echo '${{ github.event.comment.body }}' |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step | LINE 1 echo '${{ github.event.comment.body }}'\n |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\n |
| .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}'\n |
| .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\nLINE 3 echo '${{ github.event.comment.body }}'\n |
| .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}' |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 | echo ${{ steps.source.outputs.all_changed_files }} |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 | ${{ github.event.pull_request.head.ref }} |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink | echo ${{needs.job1.outputs.job_output}} |
runExprs
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step | .github/workflows/expression_nodes.yml:7:27:7:58 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step | .github/workflows/expression_nodes.yml:9:25:9:56 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step | .github/workflows/expression_nodes.yml:11:25:11:56 | github.event.comment.body |
@@ -142,169 +53,156 @@ runExprNodes
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 | .github/workflows/test.yml:27:20:27:64 | steps.source.outputs.all_changed_files |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 | .github/workflows/test.yml:29:15:29:55 | github.event.pull_request.head.ref |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink | .github/workflows/test.yml:40:20:40:53 | needs.job1.outputs.job_output |
allUsesNodes
uses
| .github/workflows/test.yml:11:9:15:6 | Uses Step |
| .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
stepUsesNodes
stepUses
| .github/workflows/test.yml:11:9:15:6 | Uses Step |
| .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
jobUsesNodes
| .github/workflows/test.yml:11:9:15:6 | Uses Step |
| .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
usesSteps
usesArgs
| .github/workflows/test.yml:19:9:26:6 | Uses Step: step | source | .github/workflows/test.yml:23:20:23:64 | steps.source.outputs.all_changed_files |
runSteps
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step | LINE 1echo '${{ github.event.comment.body }}' |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step | LINE 1 echo '${{ github.event.comment.body }}'\n |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\n |
| .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}'\n |
| .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\nLINE 3 echo '${{ github.event.comment.body }}'\n |
| .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}' |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 | echo ${{ steps.source.outputs.all_changed_files }} |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 | ${{ github.event.pull_request.head.ref }} |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink | echo ${{needs.job1.outputs.job_output}} |
runStepChildren
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step | .github/workflows/expression_nodes.yml:7:9:7:11 | run |
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step | .github/workflows/expression_nodes.yml:7:14:7:58 | LINE 1e ... ody }}' |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step | .github/workflows/expression_nodes.yml:8:9:8:11 | run |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step | .github/workflows/expression_nodes.yml:8:14:9:57 | \| |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step | .github/workflows/expression_nodes.yml:10:9:10:11 | run |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step | .github/workflows/expression_nodes.yml:10:14:12:53 | \| |
| .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step | .github/workflows/expression_nodes.yml:13:9:13:11 | run |
| .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step | .github/workflows/expression_nodes.yml:13:14:15:46 | > |
| .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step | .github/workflows/expression_nodes.yml:16:9:16:11 | run |
| .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step | .github/workflows/expression_nodes.yml:16:14:19:57 | \| |
| .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step | .github/workflows/expression_nodes.yml:20:9:20:11 | run |
| .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step | .github/workflows/expression_nodes.yml:20:14:21:46 | "LINE 1 ... ody }}' |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 | .github/workflows/test.yml:26:9:26:10 | id |
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step | .github/workflows/expression_nodes.yml:7:14:7:58 | LINE 1echo '${{ github.event.comment.body }}' |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step | .github/workflows/expression_nodes.yml:8:14:9:57 | LINE 1 echo '${{ github.event.comment.body }}'\n |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step | .github/workflows/expression_nodes.yml:10:14:12:53 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\n |
| .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step | .github/workflows/expression_nodes.yml:13:14:15:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}'\n |
| .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step | .github/workflows/expression_nodes.yml:16:14:19:57 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\nLINE 3 echo '${{ github.event.comment.body }}'\n |
| .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step | .github/workflows/expression_nodes.yml:20:14:21:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}' |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 | .github/workflows/test.yml:26:13:26:23 | simplesink1 |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 | .github/workflows/test.yml:27:9:27:11 | run |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 | .github/workflows/test.yml:27:14:27:63 | echo ${ ... iles }} |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 | .github/workflows/test.yml:28:9:28:10 | id |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 | .github/workflows/test.yml:27:14:27:63 | echo ${{ steps.source.outputs.all_changed_files }} |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 | .github/workflows/test.yml:28:13:28:23 | simplesink2 |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 | .github/workflows/test.yml:29:9:29:11 | run |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 | .github/workflows/test.yml:29:14:29:54 | ${{ git ... .ref }} |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink | .github/workflows/test.yml:39:9:39:10 | id |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 | .github/workflows/test.yml:29:14:29:54 | ${{ github.event.pull_request.head.ref }} |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink | .github/workflows/test.yml:39:13:39:16 | sink |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink | .github/workflows/test.yml:40:9:40:11 | run |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink | .github/workflows/test.yml:40:14:40:52 | echo ${ ... utput}} |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink | .github/workflows/test.yml:40:14:40:52 | echo ${{needs.job1.outputs.job_output}} |
parentNodes
| .github/workflows/expression_nodes.yml:1:1:1:2 | on | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:1:5:1:17 | issue_comment | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:3:1:3:4 | jobs | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:4:3:4:14 | echo-chamber | .github/workflows/expression_nodes.yml:4:3:21:47 | echo-chamber: |
| .github/workflows/expression_nodes.yml:4:3:21:47 | echo-chamber: | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:5:5:5:11 | runs-on | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber | .github/workflows/expression_nodes.yml:4:3:21:47 | echo-chamber: |
| .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:5:14:5:26 | ubuntu-latest | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:5:14:5:26 | ubuntu-latest | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:6:5:6:9 | steps | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:7:7:21:47 | - run: ... ody }}' | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:7:9:7:11 | run | .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step |
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step | .github/workflows/expression_nodes.yml:7:7:21:47 | - run: ... ody }}' |
| .github/workflows/expression_nodes.yml:7:14:7:58 | LINE 1e ... ody }}' | .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step |
| .github/workflows/expression_nodes.yml:7:27:7:58 | github.event.comment.body | .github/workflows/expression_nodes.yml:7:14:7:58 | LINE 1e ... ody }}' |
| .github/workflows/expression_nodes.yml:8:9:8:11 | run | .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step | .github/workflows/expression_nodes.yml:7:7:21:47 | - run: ... ody }}' |
| .github/workflows/expression_nodes.yml:8:14:9:57 | \| | .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step |
| .github/workflows/expression_nodes.yml:9:25:9:56 | github.event.comment.body | .github/workflows/expression_nodes.yml:8:14:9:57 | \| |
| .github/workflows/expression_nodes.yml:10:9:10:11 | run | .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step | .github/workflows/expression_nodes.yml:7:7:21:47 | - run: ... ody }}' |
| .github/workflows/expression_nodes.yml:10:14:12:53 | \| | .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step |
| .github/workflows/expression_nodes.yml:11:25:11:56 | github.event.comment.body | .github/workflows/expression_nodes.yml:10:14:12:53 | \| |
| .github/workflows/expression_nodes.yml:12:24:12:51 | github.event.issue.body | .github/workflows/expression_nodes.yml:10:14:12:53 | \| |
| .github/workflows/expression_nodes.yml:13:9:13:11 | run | .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step |
| .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step | .github/workflows/expression_nodes.yml:7:7:21:47 | - run: ... ody }}' |
| .github/workflows/expression_nodes.yml:13:14:15:46 | > | .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step |
| .github/workflows/expression_nodes.yml:14:9:15:46 | github.event.comment.body | .github/workflows/expression_nodes.yml:13:14:15:46 | > |
| .github/workflows/expression_nodes.yml:14:9:15:46 | github.event.issue.body | .github/workflows/expression_nodes.yml:13:14:15:46 | > |
| .github/workflows/expression_nodes.yml:16:9:16:11 | run | .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step |
| .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step | .github/workflows/expression_nodes.yml:7:7:21:47 | - run: ... ody }}' |
| .github/workflows/expression_nodes.yml:16:14:19:57 | \| | .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step |
| .github/workflows/expression_nodes.yml:17:25:17:56 | github.event.comment.body | .github/workflows/expression_nodes.yml:16:14:19:57 | \| |
| .github/workflows/expression_nodes.yml:18:24:18:51 | github.event.issue.body | .github/workflows/expression_nodes.yml:16:14:19:57 | \| |
| .github/workflows/expression_nodes.yml:19:24:19:55 | github.event.comment.body | .github/workflows/expression_nodes.yml:16:14:19:57 | \| |
| .github/workflows/expression_nodes.yml:20:9:20:11 | run | .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step |
| .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step | .github/workflows/expression_nodes.yml:7:7:21:47 | - run: ... ody }}' |
| .github/workflows/expression_nodes.yml:20:14:21:46 | "LINE 1 ... ody }}' | .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step |
| .github/workflows/expression_nodes.yml:20:14:21:46 | github.event.comment.body | .github/workflows/expression_nodes.yml:20:14:21:46 | "LINE 1 ... ody }}' |
| .github/workflows/expression_nodes.yml:20:14:21:46 | github.event.issue.body | .github/workflows/expression_nodes.yml:20:14:21:46 | "LINE 1 ... ody }}' |
| .github/workflows/test.yml:1:1:1:2 | on | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:7:14:7:58 | LINE 1echo '${{ github.event.comment.body }}' | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:7:14:7:58 | LINE 1echo '${{ github.event.comment.body }}' | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:7:14:7:58 | LINE 1echo '${{ github.event.comment.body }}' | .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step |
| .github/workflows/expression_nodes.yml:7:27:7:58 | github.event.comment.body | .github/workflows/expression_nodes.yml:7:14:7:58 | LINE 1echo '${{ github.event.comment.body }}' |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:8:14:9:57 | LINE 1 echo '${{ github.event.comment.body }}'\n | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:8:14:9:57 | LINE 1 echo '${{ github.event.comment.body }}'\n | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:8:14:9:57 | LINE 1 echo '${{ github.event.comment.body }}'\n | .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step |
| .github/workflows/expression_nodes.yml:9:25:9:56 | github.event.comment.body | .github/workflows/expression_nodes.yml:8:14:9:57 | LINE 1 echo '${{ github.event.comment.body }}'\n |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:10:14:12:53 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\n | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:10:14:12:53 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\n | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:10:14:12:53 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\n | .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step |
| .github/workflows/expression_nodes.yml:11:25:11:56 | github.event.comment.body | .github/workflows/expression_nodes.yml:10:14:12:53 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\n |
| .github/workflows/expression_nodes.yml:12:24:12:51 | github.event.issue.body | .github/workflows/expression_nodes.yml:10:14:12:53 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\n |
| .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:13:14:15:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}'\n | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:13:14:15:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}'\n | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:13:14:15:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}'\n | .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step |
| .github/workflows/expression_nodes.yml:14:9:15:46 | github.event.comment.body | .github/workflows/expression_nodes.yml:13:14:15:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}'\n |
| .github/workflows/expression_nodes.yml:14:9:15:46 | github.event.issue.body | .github/workflows/expression_nodes.yml:13:14:15:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}'\n |
| .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:16:14:19:57 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\nLINE 3 echo '${{ github.event.comment.body }}'\n | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:16:14:19:57 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\nLINE 3 echo '${{ github.event.comment.body }}'\n | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:16:14:19:57 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\nLINE 3 echo '${{ github.event.comment.body }}'\n | .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step |
| .github/workflows/expression_nodes.yml:17:25:17:56 | github.event.comment.body | .github/workflows/expression_nodes.yml:16:14:19:57 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\nLINE 3 echo '${{ github.event.comment.body }}'\n |
| .github/workflows/expression_nodes.yml:18:24:18:51 | github.event.issue.body | .github/workflows/expression_nodes.yml:16:14:19:57 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\nLINE 3 echo '${{ github.event.comment.body }}'\n |
| .github/workflows/expression_nodes.yml:19:24:19:55 | github.event.comment.body | .github/workflows/expression_nodes.yml:16:14:19:57 | LINE 1 echo '${{ github.event.comment.body }}'\nLINE 2 echo '${{github.event.issue.body}}'\nLINE 3 echo '${{ github.event.comment.body }}'\n |
| .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:20:14:21:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}' | .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:20:14:21:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}' | .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:20:14:21:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}' | .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step |
| .github/workflows/expression_nodes.yml:20:14:21:46 | github.event.comment.body | .github/workflows/expression_nodes.yml:20:14:21:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}' |
| .github/workflows/expression_nodes.yml:20:14:21:46 | github.event.issue.body | .github/workflows/expression_nodes.yml:20:14:21:46 | LINE 1 echo '${{ github.event.comment.body }}' echo '${{github.event.issue.body}}' |
| .github/workflows/test.yml:1:5:1:8 | push | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:3:1:3:4 | jobs | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:4:3:4:6 | job1 | .github/workflows/test.yml:4:3:40:53 | job1: |
| .github/workflows/test.yml:4:3:40:53 | job1: | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:5:5:5:11 | runs-on | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:5:5:31:2 | Job: job1 | .github/workflows/test.yml:4:3:40:53 | job1: |
| .github/workflows/test.yml:5:5:31:2 | Job: job1 | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:5:14:5:26 | ubuntu-latest | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:5:14:5:26 | ubuntu-latest | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:7:5:7:11 | outputs | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:8:7:8:16 | job_output | .github/workflows/test.yml:8:7:10:4 | Job outputs node |
| .github/workflows/test.yml:8:7:10:4 | Job outputs node | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:8:7:10:4 | Job outputs node | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:8:19:8:49 | ${{ ste ... alue }} | .github/workflows/test.yml:8:7:10:4 | Job outputs node |
| .github/workflows/test.yml:8:20:8:50 | steps.step.outputs.value | .github/workflows/test.yml:8:19:8:49 | ${{ ste ... alue }} |
| .github/workflows/test.yml:10:5:10:9 | steps | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:11:7:31:2 | - uses: ... kout@v4 | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:11:9:11:12 | uses | .github/workflows/test.yml:11:9:15:6 | Uses Step |
| .github/workflows/test.yml:11:9:15:6 | Uses Step | .github/workflows/test.yml:11:7:31:2 | - uses: ... kout@v4 |
| .github/workflows/test.yml:8:7:10:4 | Job outputs node | .github/workflows/test.yml:8:7:10:4 | Job outputs node |
| .github/workflows/test.yml:8:19:8:49 | ${{ steps.step.outputs.value }} | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:8:19:8:49 | ${{ steps.step.outputs.value }} | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:8:19:8:49 | ${{ steps.step.outputs.value }} | .github/workflows/test.yml:8:7:10:4 | Job outputs node |
| .github/workflows/test.yml:8:20:8:50 | steps.step.outputs.value | .github/workflows/test.yml:8:19:8:49 | ${{ steps.step.outputs.value }} |
| .github/workflows/test.yml:11:9:15:6 | Uses Step | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:11:15:11:33 | actions/checkout@v4 | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:11:15:11:33 | actions/checkout@v4 | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:11:15:11:33 | actions/checkout@v4 | .github/workflows/test.yml:11:9:15:6 | Uses Step |
| .github/workflows/test.yml:12:9:12:12 | with | .github/workflows/test.yml:11:9:15:6 | Uses Step |
| .github/workflows/test.yml:13:11:13:21 | fetch-depth | .github/workflows/test.yml:13:11:15:6 | fetch-depth: 0 |
| .github/workflows/test.yml:13:11:15:6 | fetch-depth: 0 | .github/workflows/test.yml:11:9:15:6 | Uses Step |
| .github/workflows/test.yml:13:24:13:24 | 0 | .github/workflows/test.yml:13:11:15:6 | fetch-depth: 0 |
| .github/workflows/test.yml:15:9:15:12 | name | .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:15:9:19:6 | Uses Step: source | .github/workflows/test.yml:11:7:31:2 | - uses: ... kout@v4 |
| .github/workflows/test.yml:13:24:13:24 | 0 | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:13:24:13:24 | 0 | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:13:24:13:24 | 0 | .github/workflows/test.yml:11:9:15:6 | Uses Step |
| .github/workflows/test.yml:15:9:19:6 | Uses Step: source | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:15:15:15:31 | Get changed files | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:15:15:15:31 | Get changed files | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:15:15:15:31 | Get changed files | .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:16:9:16:10 | id | .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:16:13:16:18 | source | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:16:13:16:18 | source | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:16:13:16:18 | source | .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:17:9:17:12 | uses | .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:17:15:17:42 | tj-acti ... les@v40 | .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:19:9:19:12 | name | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:19:9:26:6 | Uses Step: step | .github/workflows/test.yml:11:7:31:2 | - uses: ... kout@v4 |
| .github/workflows/test.yml:19:15:19:43 | Remove ... d files | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:20:9:20:10 | id | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:17:15:17:42 | tj-actions/changed-files@v40 | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:17:15:17:42 | tj-actions/changed-files@v40 | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:17:15:17:42 | tj-actions/changed-files@v40 | .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:19:9:26:6 | Uses Step: step | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:19:15:19:43 | Remove foo from changed files | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:19:15:19:43 | Remove foo from changed files | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:19:15:19:43 | Remove foo from changed files | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:20:13:20:16 | step | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:20:13:20:16 | step | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:20:13:20:16 | step | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:21:9:21:12 | uses | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:21:15:21:55 | mad9000 ... tring@3 | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:22:9:22:12 | with | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:23:11:23:16 | source | .github/workflows/test.yml:23:11:26:6 | source: ... iles }} |
| .github/workflows/test.yml:23:11:26:6 | source: ... iles }} | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:23:19:23:63 | ${{ ste ... iles }} | .github/workflows/test.yml:23:11:26:6 | source: ... iles }} |
| .github/workflows/test.yml:23:20:23:64 | steps.source.outputs.all_changed_files | .github/workflows/test.yml:23:19:23:63 | ${{ ste ... iles }} |
| .github/workflows/test.yml:24:11:24:14 | find | .github/workflows/test.yml:23:11:26:6 | source: ... iles }} |
| .github/workflows/test.yml:24:17:24:21 | "foo" | .github/workflows/test.yml:23:11:26:6 | source: ... iles }} |
| .github/workflows/test.yml:25:11:25:17 | replace | .github/workflows/test.yml:23:11:26:6 | source: ... iles }} |
| .github/workflows/test.yml:25:20:25:21 | "" | .github/workflows/test.yml:23:11:26:6 | source: ... iles }} |
| .github/workflows/test.yml:26:9:26:10 | id | .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 | .github/workflows/test.yml:11:7:31:2 | - uses: ... kout@v4 |
| .github/workflows/test.yml:21:15:21:55 | mad9000/actions-find-and-replace-string@3 | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:21:15:21:55 | mad9000/actions-find-and-replace-string@3 | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:21:15:21:55 | mad9000/actions-find-and-replace-string@3 | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:23:19:23:63 | ${{ steps.source.outputs.all_changed_files }} | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:23:19:23:63 | ${{ steps.source.outputs.all_changed_files }} | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:23:19:23:63 | ${{ steps.source.outputs.all_changed_files }} | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:23:20:23:64 | steps.source.outputs.all_changed_files | .github/workflows/test.yml:23:19:23:63 | ${{ steps.source.outputs.all_changed_files }} |
| .github/workflows/test.yml:24:17:24:21 | foo | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:24:17:24:21 | foo | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:24:17:24:21 | foo | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:25:20:25:21 | | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:25:20:25:21 | | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:25:20:25:21 | | .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:26:13:26:23 | simplesink1 | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:26:13:26:23 | simplesink1 | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:26:13:26:23 | simplesink1 | .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 |
| .github/workflows/test.yml:27:9:27:11 | run | .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 |
| .github/workflows/test.yml:27:14:27:63 | echo ${ ... iles }} | .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 |
| .github/workflows/test.yml:27:20:27:64 | steps.source.outputs.all_changed_files | .github/workflows/test.yml:27:14:27:63 | echo ${ ... iles }} |
| .github/workflows/test.yml:28:9:28:10 | id | .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 | .github/workflows/test.yml:11:7:31:2 | - uses: ... kout@v4 |
| .github/workflows/test.yml:27:14:27:63 | echo ${{ steps.source.outputs.all_changed_files }} | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:27:14:27:63 | echo ${{ steps.source.outputs.all_changed_files }} | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:27:14:27:63 | echo ${{ steps.source.outputs.all_changed_files }} | .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 |
| .github/workflows/test.yml:27:20:27:64 | steps.source.outputs.all_changed_files | .github/workflows/test.yml:27:14:27:63 | echo ${{ steps.source.outputs.all_changed_files }} |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:28:13:28:23 | simplesink2 | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:28:13:28:23 | simplesink2 | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:28:13:28:23 | simplesink2 | .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 |
| .github/workflows/test.yml:29:9:29:11 | run | .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 |
| .github/workflows/test.yml:29:14:29:54 | ${{ git ... .ref }} | .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 |
| .github/workflows/test.yml:29:15:29:55 | github.event.pull_request.head.ref | .github/workflows/test.yml:29:14:29:54 | ${{ git ... .ref }} |
| .github/workflows/test.yml:31:3:31:6 | job2 | .github/workflows/test.yml:4:3:40:53 | job1: |
| .github/workflows/test.yml:32:5:32:11 | runs-on | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:32:5:40:53 | Job: job2 | .github/workflows/test.yml:4:3:40:53 | job1: |
| .github/workflows/test.yml:29:14:29:54 | ${{ github.event.pull_request.head.ref }} | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:29:14:29:54 | ${{ github.event.pull_request.head.ref }} | .github/workflows/test.yml:5:5:31:2 | Job: job1 |
| .github/workflows/test.yml:29:14:29:54 | ${{ github.event.pull_request.head.ref }} | .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 |
| .github/workflows/test.yml:29:15:29:55 | github.event.pull_request.head.ref | .github/workflows/test.yml:29:14:29:54 | ${{ github.event.pull_request.head.ref }} |
| .github/workflows/test.yml:32:5:40:53 | Job: job2 | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:32:14:32:26 | ubuntu-latest | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:32:14:32:26 | ubuntu-latest | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:34:5:34:6 | if | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:34:9:34:23 | ${{ always() }} | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:34:9:34:23 | ${{ always() }} | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:34:9:34:23 | ${{ always() }} | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:34:9:34:23 | ${{ always() }} | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:34:9:34:23 | ${{ always() }} | .github/workflows/test.yml:34:9:34:23 | ${{ always() }} |
| .github/workflows/test.yml:34:9:34:23 | ${{ always() }} | .github/workflows/test.yml:34:9:34:23 | ${{ always() }} |
| .github/workflows/test.yml:34:10:34:24 | always() | .github/workflows/test.yml:34:9:34:23 | ${{ always() }} |
| .github/workflows/test.yml:36:5:36:9 | needs | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:34:10:34:24 | always() | .github/workflows/test.yml:34:9:34:23 | ${{ always() }} |
| .github/workflows/test.yml:36:12:36:15 | job1 | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:36:12:36:15 | job1 | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:38:5:38:9 | steps | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:39:7:40:53 | - id: sink | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:39:9:39:10 | id | .github/workflows/test.yml:39:9:40:53 | Run Step: sink |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink | .github/workflows/test.yml:39:7:40:53 | - id: sink |
| .github/workflows/test.yml:36:12:36:15 | job1 | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:36:12:36:15 | job1 | .github/workflows/test.yml:36:12:36:15 | job1 |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:39:13:39:16 | sink | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:39:13:39:16 | sink | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:39:13:39:16 | sink | .github/workflows/test.yml:39:9:40:53 | Run Step: sink |
| .github/workflows/test.yml:40:9:40:11 | run | .github/workflows/test.yml:39:9:40:53 | Run Step: sink |
| .github/workflows/test.yml:40:14:40:52 | echo ${ ... utput}} | .github/workflows/test.yml:39:9:40:53 | Run Step: sink |
| .github/workflows/test.yml:40:20:40:53 | needs.job1.outputs.job_output | .github/workflows/test.yml:40:14:40:52 | echo ${ ... utput}} |
| .github/workflows/test.yml:40:14:40:52 | echo ${{needs.job1.outputs.job_output}} | .github/workflows/test.yml:1:1:40:53 | on: push |
| .github/workflows/test.yml:40:14:40:52 | echo ${{needs.job1.outputs.job_output}} | .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:40:14:40:52 | echo ${{needs.job1.outputs.job_output}} | .github/workflows/test.yml:39:9:40:53 | Run Step: sink |
| .github/workflows/test.yml:40:20:40:53 | needs.job1.outputs.job_output | .github/workflows/test.yml:40:14:40:52 | echo ${{needs.job1.outputs.job_output}} |
cfgNodes
| .github/workflows/expression_nodes.yml:1:1:21:47 | enter on: issue_comment |
| .github/workflows/expression_nodes.yml:1:1:21:47 | exit on: issue_comment |
@@ -312,26 +210,20 @@ cfgNodes
| .github/workflows/expression_nodes.yml:1:1:21:47 | on: issue_comment |
| .github/workflows/expression_nodes.yml:5:5:21:47 | Job: echo-chamber |
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step |
| .github/workflows/expression_nodes.yml:7:14:7:58 | LINE 1e ... ody }}' |
| .github/workflows/expression_nodes.yml:7:27:7:58 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step |
| .github/workflows/expression_nodes.yml:8:14:9:57 | \| |
| .github/workflows/expression_nodes.yml:9:25:9:56 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step |
| .github/workflows/expression_nodes.yml:10:14:12:53 | \| |
| .github/workflows/expression_nodes.yml:11:25:11:56 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:12:24:12:51 | github.event.issue.body |
| .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step |
| .github/workflows/expression_nodes.yml:13:14:15:46 | > |
| .github/workflows/expression_nodes.yml:14:9:15:46 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:14:9:15:46 | github.event.issue.body |
| .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step |
| .github/workflows/expression_nodes.yml:16:14:19:57 | \| |
| .github/workflows/expression_nodes.yml:17:25:17:56 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:18:24:18:51 | github.event.issue.body |
| .github/workflows/expression_nodes.yml:19:24:19:55 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step |
| .github/workflows/expression_nodes.yml:20:14:21:46 | "LINE 1 ... ody }}' |
| .github/workflows/expression_nodes.yml:20:14:21:46 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:20:14:21:46 | github.event.issue.body |
| .github/workflows/test.yml:1:1:40:53 | enter on: push |
@@ -346,14 +238,11 @@ cfgNodes
| .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:23:20:23:64 | steps.source.outputs.all_changed_files |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 |
| .github/workflows/test.yml:27:14:27:63 | echo ${ ... iles }} |
| .github/workflows/test.yml:27:20:27:64 | steps.source.outputs.all_changed_files |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 |
| .github/workflows/test.yml:29:14:29:54 | ${{ git ... .ref }} |
| .github/workflows/test.yml:29:15:29:55 | github.event.pull_request.head.ref |
| .github/workflows/test.yml:32:5:40:53 | Job: job2 |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink |
| .github/workflows/test.yml:40:14:40:52 | echo ${ ... utput}} |
| .github/workflows/test.yml:40:20:40:53 | needs.job1.outputs.job_output |
dfNodes
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step |
@@ -385,36 +274,6 @@ dfNodes
| .github/workflows/test.yml:29:15:29:55 | github.event.pull_request.head.ref |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink |
| .github/workflows/test.yml:40:20:40:53 | needs.job1.outputs.job_output |
exprNodes
| .github/workflows/expression_nodes.yml:7:9:8:6 | Run Step |
| .github/workflows/expression_nodes.yml:7:27:7:58 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:8:9:10:6 | Run Step |
| .github/workflows/expression_nodes.yml:9:25:9:56 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:10:9:13:6 | Run Step |
| .github/workflows/expression_nodes.yml:11:25:11:56 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:12:24:12:51 | github.event.issue.body |
| .github/workflows/expression_nodes.yml:13:9:16:6 | Run Step |
| .github/workflows/expression_nodes.yml:14:9:15:46 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:14:9:15:46 | github.event.issue.body |
| .github/workflows/expression_nodes.yml:16:9:20:6 | Run Step |
| .github/workflows/expression_nodes.yml:17:25:17:56 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:18:24:18:51 | github.event.issue.body |
| .github/workflows/expression_nodes.yml:19:24:19:55 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:20:9:21:47 | Run Step |
| .github/workflows/expression_nodes.yml:20:14:21:46 | github.event.comment.body |
| .github/workflows/expression_nodes.yml:20:14:21:46 | github.event.issue.body |
| .github/workflows/test.yml:8:7:10:4 | Job outputs node |
| .github/workflows/test.yml:8:20:8:50 | steps.step.outputs.value |
| .github/workflows/test.yml:11:9:15:6 | Uses Step |
| .github/workflows/test.yml:15:9:19:6 | Uses Step: source |
| .github/workflows/test.yml:19:9:26:6 | Uses Step: step |
| .github/workflows/test.yml:23:20:23:64 | steps.source.outputs.all_changed_files |
| .github/workflows/test.yml:26:9:28:6 | Run Step: simplesink1 |
| .github/workflows/test.yml:27:20:27:64 | steps.source.outputs.all_changed_files |
| .github/workflows/test.yml:28:9:31:2 | Run Step: simplesink2 |
| .github/workflows/test.yml:29:15:29:55 | github.event.pull_request.head.ref |
| .github/workflows/test.yml:39:9:40:53 | Run Step: sink |
| .github/workflows/test.yml:40:20:40:53 | needs.job1.outputs.job_output |
argumentNodes
| .github/workflows/test.yml:23:20:23:64 | steps.source.outputs.all_changed_files |
usesIds

View File

@@ -1,4 +1,3 @@
import codeql.actions.ast.internal.Yaml
import codeql.actions.Ast
import codeql.actions.Cfg as Cfg
import codeql.actions.DataFlow
@@ -7,28 +6,32 @@ import codeql.actions.dataflow.ExternalFlow
query predicate files(File f) { any() }
query predicate yamlNodes(YamlNode n) { any() }
query predicate workflows(Workflow w) { any() }
query predicate jobNodes(Job s) { any() }
query predicate reusableWorkflows(ReusableWorkflow w) { any() }
query predicate stepNodes(Step s) { any() }
query predicate compositeActions(CompositeAction w) { any() }
query predicate runNodes(Run s) { any() }
query predicate jobs(Job s) { any() }
query predicate runExprNodes(Run s, ExpressionNode e) { e = s.getScript().getAnExpression() }
query predicate localJobs(LocalJob s) { any() }
query predicate allUsesNodes(Uses s) { any() }
query predicate extJobs(ExternalJob s) { any() }
query predicate stepUsesNodes(UsesStep s) { any() }
query predicate steps(Step s) { any() }
query predicate jobUsesNodes(UsesStep s) { any() }
query predicate runSteps(Run run, string body) { run.getScript() = body }
query predicate usesSteps(Uses call, string argname, AstNode arg) {
query predicate runExprs(Run s, Expression e) { e = s.getAnScriptExpr() }
query predicate uses(Uses s) { any() }
query predicate stepUses(UsesStep s) { any() }
query predicate usesArgs(Uses call, string argname, Expression arg) {
call.getArgumentExpr(argname) = arg
}
query predicate runSteps(Run run, string body) { run.getScript().getValue() = body }
query predicate runStepChildren(Run run, AstNode child) { child.getParentNode() = run }
query predicate parentNodes(AstNode child, AstNode parent) { child.getParentNode() = parent }
@@ -37,8 +40,6 @@ query predicate cfgNodes(Cfg::Node n) { any() }
query predicate dfNodes(DataFlow::Node e) { any() }
query predicate exprNodes(DataFlow::Node e) { any() }
query predicate argumentNodes(DataFlow::ArgumentNode e) { any() }
query predicate usesIds(UsesStep s, string a) { s.getId() = a }