Skip to content

Commit b61b3d2

Browse files
authored
Merge pull request #19 from marioarce/feature/nuget-release-prep
feat: implement centralized version management and automated NuGet release
2 parents 9c396b4 + e3eda73 commit b61b3d2

6 files changed

Lines changed: 114 additions & 53 deletions

File tree

.github/workflows/ci-cd.yml

Lines changed: 86 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ on:
55
branches: [ main, develop, 'release/*' ]
66
pull_request:
77
branches: [ main, develop ]
8+
workflow_dispatch:
9+
inputs:
10+
release_type:
11+
description: 'Release type'
12+
required: true
13+
default: 'patch'
14+
type: choice
15+
options:
16+
- patch
17+
- minor
18+
- major
819

920
permissions:
1021
contents: write
@@ -47,7 +58,7 @@ jobs:
4758
name: Pack NuGet Packages
4859
runs-on: ubuntu-latest
4960
needs: build-and-test
50-
if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' && startsWith(github.event.pull_request.head.ref, 'release/')
61+
if: (github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' && startsWith(github.event.pull_request.head.ref, 'release/')) || (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v'))
5162

5263
steps:
5364
- name: Checkout
@@ -74,7 +85,7 @@ jobs:
7485
name: Publish to NuGet
7586
runs-on: ubuntu-latest
7687
needs: pack
77-
if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' && startsWith(github.event.pull_request.head.ref, 'release/')
88+
if: (github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' && startsWith(github.event.pull_request.head.ref, 'release/')) || (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v'))
7889

7990
steps:
8091
- name: Download packages
@@ -187,6 +198,79 @@ jobs:
187198
console.error(`Failed to delete feature branch ${branchName}:`, error.message);
188199
}
189200
201+
update-version:
202+
name: Update Package Version
203+
runs-on: ubuntu-latest
204+
if: github.event_name == 'workflow_dispatch'
205+
206+
steps:
207+
- name: Checkout
208+
uses: actions/[email protected]
209+
with:
210+
token: ${{ secrets.GITHUB_TOKEN }}
211+
212+
- name: Setup .NET
213+
uses: actions/[email protected]
214+
with:
215+
dotnet-version: ${{ env.DOTNET_VERSION }}
216+
217+
- name: Update version
218+
run: |
219+
echo "Updating version for ${{ github.event.inputs.release_type }} release"
220+
221+
# Read current version
222+
CURRENT_VERSION=$(grep '<PowerCSharpVersion>' Directory.Build.props | sed 's/.*<PowerCSharpVersion>\(.*\)<\/PowerCSharpVersion>.*/\1/')
223+
echo "Current version: $CURRENT_VERSION"
224+
225+
# Split version into parts
226+
IFS='.' read -ra VERSION_PARTS <<< "$CURRENT_VERSION"
227+
MAJOR=${VERSION_PARTS[0]}
228+
MINOR=${VERSION_PARTS[1]}
229+
PATCH=${VERSION_PARTS[2]}
230+
231+
# Update version based on release type
232+
case "${{ github.event.inputs.release_type }}" in
233+
"major")
234+
MAJOR=$((MAJOR + 1))
235+
MINOR=0
236+
PATCH=0
237+
;;
238+
"minor")
239+
MINOR=$((MINOR + 1))
240+
PATCH=0
241+
;;
242+
"patch")
243+
PATCH=$((PATCH + 1))
244+
;;
245+
esac
246+
247+
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
248+
echo "New version: $NEW_VERSION"
249+
250+
# Update Directory.Build.props
251+
sed -i "s/<PowerCSharpVersion>.*<\/PowerCSharpVersion>/<PowerCSharpVersion>$NEW_VERSION<\/PowerCSharpVersion>/" Directory.Build.props
252+
253+
# Commit and push changes
254+
git config --local user.email "[email protected]"
255+
git config --local user.name "GitHub Action"
256+
git add Directory.Build.props
257+
git commit -m "chore: bump version to $NEW_VERSION"
258+
git push
259+
260+
- name: Create release tag
261+
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd
262+
with:
263+
script: |
264+
const version = require('fs').readFileSync('Directory.Build.props', 'utf8')
265+
.match(/<PowerCSharpVersion>(.+?)<\/PowerCSharpVersion>/)[1];
266+
267+
await github.rest.git.createRef({
268+
owner: context.repo.owner,
269+
repo: context.repo.repo,
270+
ref: `refs/tags/v${version}`,
271+
sha: context.sha
272+
});
273+
190274
delete-release-branch:
191275
name: Delete Release Branch
192276
runs-on: ubuntu-latest

