1+ name : " Release"
2+
3+ permissions :
4+ contents : read
5+ packages : write
6+
7+ on :
8+ push :
9+ tags :
10+ - ' v*.*.*' # Triggers on version tags like v1.0.0, v2.1.3, etc.
11+
12+ jobs :
13+ build :
14+ name : " Builds (.NET ${{ matrix.dotnet-version }})"
15+
16+ runs-on : ubuntu-latest
17+
18+ strategy :
19+ matrix :
20+ include :
21+ - dotnet-version : ' 6.0.x'
22+ framework-moniker : ' net6.0'
23+ - dotnet-version : ' 7.0.x'
24+ framework-moniker : ' net7.0'
25+ - dotnet-version : ' 8.0.x'
26+ framework-moniker : ' net8.0'
27+
28+ steps :
29+ - uses : actions/checkout@v4
30+
31+ - name : " Extract version from tag"
32+ id : extract_version
33+ run : |
34+ # Remove 'v' prefix from tag and extract version
35+ VERSION=${GITHUB_REF#refs/tags/v}
36+ echo "version=$VERSION" >> $GITHUB_OUTPUT
37+ echo "Extracted version: $VERSION"
38+
39+ - name : " Setup .NET ${{ matrix.dotnet-version }}"
40+ uses : actions/setup-dotnet@v4
41+ with :
42+ dotnet-version : ${{ matrix.dotnet-version }}
43+
44+ - name : " Restore"
45+ run : dotnet restore
46+
47+ - name : " Build"
48+ run : dotnet build -c Release --no-restore --framework ${{ matrix.framework-moniker }}
49+
50+ - name : " Test"
51+ run : dotnet test -c Release --no-restore --no-build --framework ${{ matrix.framework-moniker }} --verbosity normal /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude="[*.XUnit]*"
52+
53+ - name : Upload coverage reports to Codecov
54+ uses : codecov/codecov-action@v4
55+ with :
56+ token : ${{ secrets.CODECOV_TOKEN }}
57+
58+ publish :
59+ name : " Publish Packages"
60+ needs : build
61+ if : github.ref == 'refs/heads/main'
62+ runs-on : ubuntu-latest
63+
64+ steps :
65+ - uses : actions/checkout@v4
66+
67+ - name : " Setup .NET .NET 8.0"
68+ uses : actions/setup-dotnet@v4
69+ with :
70+ dotnet-version : 8.0.x
71+
72+ - name : " Pack"
73+ run : dotnet pack -c Release --verbosity normal --include-symbols --include-source --version-suffix $GITHUB_RUN_ID --output ./nuget
74+
75+ - name : " Push Packages to GitHub Nuget"
76+ run : dotnet nuget push ./nuget/*.nupkg --source https://nuget.pkg.github.com/deveel --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate
77+
78+ - name : Publish to NuGet
79+ run : dotnet nuget push ./nuget/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }} --skip-duplicate
80+
81+ clean :
82+ name : " Cleaning Old Packages"
83+ needs : publish
84+ uses : ./.github/workflows/publish-packages.yml
85+
86+ create-release :
87+ name : " Create GitHub Release"
88+ needs : publish
89+ runs-on : ubuntu-latest
90+
91+ steps :
92+ - uses : actions/checkout@v4
93+
94+ - name : " Extract version from tag"
95+ id : extract_version
96+ run : |
97+ VERSION=${GITHUB_REF#refs/tags/v}
98+ echo "version=$VERSION" >> $GITHUB_OUTPUT
99+
100+ - name : " Create Release"
101+ uses : actions/create-release@v1
102+ env :
103+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
104+ with :
105+ tag_name : ${{ github.ref_name }}
106+ release_name : Release ${{ steps.extract_version.outputs.version }}
107+ draft : false
108+ prerelease : false
0 commit comments