On several GitHub projects nowadays you find these nice badges in the readme.md
that tell you whether the current build passed. Until a few days ago I didn't know how these were implemented but since I have my own small open-source GitHub project now, I wanted a badge. Sounds a bit like gamification if I say it like this but that's an entirely different topic :)
The badge I'm aiming for is this one:
It's from AppVeyor, a continuous delivery service for Windows. Out-of-the-box it supports msbuild. Since my project is ASP.NET Core (RC1) with an xUnit.net test suite, some configuration must be added to the project.
Add project to AppVeyor
Adding your GitHub project itself to AppVeyor is really easy: just login to https://ci.appveyor.com/login with your GitHub account credentials and the rest should point itself.
AppVeyor configuration
Next step is to add an appveyor.yml
to the root folder of your project. You can check out my most recent version here. I'll list it here to be able to explain the parts.
version: 1.0.{build}
# For now just the develop branch.
branches:
only:
-develop
# Defines the machine that is used to run build/test/deploy/...
os: Visual Studio 2015
# Called after cloning the repository.
install:
# Add the v3 NuGet feed and myget.org (for moq.netcore package).
- nuget sources add -Name api.nuget.org -Source https://api.nuget.org/v3/index.json
- nuget sources add -Name myget.org -Source https://www.myget.org/F/aspnet-contrib/api/v3/index.json
# Install dnvm.
- ps: "&{$Branch='dev';iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.ps1'))}"
# Install coreclr (no need for startup improvement here)
- dnvm upgrade -r coreclr -NoNative
# Called before building.
before_build:
- dnu restore
- cd %APPVEYOR_BUILD_FOLDER%\src\Localization.JsonLocalizer
# Replace default build.
build: off
build_script:
- dnu build
# Called before running tests.
before_test:
- cd %APPVEYOR_BUILD_FOLDER%\test\Localization.JsonLocalizer.Tests
# Replace default test.
test: off
test_script:
- dnx test
My configuration has three stages:
- Install ASP.NET Core RC1.
- Prepare and run
dnu build
. - Prepare and run
dnx test
Some details worth noting:
- By default the
Visual Studio 2015
build machine is configured with the v2 NuGet feed. I add the v3 feed and themyget.org
feed because that's where themoq.netcore
package lives that I use in my xUnit tests. - I use the
-NoNative
flag fordnvm upgrade
. This skips native image generation to improve startup time. The only thing that needs starting up are unit tests and these run just once. Native image compilation costs way more time than I can win back in unit test startup time improvements. - AppVeyor defines a number of environment variables, one of which is
APPVEYOR_BUILD_FOLDER
that points to the folder that the project was cloned into.
Results
On the AppVeyor overview page, the result of a successful build is this:
This result includes both the build and the tests. You already saw the badge that I included in my readme.md
file. The badge itself is an SVG image that is generated to describe your latest build result.
So that's it, pretty easy once you understand how it works. I didn't invent all of this myself of course; there's a nice post by Nimesh Manmohanlal that handles the installation steps. I added the necessary build and test steps.