Skip to content

Deploy NuGet package #71

Deploy NuGet package

Deploy NuGet package #71

name: Deploy NuGet package
on:
workflow_dispatch:
inputs:
environment:
description: Deployment environment
type: choice
options:
- staging
- nuget.org
default: staging
required: true
preview:
description: Append preview suffix
type: boolean
default: true
required: true
concurrency:
group: ${{ inputs.environment }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.compose.outputs.version }}
steps:
- name: Checkout source
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "9.x"
dotnet-quality: "ga"
- name: Setup GitVersion
uses: gittools/actions/gitversion/[email protected]
with:
versionSpec: "5.x"
preferLatestVersion: true
- name: Determine version
id: gitversion
uses: gittools/actions/gitversion/[email protected]
with:
updateAssemblyInfo: true
useConfigFile: true
configFilePath: src/gitversion.yml
- name: Compose version
id: compose
run: |
composed_version=${{ steps.gitversion.outputs.majorMinorPatch }}${{ inputs.preview && '-preview.' || '' }}${{ inputs.preview && steps.gitversion.outputs.preReleaseNumber || inputs.preview && github.run_number || '' }}
echo "version=$composed_version" >> "$GITHUB_OUTPUT"
- name: Build library
run: >
dotnet build src/Indicators.csproj
--configuration Release
--property:Version=${{ steps.compose.outputs.version }}
--property:ContinuousIntegrationBuild=true
-warnAsError
- name: Pack for NuGet
run: >
dotnet pack src/Indicators.csproj
--configuration Release
--no-build
--include-symbols
--output NuGet
-p:PackageVersion=${{ steps.compose.outputs.version }}
- name: Save package
uses: actions/upload-artifact@v4
with:
name: packages
path: NuGet
include-hidden-files: true
- name: Summary output
run: |
{
echo "| Version No. | Component |"
echo "| :---------- | :---------------------------------------------- |"
echo "| Major | ${{ steps.gitversion.outputs.major }} |"
echo "| Minor | ${{ steps.gitversion.outputs.minor }} |"
echo "| Patch | ${{ steps.gitversion.outputs.patch }} |"
echo "| Base | ${{ steps.gitversion.outputs.majorMinorPatch }} |"
echo "| Composed | ${{ steps.compose.outputs.version }} |"
} >> $GITHUB_STEP_SUMMARY
deploy:
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
environment:
name: ${{ inputs.environment }}
url: "${{ vars.NUGET_DOWNLOAD_PREFIX }}${{ needs.build.outputs.version }}"
steps:
- name: Pre-flight summary
run: |
{
echo "| Parameter | Value |"
echo "| :-------------- | :--------------------------------- |"
echo "| Environment | ${{ inputs.environment }} |"
echo "| Publishing URL | ${{ vars.NUGET_PUBLISH_URL }} |"
echo "| Download URL | ${{ vars.NUGET_DOWNLOAD_PREFIX }} |"
echo "| Version ID | ${{ needs.build.outputs.version }} |"
} >> $GITHUB_STEP_SUMMARY
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "9.x"
dotnet-quality: "ga"
- name: Setup NuGet
uses: nuget/setup-nuget@v2
with:
nuget-api-key: ${{ secrets.NUGET_TOKEN }}
nuget-version: '6.x'
- name: Download package
uses: actions/download-artifact@v4
with:
name: packages
path: NuGet
- name: Publish to GitHub Packages (staging)
if: inputs.environment == 'staging'
run: |
dotnet nuget push NuGet/*.nupkg --source "https://nuget.pkg.github.com/DaveSkender/index.json" --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate
- name: Publish to NuGet.org
if: inputs.environment == 'nuget.org'
run: |
dotnet new nugetconfig --force
nuget setApiKey ${{ secrets.NUGET_TOKEN }} -src nuget -ConfigFile nuget.config
nuget push NuGet/*.nupkg -src nuget -NonInteractive -ConfigFile nuget.config -Verbosity Detailed
- name: Tag and draft release note
uses: ncipollo/release-action@v1
if: inputs.environment == 'nuget.org'
with:
body: |
We’ve released a new Stock Indicators for .NET NuGet package.
See [Skender.Stock.Indicators @ NuGet.org](${{ vars.NUGET_DOWNLOAD_PREFIX }}${{ needs.build.outputs.version }}) for more information.
generateReleaseNotes: true
draft: true
makeLatest: ${{ !inputs.preview }}
prerelease: ${{ inputs.preview }}
tag: ${{ needs.build.outputs.version }}
commit: ${{ github.ref_name }}