diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt index 0e00bb464bec6d04c8a6c96eaa57d08ea580f338..698c7f0d1699ae81acdaa73a59184e27880fad9c 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/TaskManager.kt @@ -16,6 +16,7 @@ import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.occmd.OccmdTask import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ort.OrtAdvisorTask import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ort.OrtAnalyzerTask import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.qodana.QodanaTask +import de.fraunhofer.iem.dataprovider.tool.service.ToolService import de.fraunhofer.iem.dataprovider.toolRun.service.ToolRunService import jakarta.annotation.PreDestroy import kotlinx.coroutines.CoroutineScope @@ -39,7 +40,7 @@ class TaskManager( private val repositoryService: RepositoryService, private val kpiService: KPIService, private val dependencyService: DependencyService, -// private val toolService: ToolService + private val toolService: ToolService ) { // The used default dispatcher is ok for CPU-bound workloads. However, @@ -156,15 +157,15 @@ class TaskManager( ) groupTaskManager.addTaskToGroup(groupId, ortAnalyzerTask.taskID) -// groupTaskManager.addTaskToGroup(groupId, detektTask.taskID) -// groupTaskManager.addTaskToGroup(groupId, qodanaTask.taskID) -// groupTaskManager.addTaskToGroup(groupId, occmdTask.taskID) + groupTaskManager.addTaskToGroup(groupId, detektTask.taskID) + groupTaskManager.addTaskToGroup(groupId, qodanaTask.taskID) + groupTaskManager.addTaskToGroup(groupId, occmdTask.taskID) worker.addTask(ortAnalyzerTask) -// worker.addTask(detektTask) -// worker.addTask(qodanaTask) -// worker.addTask(occmdTask) + worker.addTask(detektTask) + worker.addTask(qodanaTask) + worker.addTask(occmdTask) } is OrtAnalyzerDoneEvent -> { @@ -176,8 +177,8 @@ class TaskManager( event.repoId, event.groupID, dependencyService, - event.taskId -// toolService + event.taskId, + toolService ) worker.addTask(ortAdvisorTask) } diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/events/OrtAnalyzerDoneEvent.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/events/OrtAnalyzerDoneEvent.kt index a2c39978a9ee432185499158d4f78a46d4e548b5..8a900b2cc574c1f4d9043489400bc363b3f0b1fd 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/events/OrtAnalyzerDoneEvent.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/events/OrtAnalyzerDoneEvent.kt @@ -4,5 +4,5 @@ import java.util.* class OrtAnalyzerDoneEvent( val resultFileOutputDirectoryPath: String, - val repoId: UUID, val taskId: UUID, val groupID: UUID + val repoId: UUID, val taskId: UUID, val groupID: UUID? ) : Event() diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAdvisorTask.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAdvisorTask.kt index 79142343f32c9d568d7518905c8f4e3a6f32d963..ac23e1d3e0624ce25839d8b5c500b2d6ea34e80c 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAdvisorTask.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAdvisorTask.kt @@ -10,6 +10,8 @@ import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ToolProcessTask import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ort.dto.OrtResultDto import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ort.json.AdvisorResultJson import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.ort.json.OrtJson +import de.fraunhofer.iem.dataprovider.tool.dto.CreateToolDto +import de.fraunhofer.iem.dataprovider.tool.service.ToolService import kotlinx.serialization.json.* import org.springframework.core.io.ClassPathResource import org.springframework.core.io.Resource @@ -23,10 +25,10 @@ class OrtAdvisorTask( outputDirectoryPath: String, override val responseChannel: suspend (event: Event) -> Unit, override val repoId: UUID, - override val groupID: UUID, + override val groupID: UUID?, private val dependencyService: DependencyService, - override val taskID: UUID -// private val toolService: ToolService + override val taskID: UUID, + private val toolService: ToolService ) : ToolProcessTask<List<DependencyCreateDto>>() { private val resource: Resource = ClassPathResource("scripts/ort/ort_advisor.sh") @@ -79,10 +81,7 @@ class OrtAdvisorTask( result.forEach { dependency -> dependencyService.save(dependency.toDbObject()) } -// val ortTool = ToolEntity() -// ortTool.name = "ORT" -// ortTool.fullName = "oss-review-toolkit" -// toolService.save(ortTool) + toolService.findOrCreateTool(CreateToolDto("ORT", "ORT", "docker-snapshot")) } } diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAnalyzerTask.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAnalyzerTask.kt index 8cad3ef7d2ef2028c1e89f86db2692e1757e27dd..80a9ccf56bb157fca44127e752ba173ee1797a75 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAnalyzerTask.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/taskManager/tasks/tools/ort/OrtAnalyzerTask.kt @@ -15,7 +15,7 @@ class OrtAnalyzerTask( outputDirectoryPath: String, override val responseChannel: suspend (event: Event) -> Unit, override val repoId: UUID, - override val groupID: UUID + override val groupID: UUID? = null ) : ToolProcessTask<List<DependencyCreateDto>>() { private val resource: Resource = ClassPathResource("scripts/ort/ort_analyzer.sh") diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/dto/CreateToolDto.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/dto/CreateToolDto.kt new file mode 100644 index 0000000000000000000000000000000000000000..378e7d88a49c530533ccb96744b7741028cfaf34 --- /dev/null +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/dto/CreateToolDto.kt @@ -0,0 +1,13 @@ +package de.fraunhofer.iem.dataprovider.tool.dto + +import de.fraunhofer.iem.dataprovider.tool.entity.ToolEntity + +data class CreateToolDto(val name: String, val fullName: String, val version: String) { + fun asDbObject(): ToolEntity { + val toolEntity = ToolEntity() + toolEntity.name = this.name + toolEntity.fullName = this.fullName + toolEntity.version = this.version + return toolEntity + } +} diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/service/ToolService.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/service/ToolService.kt index cc76be211059f14afd6600c149938b5abf4cc4aa..61264fe50eb35efa3b061207497639c43ef71667 100644 --- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/service/ToolService.kt +++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/tool/service/ToolService.kt @@ -2,6 +2,7 @@ package de.fraunhofer.iem.dataprovider.tool.service import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.sarif.json.SarifToolJson import de.fraunhofer.iem.dataprovider.taskManager.tasks.tools.sarif.json.asDbObject +import de.fraunhofer.iem.dataprovider.tool.dto.CreateToolDto import de.fraunhofer.iem.dataprovider.tool.entity.ToolEntity import de.fraunhofer.iem.dataprovider.tool.repository.ToolRepository import org.springframework.stereotype.Service @@ -22,4 +23,13 @@ class ToolService( fun save(tool: ToolEntity) { toolRepository.save(tool) } + + fun findOrCreateTool(tool: CreateToolDto): ToolEntity { + return toolRepository.findByFullNameIgnoreCaseAndNameIgnoreCaseAndVersionIgnoreCase( + tool.fullName, + tool.name, + tool.version + ) + ?: toolRepository.save(tool.asDbObject()) + } } \ No newline at end of file diff --git a/src/main/resources/scripts/ort/ort_advisor.sh b/src/main/resources/scripts/ort/ort_advisor.sh new file mode 100755 index 0000000000000000000000000000000000000000..60a5ac32e7e31d5f1b29e687124eab273e7e8b58 --- /dev/null +++ b/src/main/resources/scripts/ort/ort_advisor.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +PROJECT_DIRECTORY=${1} +OUTPUT_DIRECTORY=${2} +echo Advisor Started +echo Input directory: "${PROJECT_DIRECTORY}" Output directory: "${OUTPUT_DIRECTORY}" + +script_dir="$(dirname "$0")" + + #add --network vulnerablecode_mynetwork when running together with a custom vulnerable code instance +docker run --rm\ +--network vulnerablecode_mynetwork \ +-v "${script_dir}":/config \ +-v "${PROJECT_DIRECTORY}":/project \ +-v "${OUTPUT_DIRECTORY}":/result \ +ort --config /config/config.yml --info advise -f JSON -i /project/analyzer-result.json --output-dir /result -a VulnerableCode +exit 0 \ No newline at end of file diff --git a/src/main/resources/scripts/ort/ort_analyzer.sh b/src/main/resources/scripts/ort/ort_analyzer.sh index ee1ccbf94dff52914dcecd86b4d8ab722fd40ce3..c2a5d8600be2cb7e3858149dd37a6c191764b215 100755 --- a/src/main/resources/scripts/ort/ort_analyzer.sh +++ b/src/main/resources/scripts/ort/ort_analyzer.sh @@ -7,7 +7,7 @@ echo Input directory: "${PROJECT_DIRECTORY}" Output directory: "${OUTPUT_DIRECTO script_dir="$(dirname "$0")" -docker run \ +docker run --rm \ -v "${script_dir}":/config \ -v "${PROJECT_DIRECTORY}":/project \ -v "${OUTPUT_DIRECTORY}":/result \