Skip to content

Commit 810333b

Browse files
committed
feat(reporter): Resolve Reporter issues and remove fallback resolution
Apply merged repository/global resolutions to Reporter issues, persist resolved items, and compute unresolved issue logging from resolved mappings. Remove the Reporter fallback that resolved all issues and vulnerabilities when the Evaluator did not run. Each worker now resolves its own items, making this catch-all unnecessary. Resolves #4365. Signed-off-by: Jyrki Keisala <jyrki.keisala@doubleopen.org>
1 parent 846b44d commit 810333b

File tree

4 files changed

+30
-38
lines changed

4 files changed

+30
-38
lines changed

workers/reporter/src/main/kotlin/ReporterRunner.kt

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ import org.eclipse.apoapsis.ortserver.workers.common.context.WorkerContext
4949
import org.eclipse.apoapsis.ortserver.workers.common.mapOptions
5050
import org.eclipse.apoapsis.ortserver.workers.common.readConfigFileValueWithDefault
5151
import org.eclipse.apoapsis.ortserver.workers.common.readConfigFileWithDefault
52-
import org.eclipse.apoapsis.ortserver.workers.common.resolveResolutionsWithMappings
5352
import org.eclipse.apoapsis.ortserver.workers.common.resolvedConfigurationContext
5453

5554
import org.ossreviewtoolkit.model.OrtResult
@@ -123,7 +122,6 @@ class ReporterRunner(
123122
)
124123

125124
var resolvedOrtResult = ortResult
126-
var resolvedItems: ResolvedItemsResult? = null
127125

