Skip to content

Commit 238f19a

Browse files
committed
sarif files need to be combined
1 parent 25fb90f commit 238f19a

File tree

4 files changed

+77
-11
lines changed

4 files changed

+77
-11
lines changed

.github/workflows/code_quality.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,4 @@ jobs:
7676
uses: github/codeql-action/upload-sarif@v3
7777
if: (success() || failure())
7878
with:
79-
sarif_file: "build/sarif-results"
79+
sarif_file: "build/sarif-results/checkstyle.sarif"

build.gradle

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
2+
13
plugins {
24
//Support for IntelliJ IDEA
35
//https://docs.gradle.org/current/userguide/idea_plugin.html
@@ -504,16 +506,11 @@ tasks.register('alldocJar', Zip){
504506
}
505507

506508

507-
tasks.register('sarifCopy', Copy) {
508-
def source = fileTree(dir: '.').matching { include "*/build/reports/checkstyle/main.sarif" }.asCollection()
509-
from source
510-
511-
512-
def counter = 0
513-
rename { String filename ->
514-
return (counter++) + "_.sarif"
515-
}
516-
into layout.buildDirectory.dir("sarif-results")
509+
tasks.register('sarifCopy', SarifJoiner) {
510+
def source =
511+
files(fileTree(dir: '.').matching { include "*/build/reports/checkstyle/main.sarif" })
512+
sarifFiles = source
513+
outputFile.set(layout.buildDirectory.file("sarif-results/checkstyle.sarif"))
517514
}
518515

519516
def checkstyleMarkdownReport(File xmlFile, File targetFile) {

buildSrc/build.gradle.kts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import org.gradle.kotlin.dsl.plugins
2+
3+
plugins {
4+
`kotlin-dsl`
5+
}
6+
7+
repositories {
8+
mavenCentral()
9+
gradlePluginPortal()
10+
}
11+
12+
kotlin {
13+
jvmToolchain(21)
14+
}
15+
16+
dependencies {
17+
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.0")
18+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import org.gradle.api.DefaultTask
2+
import org.gradle.api.file.FileCollection
3+
import org.gradle.api.file.RegularFileProperty
4+
import org.gradle.api.provider.Property
5+
import org.gradle.api.tasks.InputFiles
6+
import org.gradle.api.tasks.OutputFile
7+
import org.gradle.api.tasks.TaskAction
8+
import org.jetbrains.kotlin.com.google.gson.Gson
9+
import org.jetbrains.kotlin.com.google.gson.GsonBuilder
10+
import org.jetbrains.kotlin.com.google.gson.JsonElement
11+
import java.io.File
12+
13+
private val JsonElement.getResultsOfFirstRun
14+
get() = asJsonObject.get("runs").asJsonArray.get(0).asJsonObject.get("results").asJsonArray
15+
16+
abstract class SarifJoiner : DefaultTask() {
17+
@get:InputFiles
18+
abstract val sarifFiles: Property<FileCollection>
19+
20+
@get:OutputFile
21+
abstract val outputFile: RegularFileProperty
22+
23+
@TaskAction
24+
fun run() {
25+
val inputs = sarifFiles.get().files.toList()
26+
if (inputs.isEmpty()) return
27+
28+
val first = readSarif(inputs.first())
29+
val others = inputs.subList(1, inputs.size).map { readSarif(it) }
30+
31+
for (map in others) {
32+
first.getResultsOfFirstRun.addAll(map.getResultsOfFirstRun)
33+
}
34+
35+
writeSarif(outputFile.get().asFile, first)
36+
}
37+
38+
private fun writeSarif(out: File, first: JsonElement) {
39+
out.bufferedWriter(Charsets.UTF_8).use {
40+
gson.toJson(first, it)
41+
}
42+
}
43+
44+
45+
private fun readSarif(first: File): JsonElement {
46+
first.reader().use {
47+
return gson.fromJson(it, JsonElement::class.java)!!
48+
}
49+
}
50+
}
51+
val gson: Gson = GsonBuilder().setPrettyPrinting().create()

0 commit comments

Comments
 (0)