I have a nuget package that runs Travis CI for its builds. Here is my yml:
language: csharp
solution: TreasureGen.sln
install:
- nuget restore TreasureGen.sln
My .travis.yml is as below, it deploys correctly to nuget and only does the deploy from master branch. The NUGET_API environment variable is setup to only apply to master branch and not be visible in the build.
language: csharp
mono: none
dotnet: 3.1
before_install:
- sudo apt-get -y install libpam0g-dev
install:
- dotnet restore
script:
- dotnet build -c Release
after_success:
- ./test/setup_test_account.sh
- sudo dotnet test test/Npam.Tests/Npam.Tests.csproj
before_deploy:
- dotnet pack -c Release
deploy:
skip_cleanup: true
provider: script
script: dotnet nuget push ./src/Npam/bin/Release/Npam.*.nupkg -k $NUGET_API -s https://api.nuget.org/v3/index.json
on:
branch: master
https://github.com/CamW/npam/blob/master/.travis.yml
Accepted answer didn't work for me (I don't know why). Following is what worked.
language: csharp
solution: [SolutionName].sln
install:
- curl -L -o nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
- mono nuget.exe restore [SolutionName].sln
script:
- xbuild /p:Configuration=Release [SolutionName].sln
- mono nuget.exe pack ./[NuspecName].nuspec
- mono nuget.exe setApiKey $NUGET_API_KEY -Source $NUGET_SOURCE -Verbosity quiet
- mono nuget.exe push [SolutionName].*.nupkg -Source $NUGET_SOURCE
$NUGET_SOURCE
, $NUGET_API_KEY
are environment variables defined in Travis.
I was trying to solve the .travis.yml problem with an aspnetcore web site. The dotnet CLI now supports commands for nuget push and executing unit testing. I also determined that the approach of having .travis.yml just call an external bash script makes things a like lot easier:
.travis.yml
language: csharp
solution: ./SolutionName.sln
mono: none
dotnet: 3.1
script:
- chmod +x ./deploy.sh
- ./deploy.sh
deploy.sh
#!/bin/bash
set -ev
dotnet build -c $BUILD_CONFIG ./SolutionName.sln
if [ $? -eq 0 ]
then
if [ "$BUILD_CONFIG" = "debug" ];
then
dotnet test ./TestProject/TestProject.csproj -v normal --no-build
else
echo Skip testing on non-debug build
fi
fi
if [ $? -eq 0 ]
then
if [ "${TRAVIS_PULL_REQUEST}" = "false" ] && [ "${TRAVIS_BRANCH}" = "master" ];
then
dotnet nuget push ./NugetProject/bin/$BUILD_CONFIG/NugetProject.*.nupkg --api-key $NUGET_API_KEY --source $NUGET_SOURCE --skip-duplicate
else
echo Skip nuget for non-master build
fi
fi
Hope this helps someone using .NET Core 2.2 and higher.
After much fiddling and experimentation, I finally found a solution.
.travis.yml
language: csharp
solution: TreasureGen.sln
install:
- nuget restore TreasureGen.sln
- nuget install NUnit.Runners -OutputDirectory testrunner
script:
- xbuild TreasureGen.sln /p:TargetFrameworkVersion="v4.5" /p:Configuration=Stress
- mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Unit/bin/Stress/TreasureGen.Tests.Unit.dll
- mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Integration.IoC/bin/Stress/TreasureGen.Tests.Integration.IoC.dll
- mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Integration.Tables/bin/Stress/TreasureGen.Tests.Integration.Tables.dll
- mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Integration.Stress/bin/Stress/TreasureGen.Tests.Integration.Stress.dll
deploy:
skip_cleanup: true
provider: script
script: chmod +x ./deploy/deploy.sh && ./deploy/deploy.sh $NUGET_API_KEY $NUGET_SOURCE
on:
branch: master
deploy.sh
ApiKey=$1
Source=$2
nuget pack ./TreasureGen/TreasureGen.nuspec -Verbosity detailed
nuget pack ./TreasureGen.Domain/TreasureGen.Domain.nuspec -Verbosity detailed
nuget push ./DnDGen.TreasureGen.*.nupkg -Verbosity detailed -ApiKey $ApiKey -Source $Source
nuget push ./DnDGen.TreasureGen.Domain.*.nupkg -Verbosity detailed -ApiKey $ApiKey -Source $Source
Here are some of the key things to remember:
skip_cleanup: true
- this allows you to reuse
your previous build command results for your nuget packagechmod +x ./deploy/deploy.sh
allows for the script to be executable