forked from NVIDIA/cuda-quantum
-
Notifications
You must be signed in to change notification settings - Fork 0
162 lines (153 loc) · 7.3 KB
/
codeql.yml
File metadata and controls
162 lines (153 loc) · 7.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# This workflow is used to override the set of languages analyzed,
# and to provide custom queries or build logic.
name: "CodeQL Advanced"
on:
push:
branches:
- 'main'
- 'releases/*'
- 'staging/*'
- 'experimental/*'
- 'features/*'
pull_request:
branches:
- 'main'
- 'releases/*'
- 'staging/*'
- 'experimental/*'
- 'features/*'
merge_group:
schedule:
- cron: '37 9 * * 2'
jobs:
analyze:
# Skip merge_group to avoid duplicate runs (code already scanned on pull_request)
# See https://github.com/github/codeql-action/issues/1537
if: ${{ github.event_name != 'merge_group' }}
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: 'ubuntu-latest'
permissions:
packages: read # required to fetch internal or private CodeQL packs
security-events: write
# read permissions below are only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# For analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
- language: python
build-mode: none # Consider setting this to manual and providing a build command to get more accurate scanning
# FIXME: enable code scanning for C++
# - language: c-cpp
# build-mode: manual # Consider setting this to manual and providing a build command to get more accurate scanning
steps:
- name: Checkout repository
uses: actions/checkout@v6
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{matrix.language}}"
# CodeQL status is not reported in merge queues. See https://github.com/github/codeql-action/issues/1537.
# Workaround: verify CodeQL passed via API keyed by pull_request.number so the PR gets a required status.
check_codeql_status:
name: Check CodeQL Status
needs: analyze
permissions:
contents: read
checks: read
pull-requests: read
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' }}
steps:
- name: Authenticate gh CLI
run: |
gh auth login --with-token <<< "${{ secrets.GITHUB_TOKEN }}"
- name: Check CodeQL Status
run: |
# Query by pull_request.number so the check is tied to the PR (required for merge-queue workaround).
# Find the "Analyze (language)" check run (the one that completes); filterBy "CodeQL" returns a different check that stays QUEUED.
pr_number="${{ github.event.pull_request.number }}"
owner="${{ github.event.repository.owner.login }}"
repo="${{ github.event.repository.name }}"
max_attempts=24
attempt=0
conclusion=""
while [ $attempt -lt $max_attempts ]; do
# Inline pr_number in the query so we only pass string variables (gh -f sends all as strings otherwise).
response=$(gh api graphql -f query="query(\$owner: String!, \$repo: String!) {
repository(owner: \$owner, name: \$repo) {
pullRequest(number: $pr_number) {
commits(last: 1) {
nodes {
commit {
checkSuites(first: 20) {
nodes {
checkRuns(first: 20) {
nodes {
name
status
conclusion
}
}
}
}
}
}
}
}
}
}" -f owner="$owner" -f repo="$repo")
# Find the check run whose name starts with "Analyze (" (the CodeQL matrix job)
conclusion=$(echo "$response" | jq -r '
.data.repository.pullRequest.commits.nodes[0].commit.checkSuites.nodes[]
| .checkRuns.nodes[] | select(.name | startswith("Analyze (")) | .conclusion
' | head -1)
status=$(echo "$response" | jq -r '
.data.repository.pullRequest.commits.nodes[0].commit.checkSuites.nodes[]
| .checkRuns.nodes[] | select(.name | startswith("Analyze (")) | .status
' | head -1)
if [ "$conclusion" != "null" ] && [ -n "$conclusion" ]; then
break
fi
attempt=$((attempt + 1))
echo "CodeQL check (PR #$pr_number) status=$status conclusion=$conclusion (attempt $attempt/$max_attempts), waiting 10s..."
sleep 10
done
if [ "$conclusion" != "SUCCESS" ]; then
echo "$response" | jq .
echo "CodeQL check failed (conclusion=$conclusion)"
exit 1
fi
echo "CodeQL check passed."