fix: 💚 fix ci build #44
This file contains 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
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json | |
# https://github.com/rhysd/actionlint | |
name: Publish-Nuget | |
on: | |
push: | |
tags: | |
- v* # for publish package after each release to nuget | |
branches: | |
- main # for publish package and each commit to github | |
paths-ignore: | |
- "tests/**" | |
env: | |
FEED_SOURCE: https://api.nuget.org/v3/index.json | |
GHC_SOURCE: ${{ vars.GHC_SOURCE }} | |
FEED_API_KEY: ${{ secrets.FEED_API_KEY }} | |
GHC_API_KEY: ${{ secrets.GHC_TOKEN }} | |
NuGetDirectory: ${{ github.workspace}}/nuget | |
DOTNET_VERSION: "8.0.*" | |
jobs: | |
# https://www.meziantou.net/publishing-a-nuget-package-following-best-practices-using-github.htm | |
create-nuget: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/cloudbuild.md#github-actions | |
fetch-depth: 0 # avoid shallow clone so nbgv can do its work. | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: ${{ env.DOTNET_VERSION }} | |
- uses: nuget/setup-nuget@v2 | |
name: Setup NuGet | |
with: | |
nuget-version: '6.x' | |
- name: Cache NuGet packages | |
uses: actions/cache@v4 | |
with: | |
path: ~/.nuget/packages | |
key: nuget-cache-${{ runner.os }}-${{ env.DOTNET_VERSION }}-publish | |
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/nbgv-cli.md | |
- name: Install Nerdbank.GitVersioning | |
run: dotnet tool install -g nbgv | |
- name: Get NuGetPackageVersion | |
id: get_version | |
run: | | |
nugetVersion=$(nbgv get-version | grep "NuGetPackageVersion" | awk -F': ' '{print $2}' | xargs) | |
echo "NuGetPackageVersion: $nugetVersion" | |
echo "::set-output name=nuget_version::$nugetVersion" | |
- name: Restore dependencies | |
run: dotnet restore Vertical.Slice.Template.sln | |
- name: Build Version ${{ steps.get_version.outputs.nuget_version }} | |
run: dotnet build Vertical.Slice.Template.sln -c Release --no-restore | |
# https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-pack | |
- name: Pack NuGet Package Version ${{ steps.get_version.outputs.nuget_version }} | |
# default is `no-build` for `nuget pack` command | |
run: nuget pack vertical-slice-template.nuspec -OutputDirectory ${{ env.NuGetDirectory }} -Properties "version=${{ steps.get_version.outputs.nuget_version }}" -NoDefaultExcludes -NoPackageAnalysis | |
# Publish the NuGet package as an artifact, so they can be used in the following jobs | |
- name: Upload Package Version ${{ steps.get_version.outputs.nuget_version }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: nuget | |
if-no-files-found: error | |
retention-days: 1 | |
path: ${{ env.NuGetDirectory }}/*.nupkg | |
deploy-nuget: | |
runs-on: ubuntu-latest | |
# Publish only when creating a GitHub Release | |
# https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository | |
# You can update this logic if you want to manage releases differently | |
needs: [create-nuget] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/cloudbuild.md#github-actions | |
fetch-depth: 0 # avoid shallow clone so nbgv can do its work. | |
# .nupkg should be in the same folder that we have `.template.config`, so we should put it in the root of source directory | |
# Download the NuGet package created in the previous job and copy in the root | |
- name: Download Nuget | |
uses: actions/download-artifact@v4 | |
with: | |
name: nuget | |
## Optional. Default is $GITHUB_WORKSPACE | |
path: ${{ github.workspace}} | |
# Install the .NET SDK indicated in the global.json file | |
- name: Setup .NET Core | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: ${{ env.DOTNET_VERSION }} | |
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/nbgv-cli.md | |
- name: Install Nerdbank.GitVersioning | |
run: dotnet tool install -g nbgv | |
- name: Get NuGetPackageVersion | |
id: get_version | |
run: | | |
nugetVersion=$(nbgv get-version | grep "NuGetPackageVersion" | awk -F': ' '{print $2}' | xargs) | |
echo "NuGetPackageVersion: $nugetVersion" | |
echo "::set-output name=nuget_version::$nugetVersion" | |
# for publish package to github for each commit | |
- name: Publish NuGet Package Version ${{ steps.get_version.outputs.nuget_version }} to GitHub | |
run: dotnet nuget push *.nupkg --skip-duplicate --api-key ${{ env.GHC_API_KEY }} --source ${{ env.GHC_SOURCE }} | |
if: github.event_name == 'push' && (startswith(github.ref, 'refs/heads') || startswith(github.ref, 'refs/tags')) | |
# Publish all NuGet packages to NuGet.org | |
# Use --skip-duplicate to prevent errors if a package with the same version already exists. | |
# If you retry a failed workflow, already published packages will be skipped without error. | |
# https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-nuget-push | |
- name: Publish NuGet Package Version ${{ steps.get_version.outputs.nuget_version }} to Nuget | |
run: dotnet nuget push *.nupkg --skip-duplicate --source ${{ env.FEED_SOURCE }} --api-key ${{ env.FEED_API_KEY }} | |
if: github.event_name == 'push' && startswith(github.ref, 'refs/tags') |