Directory.Build.props

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<Project>
2+
<PropertyGroup>
3+
<!-- Centralized version management for PowerCSharp packages -->
4+
<PowerCSharpVersion>0.2.0</PowerCSharpVersion>
5+
<PowerCSharpCompatibilityVersion>0.1.0</PowerCSharpCompatibilityVersion>
6+
7+
<!-- Common package metadata -->
8+
<Authors>Mario Arce</Authors>
9+
<Copyright>Copyright © Mario Arce 2026</Copyright>
10+
<PackageLicenseExpression>MIT</PackageLicenseExpression>
11+
<PackageProjectUrl>https://github.com/marioarce/PowerCSharp</PackageProjectUrl>
12+
<RepositoryUrl>https://github.com/marioarce/PowerCSharp</RepositoryUrl>
13+
<RepositoryType>git</RepositoryType>
14+
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
15+
<IncludeSymbols>true</IncludeSymbols>
16+
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
17+
<Nullable>enable</Nullable>
18+
<LangVersion>latest</LangVersion>
19+
</PropertyGroup>
20+
</Project>

src/PowerCSharp.Compatibility/PowerCSharp.Compatibility.csproj

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<PropertyGroup>
44
<TargetFrameworks>net48;net462;net472</TargetFrameworks>
55
<LangVersion>11.0</LangVersion>
6-
<Nullable>enable</Nullable>
6+
<PackageTags>csharp;compatibility;framework;dotnet</PackageTags>
77
<RootNamespace>PowerCSharp.Compatibility</RootNamespace>
88
<AssemblyName>PowerCSharp.Compatibility</AssemblyName>
99
</PropertyGroup>
@@ -27,19 +27,9 @@
2727
<PropertyGroup>
2828
<!-- NuGet Package Metadata -->
2929
<PackageId>PowerCSharp.Compatibility</PackageId>
30-
<PackageVersion>0.1.0</PackageVersion>
30+
<PackageVersion>$(PowerCSharpCompatibilityVersion)</PackageVersion>
3131
<Title>PowerCSharp Compatibility</Title>
3232
<Description>.NET Framework compatibility layer for PowerCSharp with System.Web dependencies</Description>
33-
<Authors>Mario Arce</Authors>
34-
<Copyright>Copyright © Mario Arce 2026</Copyright>
35-
<PackageLicenseExpression>MIT</PackageLicenseExpression>
36-
<PackageProjectUrl>https://github.com/marioarce/PowerCSharp</PackageProjectUrl>
37-
<PackageTags>csharp;compatibility;framework;dotnet</PackageTags>
38-
<RepositoryUrl>https://github.com/marioarce/PowerCSharp</RepositoryUrl>
39-
<RepositoryType>git</RepositoryType>
40-
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
41-
<IncludeSymbols>true</IncludeSymbols>
42-
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
4333
</PropertyGroup>
4434

4535
</Project>

src/PowerCSharp.Core/PowerCSharp.Core.csproj

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,13 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>net8.0;netstandard2.0</TargetFrameworks>
5-
<Nullable>enable</Nullable>
6-
<LangVersion>latest</LangVersion>
5+
<PackageTags>csharp;extensions;utilities;core;dotnet</PackageTags>
76

