diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..e4cc52f --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,62 @@ +name: Publish NuGet Package + +on: + release: + types: + - published + +permissions: + contents: read + +jobs: + publish: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + global-json-file: global.json + + - name: Resolve package version + id: version + shell: bash + run: | + version="${GITHUB_REF_NAME#v}" + if [[ "$version" =~ ^[0-9]+\.[0-9]+$ ]]; then + version="$version.0" + fi + if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+([-+][0-9A-Za-z.-]+)?$ ]]; then + echo "Release tag '$GITHUB_REF_NAME' does not resolve to a SemVer package version." >&2 + exit 1 + fi + echo "package-version=$version" >> "$GITHUB_OUTPUT" + + - name: Restore dependencies + run: dotnet restore + + - name: Build + run: dotnet build -c Release --no-restore + + - name: Run tests + run: dotnet test -c Release --no-build --logger "trx;LogFileName=test-results.trx" --results-directory TestResults + + - name: Pack + run: > + dotnet pack src/FixedPointNano/FixedPointNano.csproj + -c Release + --no-build + -o artifacts + /p:PackageVersion=${{ steps.version.outputs.package-version }} + + - name: Publish package + env: + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + run: > + dotnet nuget push artifacts/*.nupkg + --api-key "$NUGET_API_KEY" + --source "https://api.nuget.org/v3/index.json" + --skip-duplicate