1- name : .NET Build and Test
2-
3- permissions :
4- contents : read
5- checks : write
6- pull-requests : write
1+ name : Build and Test
72
83on :
94 push :
10- branches : [ main, develop ]
11- tags : [ 'v*' ] # Trigger on version tags
5+ branches : [ main ]
6+ tags : [ 'v*' ]
127 pull_request :
13- branches : [ main, develop ]
8+ branches : [ main ]
149
1510env :
16- DOTNET_VERSION : ' 9.0.x'
17- DOTNET_SKIP_FIRST_TIME_EXPERIENCE : true
18- DOTNET_NOLOGO : true
19- DOTNET_CLI_TELEMETRY_OPTOUT : true
20- CI : true
11+ DOTNET_VERSION : ' 9.x'
12+ DOTNET_SKIP_FIRST_TIME_EXPERIENCE : ' true'
13+ DOTNET_CLI_TELEMETRY_OPTOUT : ' true'
2114
2215jobs :
23- # Check if we should skip build for markdown-only changes
2416 check-changes :
2517 runs-on : ubuntu-latest
2618 outputs :
27- should-skip : ${{ steps.skip-check.outputs.should-skip }}
28- paths-result : ${{ steps.skip-check.outputs.paths-result }}
19+ should-skip : ${{ steps.skip-check.outputs.should_skip }}
2920 steps :
30- - name : Checkout code
31- uses : actions/checkout@v4
32- with :
33- fetch-depth : 0
34-
35- - name : Check for non-markdown changes
36- id : skip-check
21+ - id : skip-check
3722 uses : fkirc/skip-duplicate-actions@v5
3823 with :
39- # Skip if only markdown files changed
40- paths_ignore : ' ["**/*.md", "doc/**", "**/README*", "**/CHANGELOG*", "**/LICENSE*"]' # Don't skip on main branch or tags
41- skip_after_successful_duplicate : ' false'
42-
43- # Simple job for markdown-only changes
44- markdown-check :
45- runs-on : ubuntu-latest
46- needs : check-changes
47- if : needs.check-changes.outputs.should-skip == 'true'
48- steps :
49- - name : Documentation changes only
50- run : |
51- echo "✅ Only documentation files were changed - skipping build"
52- echo "📝 Changes detected in markdown files only"
24+ concurrent_skipping : ' same_content_newer'
25+ skip_after_successful_duplicate : ' true'
26+ paths_ignore : ' ["**/*.md", "**/docs/**"]'
5327
5428 build :
55- runs-on : ubuntu-latest
29+ runs-on : ${{ matrix.os }}
5630 needs : check-changes
5731 if : needs.check-changes.outputs.should-skip != 'true'
5832
5933 strategy :
6034 matrix :
61- configuration : [Debug, Release]
62-
35+ os : [ubuntu-latest, windows-latest, macos-latest]
36+ configuration : [Release]
37+
6338 steps :
6439 - name : Checkout code
6540 uses : actions/checkout@v4
66- with :
67- fetch-depth : 0 # Shallow clones should be disabled for better analysis
6841
6942 - name : Setup .NET
7043 uses : actions/setup-dotnet@v4
7144 with :
7245 dotnet-version : ${{ env.DOTNET_VERSION }}
7346
74- - name : Display .NET info
75- run : dotnet --info
76-
7747 - name : Cache NuGet packages
7848 uses : actions/cache@v4
7949 with :
@@ -120,43 +90,17 @@ jobs:
12090 if : matrix.configuration == 'Release'
12191 uses : actions/upload-artifact@v4
12292 with :
123- name : build-artifacts-${{ matrix.configuration }}
93+ name : build-artifacts-${{ matrix.os }}
12494 path : |
125- src/NLWebNet /bin/Release/
95+ src/* /bin/Release/
12696 demo/bin/Release/
12797 retention-days : 7
12898
129- code-quality :
130- runs-on : ubuntu-latest
131- needs : [check-changes, build]
132- if : needs.check-changes.outputs.should-skip != 'true'
133-
134- steps :
135- - name : Checkout code
136- uses : actions/checkout@v4
137- with :
138- fetch-depth : 0
139-
140- - name : Setup .NET
141- uses : actions/setup-dotnet@v4
142- with :
143- dotnet-version : ${{ env.DOTNET_VERSION }}
144-
145- - name : Restore dependencies
146- run : dotnet restore
147-
148- - name : Run code analysis
149- run : |
150- dotnet build --configuration Release --verbosity minimal --warnaserror
151-
152- - name : Check formatting
153- run : dotnet format --verify-no-changes --verbosity diagnostic
154-
15599 security-scan :
156100 runs-on : ubuntu-latest
157- needs : [ check-changes, build]
101+ needs : check-changes
158102 if : needs.check-changes.outputs.should-skip != 'true'
159-
103+
160104 steps :
161105 - name : Checkout code
162106 uses : actions/checkout@v4
@@ -178,6 +122,7 @@ jobs:
178122 else
179123 echo "✅ No vulnerable packages found."
180124 fi
125+
181126 package-validation :
182127 runs-on : ubuntu-latest
183128 needs : [check-changes, build]
@@ -192,6 +137,9 @@ jobs:
192137 with :
193138 dotnet-version : ${{ env.DOTNET_VERSION }}
194139
140+ - name : Fetch all tags for versioning
141+ run : git fetch --tags --force
142+
195143 - name : Restore dependencies
196144 run : dotnet restore
197145
@@ -202,7 +150,9 @@ jobs:
202150 if [[ $GITHUB_REF == refs/tags/v* ]]; then
203151 # Extract version from tag (remove 'v' prefix)
204152 VERSION=${GITHUB_REF#refs/tags/v}
205- echo "📦 Using tag version: ${VERSION}" else
153+ echo "📦 Using tag version: ${VERSION}"
154+ IS_RELEASE_TAG="true"
155+ else
206156 # Get the latest git tag or use 0.1.0 as default
207157 LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
208158
@@ -214,9 +164,25 @@ jobs:
214164 SHORT_SHA=$(git rev-parse --short HEAD)
215165 VERSION="${VERSION}-alpha.${COMMITS_SINCE_TAG}+${SHORT_SHA}"
216166 echo "📦 Using development version: ${VERSION}"
167+ IS_RELEASE_TAG="false"
168+ fi
169+
170+ echo "version=${VERSION}" >> $GITHUB_OUTPUT
171+ echo "is_release_tag=${IS_RELEASE_TAG}" >> $GITHUB_OUTPUT
172+
173+ - name : Check version output
174+ run : |
175+ if [ -z "${{ steps.version.outputs.version }}" ]; then
176+ echo "❌ PackageVersion is not set!"
177+ echo "Debug info:"
178+ echo "GITHUB_REF: $GITHUB_REF"
179+ echo "Available tags:"
180+ git tag -l
181+ exit 1
182+ else
183+ echo "✅ PackageVersion: ${{ steps.version.outputs.version }}"
184+ echo "✅ Is release tag: ${{ steps.version.outputs.is_release_tag }}"
217185 fi
218- echo "version=${VERSION}" >> $GITHUB_OUTPUT
219- echo "is_release_tag=$([[ $GITHUB_REF == refs/tags/v* ]] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT
220186
221187 - name : Build (Release) for packaging
222188 run : dotnet build src/NLWebNet --configuration Release --no-restore --verbosity minimal
0 commit comments