I am trying to use GitHub actions to generate a NuGet package from my project and push it to the (private) GitHub registry.
My script ([NAME] fields redacted):
name: Update NuGet on: [push] jobs: build: runs-on: ubuntu-latest name: Update NuGet steps: - uses: actions/checkout@master - uses: actions/setup-dotnet@v1 with: dotnet-version: '2.2.105' - name: Package Release run: | cd [SOLUTION_FOLDER] dotnet pack -c Release -o out - name: Publish Nuget to GitHub registry run: dotnet nuget push ./[SOLUTION_FOLDER]/[PROJECT_FOLDER]/out/$(ls ./[SOLUTION_FOLDER]/[PROJECT_FOLDER]/out) -s https://nuget.pkg.github.com/[USERNAME]/index.json -k ${GITHUB_TOKEN} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Log output:
info : Pushing [PROJECT_FOLDER].3.4.23.nupkg to 'https://nuget.pkg.github.com/[USERNAME]'... info : PUT https://nuget.pkg.github.com/[USERNAME]/ info : An error was encountered when fetching 'PUT https://nuget.pkg.github.com/[USERNAME]/'. The request will now be retried. info : An error occurred while sending the request. info : The server returned an invalid or unrecognized response. info : PUT https://nuget.pkg.github.com/[USERNAME]/ info : An error was encountered when fetching 'PUT https://nuget.pkg.github.com/[USERNAME]/'. The request will now be retried. info : An error occurred while sending the request. info : The server returned an invalid or unrecognized response. info : PUT https://nuget.pkg.github.com/[USERNAME]/ error: An error occurred while sending the request. error: The server returned an invalid or unrecognized response. ##[error]Process completed with exit code 1.
This is the coresponding GitHub issue (with a workaround option): https://github.com/NuGet/Home/issues/8580
Sign into your nuget.org account or create an account if you don't have one already. For more information on creating your account, see Individual accounts. Select your user name (on the upper right), then select API Keys. Select Create, provide a name for your key, select Select Scopes > Push.
Second Update: I got an answer in the GitHub issue from jcansdale
that says (haven't tested this):
Support for the dotnet nuget push --api-key option has now been added to GitHub Packages. For some reason this works consistently, but using basic auth (password in nuget.config file) fails randomly!
Example:
- name: Publish Nuget to GitHub registry run: dotnet nuget push ./<project>/out/*.nupkg -k ${GITHUB_TOKEN} -s https://nuget.pkg.github.com/<organization>/index.json --skip-duplicate --no-symbols env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Update: Based on Dids answer on GitHub my configuration works now like this:
name: NuGet Generation on: push: branches: - master pull_request: types: [closed] branches: - master jobs: build: runs-on: ubuntu-18.04 name: Update NuGet package steps: - name: Checkout repository uses: actions/checkout@v1 - name: Setup .NET Core @ Latest uses: actions/setup-dotnet@v1 with: source-url: https://nuget.pkg.github.com/<organization>/index.json env: NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} - name: Build solution and generate NuGet package run: | cd <project> dotnet pack -c Release -o out - name: Push generated package to GitHub registry run: dotnet nuget push ./<project>/out/*.nupkg --skip-duplicate --no-symbols true
Note: At the time of writing I needed to use --no-symbols true
instead of --no-symbols
to prevent exceptions in the dotnet NuGet client.
Old answer:
I switched to the Windows image and got it to work based on the example of @anangaur. This is my final code:
name: NuGet Generation on: push: branches: - master jobs: build: runs-on: windows-latest name: Update NuGet steps: - name: Checkout repository uses: actions/checkout@master # latest image has .NET already installed! # - name: Setup .NET environment # uses: actions/setup-dotnet@v1 # with: # dotnet-version: '2.2.105' - name: Build solution and generate NuGet package run: | cd SOLUTION_FOLDER dotnet pack -c Release -o out - name: Install NuGet client uses: warrenbuckley/Setup-Nuget@v1 - name: Add private GitHub registry to NuGet run: nuget sources add -name "GPR" -Source https://nuget.pkg.github.com/ORGANIZATION_NAME/index.json -Username ORGANIZATION_NAME -Password ${{ secrets.GITHUB_TOKEN }} - name: Push generated package to GitHub registry run: nuget push .\SOLUTION_FOLDER\PROJECT_FOLDER\out\*.nupkg -Source "GPR" -SkipDuplicate
Here is a workaround that works on all platforms:
name: prerelease NuGet on: [push] jobs: build: runs-on: ubuntu-latest # also works with windows-latest and macos-latest steps: - name: Checkout repository uses: actions/checkout@v1 - name: Build with dotnet run: dotnet build --configuration Release --version-suffix prerelease-$(date +%Y%m%d%H%M%S) shell: bash - name: Publish nuget run: | for f in ./[repository]/bin/Release/*.nupkg do curl -vX PUT -u "[user]:${{ secrets.GHPackagesToken }}" -F package=@$f https://nuget.pkg.github.com/[user]/ done shell: bash
Notes:
<VersionPrefix>
instead of <Version>
in your .csproj <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
in your .csproj dotnet pack
<RepositoryUrl>...</RepositoryUrl>
in your .csprojdotnet nuget push
command (see initial post of GH issue), then we won't need this workaround anymoreIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With