Skip to content

Merge pull request #20 from KamiYomu/develop #17

Merge pull request #20 from KamiYomu/develop

Merge pull request #20 from KamiYomu/develop #17

Workflow file for this run

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