128126
if (evaluatorConfig == null) {
129127
// Resolve package configurations if not already done by the evaluator.
@@ -156,14 +154,6 @@ class ReporterRunner(
156154
val resolutionProvider = DefaultResolutionProvider(resolutionsFromOrtResult.merge(resolutionsFromFile))
157155

158156
resolvedOrtResult = resolvedOrtResult.setResolutions(resolutionProvider)
159-
160-
// Compute resolved items mappings when evaluator didn't run.
161-
resolvedItems = resolveResolutionsWithMappings(
162-
issues = resolvedOrtResult.getIssues().values.flatten(),
163-
ruleViolations = emptyList(), // No evaluator = no rule violations
164-
vulnerabilities = resolvedOrtResult.getVulnerabilities().values.flatten(),
165-
resolutionProvider = resolutionProvider
166-
)
167157
}
168158

169159
val howToFixTextProviderScript = context.configManager.readConfigFileWithDefault(
@@ -189,12 +179,12 @@ class ReporterRunner(
189179
howToFixTextProvider
190180
)
191181

192-
// Only return the package configurations and resolved items if they were not already resolved by
193-
// the evaluator.
182+
// Only return the package configurations if not already resolved by the evaluator.
183+
// Resolved items are always null here; each worker resolves its own items.
194184
return ReporterRunnerResult(
195185
reportNames,
196186
resolvedOrtResult.resolvedConfiguration.packageConfigurations.takeIf { evaluatorConfig == null },
197-
resolvedItems,
187+
null,
198188
issues = issues
199189
)
200190
}

workers/reporter/src/main/kotlin/ReporterWorker.kt

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@ import org.eclipse.apoapsis.ortserver.workers.common.RunResult
3333
import org.eclipse.apoapsis.ortserver.workers.common.context.WorkerContextFactory
3434
import org.eclipse.apoapsis.ortserver.workers.common.env.EnvironmentService
3535
import org.eclipse.apoapsis.ortserver.workers.common.loadGlobalResolutions
36+
import org.eclipse.apoapsis.ortserver.workers.common.resolveResolutionsWithMappings
3637
import org.eclipse.apoapsis.ortserver.workers.common.validateForProcessing
3738

3839
import org.jetbrains.exposed.v1.jdbc.Database
3940

4041
import org.ossreviewtoolkit.model.Repository
4142
import org.ossreviewtoolkit.model.Severity
43+
import org.ossreviewtoolkit.model.utils.DefaultResolutionProvider
4244
import org.ossreviewtoolkit.utils.ort.ORT_VERSION
4345

4446
import org.slf4j.LoggerFactory
@@ -116,6 +118,20 @@ internal class ReporterWorker(
116118
reports = reports
117119
)
118120

121+
val allIssues = reporterRunnerResult.issues
122+
val reporterIssuesAsOrt = allIssues.map { it.mapToOrt() }
123+
124+
val resolutionsFromOrtResult = ortResult.repository.config.resolutions
125+
val globalResolutions = context.loadGlobalResolutions(adminConfigService)
126+
val resolutionProvider = DefaultResolutionProvider(resolutionsFromOrtResult.merge(globalResolutions))
127+
128+
val resolvedReporterItems = resolveResolutionsWithMappings(
129+
issues = reporterIssuesAsOrt,
130+
ruleViolations = emptyList(),
131+
vulnerabilities = emptyList(),
132+
resolutionProvider = resolutionProvider
133+
)
134+
119135
db.dbQuery {
120136
ortRunService.storeReporterRun(reporterRun)
121137
reporterRunnerResult.resolvedPackageConfigurations?.let {
@@ -127,18 +143,11 @@ internal class ReporterWorker(
127143
reporterRunnerResult.issues.takeUnless { it.isEmpty() }?.let {
128144
ortRunService.storeIssues(ortRun.id, it)
129145
}
146+
ortRunService.storeResolvedItems(ortRun.id, resolvedReporterItems)
130147
}
131148

132-
val allIssues = reporterRunnerResult.issues
133-
134-
val repositoryConfigIssueResolutions = ortResult.repository.config.resolutions.issues
135-
val globalIssueResolutions = context.loadGlobalResolutions(adminConfigService).issues
136-
137-
val unresolvedIssues = allIssues
138-
.map { issue -> issue.mapToOrt() }
139-
.filter { issue ->
140-
repositoryConfigIssueResolutions.none { it.matches(issue) } &&
141-
globalIssueResolutions.none { it.matches(issue) }
149+
val unresolvedIssues = reporterIssuesAsOrt.filter { issue ->
150+
resolutionProvider.getResolutionsFor(issue).isEmpty()
142151
}
143152

144153
logger.info(

workers/reporter/src/test/kotlin/ReporterRunnerTest.kt

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -684,38 +684,28 @@ class ReporterRunnerTest : WordSpec({
684684
)
685685
}
686686

687-
"not return resolvedItems when evaluator ran" {
687+
"not return resolvedItems as each worker resolves its own items" {
688688
val runner = createRunner(config = testReportConfig)
689689

690690
val reporter = reporterFactoryMock(TEST_REPORT_FORMAT)
691691
mockReporterFactoryAll(TEST_REPORT_FORMAT to reporter)
692692

693-
val result = runner.run(
693+
val resultWithEvaluator = runner.run(
694694
ortResult = OrtTestData.result,
695695
config = ReporterJobConfiguration(formats = listOf(TEST_REPORT_FORMAT)),
696696
evaluatorConfig = EvaluatorJobConfiguration(),
697697
mockContext()
698698
)
699699

700-
result.resolvedItems should beNull()
701-
}
702-
703-
"return resolvedItems when evaluator did not run" {
704-
val runner = createRunner(config = testReportConfig)
705-
706-
val reporter = reporterFactoryMock(TEST_REPORT_FORMAT)
707-
mockReporterFactoryAll(TEST_REPORT_FORMAT to reporter)
708-
709-
val result = runner.run(
700+
val resultWithoutEvaluator = runner.run(
710701
ortResult = OrtTestData.result,
711702
config = ReporterJobConfiguration(formats = listOf(TEST_REPORT_FORMAT)),
712703
evaluatorConfig = null,
713704
mockContext()
714705
)
715706

716-
result.resolvedItems shouldNot beNull()
717-
// resolvedItems should have been computed when evaluator didn't run
718-
result.resolvedItems!!.issues.isEmpty() shouldBe false
707+
resultWithEvaluator.resolvedItems should beNull()
708+
resultWithoutEvaluator.resolvedItems should beNull()
719709
}
720710

721711
"download asset files" {

workers/reporter/src/test/kotlin/ReporterWorkerTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ class ReporterWorkerTest : StringSpec({
162162
every { startReporterJob(REPORTER_JOB_ID) } returns reporterJob
163163
every { storeIssues(any(), any()) } just runs
164164
every { storeReporterRun(any()) } just runs
165+
every { storeResolvedItems(any(), any()) } just runs
165166
}
166167

167168
val context = mockk<WorkerContext> {
@@ -279,6 +280,7 @@ class ReporterWorkerTest : StringSpec({
279280
every { startReporterJob(REPORTER_JOB_ID) } returns reporterJob
280281
every { storeReporterRun(any()) } just runs
281282
every { storeIssues(any(), any()) } just runs
283+
every { storeResolvedItems(any(), any()) } just runs
282284
every { generateOrtResult(ortRun, failIfRepoInfoMissing = false) } returns OrtTestData.result
283285
}
284286

@@ -373,6 +375,7 @@ class ReporterWorkerTest : StringSpec({
373375
every { startReporterJob(REPORTER_JOB_ID) } returns reporterJob
374376
every { storeReporterRun(any()) } just runs
375377
every { storeIssues(any(), any()) } just runs
378+
every { storeResolvedItems(any(), any()) } just runs
376379
every { generateOrtResult(ortRun, failIfRepoInfoMissing = false) } returns OrtTestData.result
377380
}
378381

0 commit comments

Comments
 (0)