@@ -34,6 +34,10 @@ parameters:
3434 displayName : Upload API docs
3535 type : boolean
3636 default : false
37+ - name : uploadDependencyTrack
38+ displayName : Upload BOMs to Dependency Track
39+ type : boolean
40+ default : false
3741 - name : forceReleaseTestFilter
3842 displayName : Force to use the release test filters
3943 type : boolean
@@ -103,6 +107,15 @@ stages:
103107 command : build
104108 projects : $(solution)
105109 arguments : " --configuration $(buildConfiguration) --no-restore --property:ContinuousIntegrationBuild=true --property:GeneratePackageOnBuild=true --property:PackageOutputPath=$(Build.ArtifactStagingDirectory)/nupkg"
110+ - powershell : |
111+ dotnet tool install --global CycloneDX
112+ dotnet-CycloneDX $(solution) --output $(Build.ArtifactStagingDirectory)/bom --filename bom-dotnet.xml
113+ displayName: 'Generate Backend BOM'
114+ - powershell : |
115+ npm install --global @cyclonedx/cyclonedx-npm
116+ cyclonedx-npm -o $(Build.ArtifactStagingDirectory)\bom\bom-login.xml --ignore-npm-errors --verbose
117+ displayName: Generate Login UI BOM
118+ workingDirectory: src/Umbraco.Web.UI.Login
106119 - task : PublishPipelineArtifact@1
107120 displayName : Publish nupkg
108121 inputs :
@@ -113,6 +126,11 @@ stages:
113126 inputs :
114127 targetPath : $(Build.SourcesDirectory)
115128 artifactName : build_output
129+ - task : PublishPipelineArtifact@1
130+ displayName : Publish Backend BOM
131+ inputs :
132+ targetPath : $(Build.ArtifactStagingDirectory)/bom
133+ artifactName : bom-backend
116134
117135 - job : B
118136 displayName : Build Bellissima Package
@@ -124,6 +142,11 @@ stages:
124142 lfs : false,
125143 fetchDepth : 500
126144 - template : templates/backoffice-install.yml
145+ - powershell : |
146+ npm install --global @cyclonedx/cyclonedx-npm
147+ cyclonedx-npm -o $(Build.ArtifactStagingDirectory)/bom/bom-backoffice.xml --ignore-npm-errors --verbose
148+ displayName: Generate Backoffice UI BOM
149+ workingDirectory: src/Umbraco.Web.UI.Client
127150 - script : npm run build:for:npm
128151 displayName : Run build:for:npm
129152 workingDirectory : src/Umbraco.Web.UI.Client
@@ -140,6 +163,35 @@ stages:
140163 inputs :
141164 targetPath : $(Build.ArtifactStagingDirectory)/npm
142165 artifactName : npm
166+ - publish : $(Build.ArtifactStagingDirectory)/bom
167+ artifact : bom-frontend
168+ displayName : ' Publish Frontend BOM'
169+
170+ - stage : E2E_BOM
171+ displayName : E2E Tests BOM Generation
172+ dependsOn : []
173+ jobs :
174+ - job :
175+ displayName : E2E Generate BOM
176+ pool :
177+ vmImage : " ubuntu-latest"
178+ steps :
179+ - checkout : self
180+ submodules : false
181+ lfs : false,
182+ fetchDepth : 500
183+ - template : templates/e2e-install.yml
184+ parameters :
185+ nodeVersion : ${{ variables.nodeVersion }}
186+ npm_config_cache : ${{ variables.npm_config_cache }}
187+ - powershell : |
188+ npm install --global @cyclonedx/cyclonedx-npm
189+ cyclonedx-npm -o $(Build.ArtifactStagingDirectory)/bom/bom-e2e.xml --ignore-npm-errors --verbose
190+ displayName: Generate E2E Tests BOM
191+ workingDirectory: tests/Umbraco.Tests.AcceptanceTest
192+ - publish : $(Build.ArtifactStagingDirectory)/bom
193+ artifact : bom-e2e
194+ displayName : ' Publish E2E BOM'
143195
144196 - stage : Build_Docs
145197 condition : and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.buildApiDocs}}))
@@ -668,6 +720,34 @@ stages:
668720 ASPNETCORE_URLS : ${{ variables.ASPNETCORE_URLS }}
669721 DatabaseType : ${{ variables.DatabaseType }}
670722
723+ - stage : Dependency_Track
724+ displayName : Dependency Track
725+ dependsOn :
726+ - Build
727+ - E2E_BOM
728+ condition : and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.uploadDependencyTrack}}))
729+ variables :
730+ # Determine Umbraco version based on whether it's a public release or not. If public release, use major version, else use full NuGet package version.
731+ umbracoVersion : $[ iif(eq(stageDependencies.Build.A.outputs['build.NBGV_PublicRelease'], 'True'), stageDependencies.Build.A.outputs['build.NBGV_VersionMajor'], stageDependencies.Build.A.outputs['build.NBGV_NuGetPackageVersion']) ]
732+ jobs :
733+ - template : templates/dependency-track.yml
734+ parameters :
735+ projectName : " Umbraco-CMS"
736+ umbracoVersion : $(umbracoVersion)
737+ projects :
738+ - name : " Backend"
739+ artifact : " bom-backend"
740+ bomFilePath : " bom-dotnet.xml"
741+ - name : " Login"
742+ artifact : " bom-backend"
743+ bomFilePath : " bom-login.xml"
744+ - name : " Backoffice"
745+ artifact : " bom-frontend"
746+ bomFilePath : " bom-backoffice.xml"
747+ - name : " E2E"
748+ artifact : " bom-e2e"
749+ bomFilePath : " bom-e2e.xml"
750+
671751 # ##############################################
672752 # # Release
673753 # ##############################################
@@ -874,3 +954,4 @@ stages:
874954 ContainerName : " $web"
875955 BlobPrefix : v$(umbracoMajorVersion)/ui-api
876956 CleanTargetBeforeCopy : true
957+
0 commit comments