Merge pull request #24 from KamiYomu/develop #18
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release Build and Publish | |
| on: | |
| push: | |
| branches: | |
| - 'releases/**' | |
| jobs: | |
| build: | |
| name: Build, Test, Pack | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version: ${{ steps.set_outputs.outputs.version }} | |
| is_prerelease: ${{ steps.set_outputs.outputs.is_prerelease }} | |
| tag: ${{ steps.set_outputs.outputs.tag }} | |
| env: | |
| DOTNET_VERSION: '8.0.x' | |
| SOLUTION_PATH: './src/KamiYomu.CrawlerAgents.Core.sln' | |
| PROJECT_PATH: './src/KamiYomu.CrawlerAgents.Core/KamiYomu.CrawlerAgents.Core.csproj' | |
| TEST_PROJECT_PATH: './tests/KamiYomu.CrawlerAgents.Core.Tests/KamiYomu.CrawlerAgents.Core.Tests.csproj' | |
| NUGET_CONFIG_PATH: './src/NuGet.config' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v3 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: ${{ env.DOTNET_VERSION }} | |
| - name: Extract version and suffix from branch | |
| id: extract_version | |
| run: | | |
| BRANCH_NAME="${GITHUB_REF#refs/heads/}" | |
| RAW_VERSION="${BRANCH_NAME#releases/}" | |
| if [[ "$RAW_VERSION" == *"-"* ]]; then | |
| VERSION_BASE="${RAW_VERSION%%-*}" | |
| VERSION_SUFFIX="-${RAW_VERSION#*-}" | |
| IS_PRERELEASE=true | |
| else | |
| VERSION_BASE="$RAW_VERSION" | |
| VERSION_SUFFIX="" | |
| IS_PRERELEASE=false | |
| fi | |
| if [[ ! "$VERSION_BASE" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | |
| echo "Invalid VERSION_BASE format: '$VERSION_BASE'" | |
| exit 1 | |
| fi | |
| TAG="${VERSION_BASE}${VERSION_SUFFIX}" | |
| echo "VERSION=${VERSION_BASE}" >> $GITHUB_ENV | |
| echo "VERSION_SUFFIX=${VERSION_SUFFIX}" >> $GITHUB_ENV | |
| echo "IS_PRERELEASE=${IS_PRERELEASE}" >> $GITHUB_ENV | |
| echo "TAG=${TAG}" >> $GITHUB_ENV | |
| - name: Set outputs | |
| id: set_outputs | |
| run: | | |
| echo "version=${VERSION}" >> $GITHUB_OUTPUT | |
| echo "version_suffix=${VERSION_SUFFIX}" >> $GITHUB_OUTPUT | |
| echo "is_prerelease=${IS_PRERELEASE}" >> $GITHUB_OUTPUT | |
| echo "tag=${TAG}" >> $GITHUB_OUTPUT | |
| - name: Restore | |
| run: dotnet restore ${{ env.SOLUTION_PATH }} --configfile ${{ env.NUGET_CONFIG_PATH }} | |
| - name: Build | |
| run: | | |
| dotnet pack "${PROJECT_PATH}" \ | |
| --configuration Release \ | |
| --no-restore \ | |
| -p:VersionSuffix="${{ env.VERSION_SUFFIX}}" \ | |
| -p:Version="${{ env.VERSION }}" | |
| - name: Test | |
| run: dotnet test ${{ env.TEST_PROJECT_PATH }} --configuration Release | |
| - name: Pack | |
| run: | | |
| dotnet pack ${{ env.PROJECT_PATH }} \ | |
| --configuration Release \ | |
| --output ./nupkg \ | |
| /p:PackageVersion=${{ env.TAG }} | |
| - name: Upload NuGet artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: nugetPackage | |
| path: ./nupkg/*.nupkg | |
| publish: | |
| name: Publish to GitHub + NuGet.org | |
| runs-on: ubuntu-latest | |
| needs: build | |
| env: | |
| VERSION: ${{ needs.build.outputs.version }} | |
| TAG: ${{ needs.build.outputs.tag }} | |
| IS_PRERELEASE: ${{ needs.build.outputs.is_prerelease }} | |
| steps: | |
| - name: Download nuget package artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: nugetPackage | |
| path: ./nugetPackage | |
| - name: Prep GitHub Package source | |
| run: | | |
| dotnet nuget add source \ | |
| https://nuget.pkg.github.com/KamiYomu/index.json \ | |
| --name github \ | |
| --username "github" \ | |
| --password "${{ secrets.GH_KAMIYOMU_GITHUB_PACKAGE_PUBLISHER }}" \ | |
| --store-password-in-clear-text | |
| - name: Push package to GitHub Packages | |
| run: | | |
| dotnet nuget push "./nugetPackage/**/*.nupkg" \ | |
| --api-key "${{ secrets.GH_KAMIYOMU_GITHUB_PACKAGE_PUBLISHER }}" \ | |
| --source github \ | |
| --skip-duplicate | |
| - name: Push package to NuGet.org | |
| if: ${{ env.IS_PRERELEASE == 'false' }} | |
| run: | | |
| dotnet nuget push "./nugetPackage/**/*.nupkg" \ | |
| --api-key "${{ secrets.GH_KAMIYOMU_NUGETORG_PACKAGE_PUBLISHER }}" \ | |
| --source "https://api.nuget.org/v3/index.json" \ | |
| --skip-duplicate |