diff --git a/README.md b/README.md index 878ccf7..b598c0c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # drone-with-go [![Build Status](http://beta.drone.io/api/badges/drone-demos/drone-with-go/status.svg)](http://beta.drone.io/drone-demos/drone-with-go) [![Build Status](https://aircover.co/badges/drone-demos/drone-with-go/coverage.svg)](https://aircover.co/drone-demos/drone-with-go) -An example of how to test Go code. +An example of how to test Go code with Drone. # Basic Testing To run basic CI tests use the following in your `.drone.yml` file. @@ -12,11 +12,15 @@ build: - go test ./... ``` +In this config `image: golang:1.5.3` references the official Golang Docker image hosted on the Docker Hub registry at https://hub.docker.com/r/_/golang/. +Go tests are execute with the `go test ./...` command. + # Advanced Testing + +## Environment Variables Using environment variables to configure Go testing is easy. Configure environment variables by setting the `build` section's `environment`. -`.drone.yml`: ```yaml build: image: golang:1.5.3 @@ -29,10 +33,33 @@ build: - go test ./... ``` -Below is a more advanced `.drone.yml` for notification integrations like HipChat. +## Coverage +Drone tests work best with the coverage plugin and the [aircover.co](https://aircover.co) service. +We only want to send a coverage report when all tests pass, so the coverage plugin uses `publish`. +Also, we should specify a particular branch so that coverage reports are consistent. ```yaml +build: + image: golang:1.5.3 + environment: + - GO15VENDOREXPERIMENT=1 + - GOOS=linux + - GOARCH=amd64 + - CGO_ENABLED=0 + commands: + - go test -cover -coverprofile coverage.out + +publish: + coverage: + when: + branch: master +``` +## Plugins +Notification plugins use `notify` for integrations like HipChat. +You can find a list of plugins at [readme.drone.io/plugins](http://readme.drone.io/plugins/). + +```yaml build: image: golang:1.5.3 environment: @@ -40,9 +67,13 @@ build: - GOOS=linux - GOARCH=amd64 - CGO_ENABLED=0 - - COVERALLS_TOKEN=$$COVERALLS_TOKEN commands: - - go test -cover ./... + - go test -cover -coverprofile coverage.out + +publish: + coverage: + when: + branch: master notify: hipchat: diff --git a/main_test.go b/main_test.go index d844446..887a4df 100644 --- a/main_test.go +++ b/main_test.go @@ -1,6 +1,13 @@ package main -import "testing" +import ( + "os" + "testing" +) + +func TestMain(m *testing.M) { + os.Exit(m.Run()) +} func TestHelloWorld(t *testing.T) { if HelloWorld() != "hello world" {