Skip to content

Commit 830066f

Browse files
Attestation and SBOMs (#1672)
- Try out container image attestation. - Generating and attest SBOMs.
1 parent bf0112c commit 830066f

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

.github/workflows/build.yml

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ jobs:
4141
outputs:
4242
container-tag: ${{ steps.publish-container.outputs.container-tag }}
4343

44+
permissions:
45+
attestations: write
46+
contents: read
47+
id-token: write
48+
4449
strategy:
4550
fail-fast: false
4651
matrix:
@@ -107,17 +112,49 @@ jobs:
107112

108113
- name: Publish container
109114
id: publish-container
110-
if: ${{ runner.os == 'Linux' }}
115+
if: runner.os == 'Linux'
111116
shell: pwsh
112117
env:
113118
ContainerRegistry: ${{ env.PUBLISH_CONTAINER == 'true' && env.CONTAINER_REGISTRY || '' }}
114119
run: |
115120
dotnet publish ./src/API --arch x64 --os linux -p:PublishProfile=DefaultContainer
116121
if (-Not [string]::IsNullOrWhiteSpace(${env:CONTAINER_REGISTRY})) {
117-
$containerTag = "${env:CONTAINER_REGISTRY}/${env:GITHUB_REPOSITORY}:github-${env:GITHUB_RUN_NUMBER}".ToLowerInvariant()
122+
$containerImage = "${env:CONTAINER_REGISTRY}/${env:GITHUB_REPOSITORY}".ToLowerInvariant()
123+
$containerTag = "${containerImage}:github-${env:GITHUB_RUN_NUMBER}".ToLowerInvariant()
124+
"container-image=${containerImage}" >> "${env:GITHUB_OUTPUT}"
118125
"container-tag=${containerTag}" >> "${env:GITHUB_OUTPUT}"
119126
}
120127
128+
- name: Generate SBOM for binaries
129+
uses: anchore/sbom-action@v0
130+
with:
131+
path: ./artifacts/publish
132+
output-file: ./artifacts/sbom-publish.json
133+
134+
- name: Generate SBOM for container
135+
uses: anchore/sbom-action@v0
136+
if: env.PUBLISH_CONTAINER == 'true' && steps.publish-container.outputs.container-digest != ''
137+
with:
138+
image: ${{ steps.publish-container.outputs.container-tag }}
139+
output-file: ./artifacts/sbom-container.json
140+
141+
- name: Attest container image
142+
uses: actions/attest-build-provenance@v1
143+
if: env.PUBLISH_CONTAINER == 'true' && steps.publish-container.outputs.container-digest != ''
144+
with:
145+
push-to-registry: true
146+
subject-digest: ${{ steps.publish-container.outputs.container-digest }}
147+
subject-name: ${{ steps.publish-container.outputs.container-image }}
148+
149+
- name: Attest SBOM for container
150+
uses: actions/attest-sbom@v1
151+
if: env.PUBLISH_CONTAINER == 'true' && steps.publish-container.outputs.container-digest != ''
152+
with:
153+
push-to-registry: true
154+
sbom-path: ./artifacts/sbom-container.json
155+
subject-digest: ${{ steps.publish-container.outputs.container-digest }}
156+
subject-name: ${{ steps.publish-container.outputs.container-image }}
157+
121158
deploy:
122159
if: github.event.repository.fork == false && github.ref_name == github.event.repository.default_branch
123160
name: deploy-production

.github/workflows/lint.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,5 @@ jobs:
3636
- name: Lint workflows
3737
uses: docker://rhysd/actionlint@sha256:daa1edae4a6366f320b68abb60b74fb59a458c17b61938d3c62709d92b231558 # v1.6.27
3838
with:
39-
args: -color
39+
# Remove -ignore once v1.6.28 released - see https://github.com/rhysd/actionlint/pull/418#issuecomment-2089713941
40+
args: -color -ignore "attestations"

src/API/API.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,7 @@
5252
<Content Include="wwwroot/**" CopyToPublishDirectory="PreserveNewest" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);@(Content)" />
5353
</ItemGroup>
5454
</Target>
55+
<Target Name="OutputContainerDigest" AfterTargets="PublishContainer" Condition=" '$(GITHUB_OUTPUT)' != '' ">
56+
<WriteLinesToFile File="$(GITHUB_OUTPUT)" Lines="container-digest=$(GeneratedContainerDigest)" />
57+
</Target>
5558
</Project>

0 commit comments

Comments
 (0)