|
1 | 1 | package io.quarkus.cyclonedx.deployment; |
2 | 2 |
|
3 | | -import java.util.List; |
4 | | - |
5 | 3 | import io.quarkus.cyclonedx.generator.CycloneDxSbomGenerator; |
6 | 4 | import io.quarkus.deployment.annotations.BuildProducer; |
7 | 5 | import io.quarkus.deployment.annotations.BuildStep; |
8 | 6 | import io.quarkus.deployment.builditem.AppModelProviderBuildItem; |
9 | | -import io.quarkus.deployment.pkg.builditem.ArtifactResultBuildItem; |
10 | 7 | import io.quarkus.deployment.pkg.builditem.OutputTargetBuildItem; |
| 8 | +import io.quarkus.deployment.sbom.ApplicationManifestsBuildItem; |
11 | 9 | import io.quarkus.deployment.sbom.SbomBuildItem; |
12 | | -import io.quarkus.sbom.ApplicationManifest; |
13 | 10 |
|
14 | 11 | /** |
15 | 12 | * Generates SBOMs for packaged applications if the corresponding config is enabled. |
16 | 13 | * The API around this is still in development and will likely change in the near future. |
17 | 14 | */ |
18 | 15 | public class CdxSbomBuildStep { |
19 | 16 |
|
| 17 | + /** |
| 18 | + * Generates CycloneDX SBOMs from application manifests. |
| 19 | + * |
| 20 | + * @param applicationManifestsBuildItem application manifests |
| 21 | + * @param outputTargetBuildItem build output |
| 22 | + * @param appModelProviderBuildItem application model provider |
| 23 | + * @param cdxSbomConfig CycloneDX SBOM generation configuration |
| 24 | + * @param sbomProducer SBOM build item producer |
| 25 | + */ |
20 | 26 | @BuildStep |
21 | | - public void generate(List<ArtifactResultBuildItem> artifactResultBuildItems, |
| 27 | + public void generate(ApplicationManifestsBuildItem applicationManifestsBuildItem, |
22 | 28 | OutputTargetBuildItem outputTargetBuildItem, |
23 | 29 | AppModelProviderBuildItem appModelProviderBuildItem, |
24 | 30 | CycloneDxConfig cdxSbomConfig, |
25 | 31 | BuildProducer<SbomBuildItem> sbomProducer) { |
26 | | - if (cdxSbomConfig.skip()) { |
| 32 | + if (cdxSbomConfig.skip() || applicationManifestsBuildItem.getManifests().isEmpty()) { |
27 | 33 | // until there is a proper way to request the desired build items as build outcome |
28 | 34 | return; |
29 | 35 | } |
30 | 36 | var depInfoProvider = appModelProviderBuildItem.getDependencyInfoProvider().get(); |
31 | | - for (var artifactResult : artifactResultBuildItems) { |
32 | | - var manifestConfig = artifactResult.getManifestConfig(); |
33 | | - if (manifestConfig != null) { |
34 | | - var manifest = ApplicationManifest.fromConfig(manifestConfig); |
35 | | - for (var sbom : CycloneDxSbomGenerator.newInstance() |
36 | | - .setManifest(manifest) |
37 | | - .setOutputDirectory(outputTargetBuildItem.getOutputDirectory()) |
38 | | - .setEffectiveModelResolver(depInfoProvider == null ? null : depInfoProvider.getMavenModelResolver()) |
39 | | - .setFormat(cdxSbomConfig.format()) |
40 | | - .setSchemaVersion(cdxSbomConfig.schemaVersion().orElse(null)) |
41 | | - .setIncludeLicenseText(cdxSbomConfig.includeLicenseText()) |
42 | | - .generate()) { |
43 | | - sbomProducer.produce(new SbomBuildItem(sbom)); |
44 | | - } |
| 37 | + for (var manifest : applicationManifestsBuildItem.getManifests()) { |
| 38 | + for (var sbom : CycloneDxSbomGenerator.newInstance() |
| 39 | + .setManifest(manifest) |
| 40 | + .setOutputDirectory(outputTargetBuildItem.getOutputDirectory()) |
| 41 | + .setEffectiveModelResolver(depInfoProvider == null ? null : depInfoProvider.getMavenModelResolver()) |
| 42 | + .setFormat(cdxSbomConfig.format()) |
| 43 | + .setSchemaVersion(cdxSbomConfig.schemaVersion().orElse(null)) |
| 44 | + .setIncludeLicenseText(cdxSbomConfig.includeLicenseText()) |
| 45 | + .generate()) { |
| 46 | + sbomProducer.produce(new SbomBuildItem(sbom)); |
45 | 47 | } |
46 | 48 | } |
47 | 49 | } |
|
0 commit comments