1+ name : Build and Upload SBOMs to Dependency-Track
2+
3+ on :
4+ workflow_dispatch :
5+ push :
6+ branches :
7+ - ' *'
8+
9+ jobs :
10+ sbom :
11+ runs-on : ubuntu-latest
12+ steps :
13+ - name : Checkout code
14+ uses : actions/checkout@v4
15+
16+ # .NET SBOM
17+ - name : Setup .NET
18+ uses : actions/setup-dotnet@v3
19+ with :
20+ dotnet-version : ' 9.0.x'
21+
22+ - name : Restore .NET dependencies
23+ run : dotnet restore
24+
25+ - name : Install CycloneDX for .NET
26+ run : dotnet tool install --global CycloneDX
27+
28+ - name : Generate SBOM for .NET
29+ run : |
30+ mkdir -p ./sbom
31+ SOLUTION_FILE=$(find . -name "*.sln" | head -n 1)
32+ if [ -z "$SOLUTION_FILE" ]; then
33+ PROJECT_FILE=$(find . -name "*.csproj" -o -name "*.fsproj" -o -name "*.vbproj" | head -n 1)
34+ if [ -z "$PROJECT_FILE" ]; then
35+ echo "No solution or project files found!"
36+ exit 1
37+ else
38+ TARGET_FILE="$PROJECT_FILE"
39+ fi
40+ else
41+ TARGET_FILE="$SOLUTION_FILE"
42+ fi
43+ dotnet-CycloneDX "$TARGET_FILE" --output ./sbom --filename bom-dotnet.xml --output-format Xml --enable-github-licenses --github-bearer-token ${{ secrets.GITHUB_TOKEN }}
44+
45+ # Extract major version from Umbraco.Commerce dependency
46+ - name : Extract Umbraco.Commerce major version
47+ id : extract-version
48+ run : |
49+ PROJECT_FILE="src/Umbraco.Commerce.DemoStore.Web/Umbraco.Commerce.DemoStore.Web.csproj"
50+ COMMERCE_VERSION=$(grep -oP 'PackageReference Include="Umbraco.Commerce" Version="\K[^"]+' "$PROJECT_FILE")
51+ MAJOR_VERSION=$(echo "$COMMERCE_VERSION" | grep -oP '^\d+')
52+ echo "commerce_version=$COMMERCE_VERSION"
53+ echo "major_version=$MAJOR_VERSION"
54+ echo "major_version=$MAJOR_VERSION" >> $GITHUB_OUTPUT
55+
56+ # Upload .NET SBOM
57+ - name : Upload .NET SBOM to Dependency-Track
58+ env :
59+ DTRACK_URL : ${{ secrets.DTRACK_URL }}
60+ DTRACK_API_KEY : ${{ secrets.DTRACK_API_KEY }}
61+ run : |
62+ curl --fail-with-body -v -i -w "\nHTTP Status: %{http_code}\n" \
63+ -X POST "$DTRACK_URL" \
64+ -H "X-Api-Key: $DTRACK_API_KEY" \
65+ -H "accept: application/json" \
66+ -H "Content-Type: multipart/form-data" \
67+ -F "autoCreate=true" \
68+ -F "projectName=${{ github.event.repository.name }}" \
69+ -F "projectVersion=${{ steps.extract-version.outputs.major_version }}" \
70+ -F "bom=@./sbom/bom-dotnet.xml"
0 commit comments