Last active
September 13, 2020 21:29
-
-
Save elithrar/4fa799c66b2c9932ac33f450f0787a58 to your computer and use it in GitHub Desktop.
CircleCI vs. TravisCI for gorilla/mux - comparing maintainability, verbosity, DRY, etc. Ref: https://twitter.com/elithrar/status/1140342082768261120 & https://blog.questionable.services/article/building-go-projects-on-circle-ci/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
language: go | |
matrix: | |
include: | |
- go: 1.7.x | |
- go: 1.8.x | |
- go: 1.9.x | |
- go: 1.10.x | |
- go: 1.11.x | |
- go: 1.x | |
env: LATEST=true | |
- go: tip | |
allow_failures: | |
- go: tip | |
install: | |
- # Skip | |
script: | |
- go get -t -v ./... | |
- diff -u <(echo -n) <(gofmt -d .) | |
- if [[ "$LATEST" = true ]]; then go vet .; fi | |
- go test -v -race ./... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
version: 2.1 | |
jobs: | |
"test": | |
parameters: | |
version: | |
type: string | |
default: "latest" | |
golint: | |
type: boolean | |
default: true | |
modules: | |
type: boolean | |
default: true | |
goproxy: | |
type: string | |
default: "" | |
docker: | |
- image: "circleci/golang:<< parameters.version >>" | |
working_directory: /go/src/github.com/gorilla/mux | |
environment: | |
GO111MODULE: "on" | |
GOPROXY: "<< parameters.goproxy >>" | |
steps: | |
- checkout | |
- run: | |
name: "Print the Go version" | |
command: > | |
go version | |
- run: | |
name: "Fetch dependencies" | |
command: > | |
if [[ << parameters.modules >> = true ]]; then | |
go mod download | |
export GO111MODULE=on | |
else | |
go get -v ./... | |
fi | |
# Only run gofmt, vet & lint against the latest Go version | |
- run: | |
name: "Run golint" | |
command: > | |
if [ << parameters.version >> = "latest" ] && [ << parameters.golint >> = true ]; then | |
go get -u golang.org/x/lint/golint | |
golint ./... | |
fi | |
- run: | |
name: "Run gofmt" | |
command: > | |
if [[ << parameters.version >> = "latest" ]]; then | |
diff -u <(echo -n) <(gofmt -d -e .) | |
fi | |
- run: | |
name: "Run go vet" | |
command: > | |
if [[ << parameters.version >> = "latest" ]]; then | |
go vet -v ./... | |
fi | |
- run: | |
name: "Run go test (+ race detector)" | |
command: > | |
go test -v -race ./... | |
workflows: | |
tests: | |
jobs: | |
- test: | |
matrix: | |
parameters: | |
version: ["latest", "1.15", "1.14", "1.13", "1.12", "1.11"] |
Updated to use matrix
in CircleCI:
version: 2.1
jobs:
"test":
parameters:
version:
type: string
default: "latest"
golint:
type: boolean
default: true
modules:
type: boolean
default: true
goproxy:
type: string
default: ""
docker:
- image: "circleci/golang:<< parameters.version >>"
working_directory: /go/src/github.com/gorilla/mux
environment:
GO111MODULE: "on"
GOPROXY: "<< parameters.goproxy >>"
steps:
- checkout
- run:
name: "Print the Go version"
command: >
go version
- run:
name: "Fetch dependencies"
command: >
if [[ << parameters.modules >> = true ]]; then
go mod download
export GO111MODULE=on
else
go get -v ./...
fi
# Only run gofmt, vet & lint against the latest Go version
- run:
name: "Run golint"
command: >
if [ << parameters.version >> = "latest" ] && [ << parameters.golint >> = true ]; then
go get -u golang.org/x/lint/golint
golint ./...
fi
- run:
name: "Run gofmt"
command: >
if [[ << parameters.version >> = "latest" ]]; then
diff -u <(echo -n) <(gofmt -d -e .)
fi
- run:
name: "Run go vet"
command: >
if [[ << parameters.version >> = "latest" ]]; then
go vet -v ./...
fi
- run:
name: "Run go test (+ race detector)"
command: >
go test -v -race ./...
workflows:
tests:
jobs:
- test:
matrix:
parameters:
version: ["latest", "1.15", "1.14", "1.13", "1.12", "1.11"]
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
A variant that uses Parameters in v2.1 to re-use more code.