87
<!-- NuGet Package Metadata -->
98
<PackageId>PowerCSharp.Core</PackageId>
10-
<PackageVersion>0.2.0</PackageVersion>
9+
<PackageVersion>$(PowerCSharpVersion)</PackageVersion>
1110
<Title>PowerCSharp Core</Title>
1211
<Description>Core functionality and base classes for PowerCSharp extension methods library</Description>
13-
<Authors>Mario Arce</Authors>
14-
<Copyright>Copyright © Mario Arce 2026</Copyright>
15-
<PackageLicenseExpression>MIT</PackageLicenseExpression>
16-
<PackageProjectUrl>https://github.com/marioarce/PowerCSharp</PackageProjectUrl>
17-
<PackageTags>csharp;extensions;utilities;core;dotnet</PackageTags>
18-
<RepositoryUrl>https://github.com/marioarce/PowerCSharp</RepositoryUrl>
19-
<RepositoryType>git</RepositoryType>
20-
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
21-
<IncludeSymbols>true</IncludeSymbols>
22-
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
2312
</PropertyGroup>
2413

2514
</Project>

src/PowerCSharp.Extensions.AspNetCore/PowerCSharp.Extensions.AspNetCore.csproj

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,13 @@
1212

1313
<PropertyGroup>
1414
<TargetFramework>net8.0</TargetFramework>
15-
<Nullable>enable</Nullable>
16-
<LangVersion>latest</LangVersion>
15+
<PackageTags>csharp;extensions;aspnetcore;dotnet</PackageTags>
1716

1817
<!-- NuGet Package Metadata -->
1918
<PackageId>PowerCSharp.Extensions.AspNetCore</PackageId>
20-
<PackageVersion>0.2.0</PackageVersion>
19+
<PackageVersion>$(PowerCSharpVersion)</PackageVersion>
2120
<Title>PowerCSharp Extensions for ASP.NET Core</Title>
2221
<Description>ASP.NET Core specific extension methods for PowerCSharp library</Description>
23-
<Authors>Mario Arce</Authors>
24-
<Copyright>Copyright © Mario Arce 2026</Copyright>
25-
<PackageLicenseExpression>MIT</PackageLicenseExpression>
26-
<PackageProjectUrl>https://github.com/marioarce/PowerCSharp</PackageProjectUrl>
27-
<PackageTags>csharp;extensions;aspnetcore;dotnet</PackageTags>
28-
<RepositoryUrl>https://github.com/marioarce/PowerCSharp</RepositoryUrl>
29-
<RepositoryType>git</RepositoryType>
30-
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
31-
<IncludeSymbols>true</IncludeSymbols>
32-
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
3322
</PropertyGroup>
3423

3524
</Project>

src/PowerCSharp.Extensions/PowerCSharp.Extensions.csproj

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,13 @@
1616

1717
<PropertyGroup>
1818
<TargetFrameworks>net8.0;netstandard2.0</TargetFrameworks>
19-
<Nullable>enable</Nullable>
20-
<LangVersion>latest</LangVersion>
19+
<PackageTags>csharp;extensions;dotnet;productivity</PackageTags>
2120

2221
<!-- NuGet Package Metadata -->
2322
<PackageId>PowerCSharp.Extensions</PackageId>
24-
<PackageVersion>0.2.0</PackageVersion>
23+
<PackageVersion>$(PowerCSharpVersion)</PackageVersion>
2524
<Title>PowerCSharp Extensions</Title>
2625
<Description>Extension methods for common .NET types to enhance productivity</Description>
27-
<Authors>Mario Arce</Authors>
28-
<Copyright>Copyright © Mario Arce 2026</Copyright>
29-
<PackageLicenseExpression>MIT</PackageLicenseExpression>
30-
<PackageProjectUrl>https://github.com/marioarce/PowerCSharp</PackageProjectUrl>
31-
<PackageTags>csharp;extensions;dotnet;productivity</PackageTags>
32-
<RepositoryUrl>https://github.com/marioarce/PowerCSharp</RepositoryUrl>
33-
<RepositoryType>git</RepositoryType>
34-
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
35-
<IncludeSymbols>true</IncludeSymbols>
36-
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
3726
</PropertyGroup>
3827

3928
</Project>

0 commit comments

Comments
 (0)