Skip to content

Commit b08e2a0

Browse files
committed
feat: implement sbom-generator action for streamlined SBOM generation and attestation
Signed-off-by: André Silva <[email protected]>
1 parent 1054263 commit b08e2a0

File tree

2 files changed

+52
-48
lines changed

2 files changed

+52
-48
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: "Generate and Attest SBOM"
2+
description: "Generate SBOM for a .NET project, upload it to a release, and create an attestation"
3+
4+
inputs:
5+
github-token:
6+
description: "GitHub token for uploading the SBOM to the release"
7+
required: true
8+
project-name:
9+
description: "Name of the project for SBOM generation"
10+
required: true
11+
release-tag:
12+
description: "Tag name for the release"
13+
required: true
14+
15+
runs:
16+
using: "composite"
17+
steps:
18+
- name: Generate SBOM
19+
shell: bash
20+
run: |
21+
# Create artifacts/sboms directory if it doesn't exist
22+
mkdir -p ./artifacts/sboms/
23+
# Generate SBOM using CycloneDX
24+
dotnet CycloneDX --json --exclude-dev -sv "${{ inputs.release-tag }}" ./src/${{ inputs.project-name }}/${{ inputs.project-name }}.csproj --output ./artifacts/sboms/ -fn ${{ inputs.project-name }}.bom.json
25+
26+
- name: Upload SBOM to release
27+
shell: bash
28+
env:
29+
GITHUB_TOKEN: ${{ inputs.github-token }}
30+
run: |
31+
gh release upload ${{ inputs.release-tag }} ./artifacts/sboms/${{ inputs.project-name }}.bom.json
32+
33+
- name: Attest package
34+
uses: actions/attest-sbom@115c3be05ff3974bcbd596578934b3f9ce39bf68 # v2.2.0
35+
with:
36+
subject-path: src/**/${{ inputs.project-name }}.*.nupkg
37+
sbom-path: ./artifacts/sboms/${{ inputs.project-name }}.bom.json

.github/workflows/release.yml

Lines changed: 15 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -71,58 +71,25 @@ jobs:
7171
subject-path: "src/**/*.nupkg"
7272

7373
# Process OpenFeature project
74-
- name: Process SBOM for OpenFeature
75-
env:
76-
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
77-
PROJECT_NAME: OpenFeature
78-
PROJECT_PATH: ./src/OpenFeature/OpenFeature.csproj
79-
RELEASE_TAG: ${{ needs.release-please.outputs.release_tag_name }}
80-
run: |
81-
# Generate SBOM
82-
dotnet CycloneDX --json --exclude-dev -sv "$RELEASE_TAG" $PROJECT_PATH --output ./artifacts/sboms/ -fn $PROJECT_NAME.bom.json
83-
# Upload SBOM to release
84-
gh release upload $RELEASE_TAG ./artifacts/sboms/$PROJECT_NAME.bom.json
85-
86-
- name: Attest OpenFeature package
87-
uses: actions/attest-sbom@115c3be05ff3974bcbd596578934b3f9ce39bf68 # v2.2.0
74+
- name: Generate and Attest SBOM for OpenFeature
75+
uses: ./.github/actions/sbom-generator
8876
with:
89-
subject-path: "src/**/OpenFeature.*.nupkg"
90-
sbom-path: ./artifacts/sboms/OpenFeature.bom.json
77+
github-token: ${{secrets.GITHUB_TOKEN}}
78+
project-name: OpenFeature
79+
release-tag: ${{ needs.release-please.outputs.release_tag_name }}
9180

9281
# Process OpenFeature.Hosting project
93-
- name: Process SBOM for OpenFeature.Hosting
94-
env:
95-
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
96-
PROJECT_NAME: OpenFeature.Hosting
97-
PROJECT_PATH: ./src/OpenFeature.Hosting/OpenFeature.Hosting.csproj
98-
RELEASE_TAG: ${{ needs.release-please.outputs.release_tag_name }}
99-
run: |
100-
# Generate SBOM
101-
dotnet CycloneDX --json --exclude-dev -sv "$RELEASE_TAG" $PROJECT_PATH --output ./artifacts/sboms/ -fn $PROJECT_NAME.bom.json
102-
# Upload SBOM to release
103-
gh release upload $RELEASE_TAG ./artifacts/sboms/$PROJECT_NAME.bom.json
104-
105-
- name: Attest OpenFeature.Hosting package
106-
uses: actions/attest-sbom@115c3be05ff3974bcbd596578934b3f9ce39bf68 # v2.2.0
82+
- name: Generate and Attest SBOM for OpenFeature.Hosting
83+
uses: ./.github/actions/sbom-generator
10784
with:
108-
subject-path: "src/**/OpenFeature.Hosting.*.nupkg"
109-
sbom-path: ./artifacts/sboms/OpenFeature.Hosting.bom.json
85+
github-token: ${{secrets.GITHUB_TOKEN}}
86+
project-name: OpenFeature.Hosting
87+
release-tag: ${{ needs.release-please.outputs.release_tag_name }}
11088

11189
# Process OpenFeature.DependencyInjection project
112-
- name: Process SBOM for OpenFeature.DependencyInjection
113-
env:
114-
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
115-
PROJECT_NAME: OpenFeature.DependencyInjection
116-
PROJECT_PATH: ./src/OpenFeature.DependencyInjection/OpenFeature.DependencyInjection.csproj
117-
RELEASE_TAG: ${{ needs.release-please.outputs.release_tag_name }}
118-
run: |
119-
# Generate SBOM
120-
dotnet CycloneDX --json --exclude-dev -sv "$RELEASE_TAG" $PROJECT_PATH --output ./artifacts/sboms/ -fn $PROJECT_NAME.bom.json
121-
# Upload SBOM to release
122-
gh release upload $RELEASE_TAG ./artifacts/sboms/$PROJECT_NAME.bom.json
123-
124-
- name: Attest OpenFeature.DependencyInjection package
125-
uses: actions/attest-sbom@115c3be05ff3974bcbd596578934b3f9ce39bf68 # v2.2.0
90+
- name: Generate and Attest SBOM for OpenFeature.DependencyInjection
91+
uses: ./.github/actions/sbom-generator
12692
with:
127-
subject-path: "src/**/OpenFeature.DependencyInjection.*.nupkg"
128-
sbom-path: ./artifacts/sboms/OpenFeature.DependencyInjection.bom.json
93+
github-token: ${{secrets.GITHUB_TOKEN}}
94+
project-name: OpenFeature.DependencyInjection
95+
release-tag: ${{ needs.release-please.outputs.release_tag_name }}

0 commit comments

Comments
 (0)