Watch2–part 4–CI and CD
Now I want to do build and auto-deployment as a Nuget Package( at https://www.nuget.org/packages/watch2 )
The most simple build action on GitHub Actions is simple example of how to do it.
name: .NET on: push: branches: [ main ] pull_request: branches: [ main ] workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup .NET 8 uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x - name: build run: | cd src cd Watch2 dotnet restore dotnet build
However, I want to do more than that. I want to build , test and deploy on demand the Nuget package to Nuget.org.
However , the building should be done first on local – and then with GitHub Actions – the deployment should be done.
For this I do like https://github.com/xt0rted/dotnet-run-script
This is how I use to do test and pack, by using a global.json file
{ "scripts": { "build": "dotnet build --configuration Release", "test": "dotnet test --configuration Release", "ci": "dotnet r build && dotnet r test", "pack":"dotnet r ci && cd Watch2 && dotnet pack -o ../../nugetPackages" } }
So the github action now looks like this
name: compile and deploy with tag v* on: push: branches: [ "main" ] tags: [ 'v*' ] # Listen for tag pushes that match version tags pull_request: branches: [ "main" ] jobs: build: # runs-on: windows-latest runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup .NET uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x - name: Restore dependencies run: | dotnet tool install --global PowerShell cd src cd Watch2 dotnet restore - name: Build run: | cd src cd Watch2 dotnet tool restore dotnet r pack - name: 'Upload nuget' uses: actions/upload-artifact@v4 with: name: Nuget_${{github.run_number}} path: src/nugetPackages retention-days: 1 - name: push to nuget if: startsWith(github.ref, 'refs/tags/v') # This line ensures the step runs only if a tag version is present run: | dir src/nugetPackages/*.* echo '1' dir src/nugetPackages/*.symbols.nupkg echo '2' cd src cd nugetPackages dotnet nuget push "*.symbols.nupkg" --api-key ${{ secrets.NUGET_KEY }} --source https://api.nuget.org/v3/index.json
More, we should add to github Settings => Secrets and variables => Actions secrets a new secret with name NUGET_KEY
The build and test are made automatically . More, if I want to deploy also, then
1. I modify the version in the csproj file
<PropertyGroup> <Version>8.2024.1102.950</Version> </PropertyGroup>
2. I push the changes to the repository with a tag ( e.g. v8.2024.1102.950)
So this achieves the CI/CD basic .