Skip to content

Commit 5ba4f6d

Browse files
authored
Merge pull request #9826 from erik-krogh/combineWork
QL: rewrite the QL-for-QL workflow to just do everything in one go
2 parents 33fdcf1 + a7a9428 commit 5ba4f6d

File tree

2 files changed

+50
-57
lines changed

2 files changed

+50
-57
lines changed

.github/workflows/ql-for-ql-build.yml

Lines changed: 20 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ env:
1010
CARGO_TERM_COLOR: always
1111

1212
jobs:
13-
queries:
14-
runs-on: ubuntu-latest
13+
analyze:
14+
runs-on: ubuntu-latest-xl
1515
steps:
16+
### Build the queries ###
1617
- uses: actions/checkout@v3
1718
- name: Find codeql
1819
id: find-codeql
@@ -48,11 +49,7 @@ jobs:
4849
name: query-pack-zip
4950
path: ${{ runner.temp }}/query-pack.zip
5051

51-
extractors:
52-
runs-on: ubuntu-latest
53-
54-
steps:
55-
- uses: actions/checkout@v3
52+
### Build the extractor ###
5653
- name: Cache entire extractor
5754
id: cache-extractor
5855
uses: actions/cache@v3
@@ -96,15 +93,8 @@ jobs:
9693
ql/target/release/ql-extractor
9794
ql/target/release/ql-extractor.exe
9895
retention-days: 1
99-
package:
100-
runs-on: ubuntu-latest
101-
102-
needs:
103-
- extractors
104-
- queries
10596

106-
steps:
107-
- uses: actions/checkout@v3
97+
### Package the queries and extractor ###
10898
- uses: actions/download-artifact@v3
10999
with:
110100
name: query-pack-zip
@@ -132,16 +122,8 @@ jobs:
132122
name: codeql-ql-pack
133123
path: codeql-ql.zip
134124
retention-days: 1
135-
analyze:
136-
runs-on: ubuntu-latest
137-
strategy:
138-
matrix:
139-
folder: [cpp, csharp, java, javascript, python, ql, ruby, swift, go]
140-
141-
needs:
142-
- package
143125

144-
steps:
126+
### Run the analysis ###
145127
- name: Download pack
146128
uses: actions/download-artifact@v3
147129
with:
@@ -161,22 +143,18 @@ jobs:
161143
env:
162144
PACK: ${{ runner.temp }}/pack
163145

164-
- name: Checkout repository
165-
uses: actions/checkout@v3
166146
- name: Create CodeQL config file
167147
run: |
168-
echo "paths:" > ${CONF}
169-
echo " - ${FOLDER}" >> ${CONF}
170148
echo "paths-ignore:" >> ${CONF}
171149
echo " - ql/ql/test" >> ${CONF}
150+
echo " - \"*/ql/lib/upgrades/\"" >> ${CONF}
172151
echo "disable-default-queries: true" >> ${CONF}
173152
echo "packs:" >> ${CONF}
174153
echo " - codeql/ql" >> ${CONF}
175154
echo "Config file: "
176155
cat ${CONF}
177156
env:
178157
CONF: ./ql-for-ql-config.yml
179-
FOLDER: ${{ matrix.folder }}
180158
- name: Initialize CodeQL
181159
uses: github/codeql-action/init@aa93aea877e5fb8841bcb1193f672abf6e9f2980
182160
with:
@@ -187,39 +165,24 @@ jobs:
187165
- name: Perform CodeQL Analysis
188166
uses: github/codeql-action/analyze@aa93aea877e5fb8841bcb1193f672abf6e9f2980
189167
with:
190-
category: "ql-for-ql-${{ matrix.folder }}"
168+
category: "ql-for-ql"
191169
- name: Copy sarif file to CWD
192-
run: cp ../results/ql.sarif ./${{ matrix.folder }}.sarif
170+
run: cp ../results/ql.sarif ./ql-for-ql.sarif
193171
- name: Fixup the $scema in sarif # Until https://github.com/microsoft/sarif-vscode-extension/pull/436/ is part in a stable release
194172
run: |
195-
sed -i 's/\$schema.*/\$schema": "https:\/\/raw.githubusercontent.com\/oasis-tcs\/sarif-spec\/master\/Schemata\/sarif-schema-2.1.0",/' ${{ matrix.folder }}.sarif
173+
sed -i 's/\$schema.*/\$schema": "https:\/\/raw.githubusercontent.com\/oasis-tcs\/sarif-spec\/master\/Schemata\/sarif-schema-2.1.0",/' ql-for-ql.sarif
196174
- name: Sarif as artifact
197175
uses: actions/upload-artifact@v3
198176
with:
199-
name: ${{ matrix.folder }}.sarif
200-
path: ${{ matrix.folder }}.sarif
201-
202-
combine:
203-
runs-on: ubuntu-latest
204-
needs:
205-
- analyze
206-
207-
steps:
208-
- uses: actions/checkout@v3
209-
- name: Make a folder for artifacts.
210-
run: mkdir -p results
211-
- name: Download all sarif files
212-
uses: actions/download-artifact@v3
213-
with:
214-
path: results
215-
- uses: actions/setup-node@v3
216-
with:
217-
node-version: 16
218-
- name: Combine all sarif files
219-
run: |
220-
node ./ql/scripts/merge-sarif.js results/**/*.sarif combined.sarif
221-
- name: Upload combined sarif file
177+
name: ql-for-ql.sarif
178+
path: ql-for-ql.sarif
179+
- name: Split out the sarif file into langs
180+
run: |
181+
mkdir split-sarif
182+
node ./ql/scripts/split-sarif.js ql-for-ql.sarif split-sarif
183+
- name: Upload langs as artifacts
222184
uses: actions/upload-artifact@v3
223185
with:
224-
name: combined.sarif
225-
path: combined.sarif
186+
name: ql-for-ql-langs
187+
path: split-sarif
188+
retention-days: 1

ql/scripts/split-sarif.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
var fs = require("fs");
2+
3+
// the .sarif file to split, and then the directory to put the split files in.
4+
async function main(inputs) {
5+
const sarifFile = JSON.parse(fs.readFileSync(inputs[0]));
6+
const outFolder = inputs[1];
7+
8+
const out = {};
9+
10+
for (const result of sarifFile.runs[0].results) {
11+
const lang = getLanguage(result);
12+
if (!out[lang]) {
13+
out[lang] = [];
14+
}
15+
out[lang].push(result);
16+
}
17+
18+
for (const lang in out) {
19+
const outSarif = JSON.parse(JSON.stringify(sarifFile));
20+
outSarif.runs[0].results = out[lang];
21+
fs.writeFileSync(`${outFolder}/${lang}.sarif`, JSON.stringify(outSarif, null, 2));
22+
}
23+
}
24+
25+
function getLanguage(result) {
26+
return result.locations[0].physicalLocation.artifactLocation.uri.split(
27+
"/"
28+
)[0];
29+
}
30+
main(process.argv.splice(2));

0 commit comments

Comments
 (0)