From 690ec00a4b7e125266cf1c4725ae24af22564f8f Mon Sep 17 00:00:00 2001 From: Thomas Pelletier Date: Tue, 12 Mar 2019 21:57:14 -0700 Subject: [PATCH] Circleci (#262) Implement CircleCI as an alternative for Travis. --- .circleci/config.yml | 130 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..0ecc328 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,130 @@ +version: 2.1 + +executors: + golang: + parameters: + version: + type: string + docker: + - image: circleci/golang:<< parameters.version >> + +commands: + get_deps: + description: "Get go dependencies" + steps: + - run: go get github.com/jstemmer/go-junit-report + - run: go get github.com/davecgh/go-spew/spew + - run: go get gopkg.in/yaml.v2 + - run: go get github.com/BurntSushi/toml + + run_test: + description: "Run unit tests for a go module" + parameters: + test_name: + type: string + module: + type: string + coverage: + default: false + type: boolean + steps: + - run: + name: "Run tests for <>" + command: | + TEST_DIR="/tmp/test-results/<>" + mkdir -p ${TEST_DIR} + trap "go-junit-report ${TEST_DIR}/go-test-report.xml" EXIT + go test <> -race -v \ + <<# parameters.coverage >>-coverprofile=/tmp/workspace/coverage.txt -covermode=atomic<> \ + | tee /tmp/test-results/go-test.out + +jobs: + go: + parameters: + version: + type: string + executor: + name: golang + version: "<>" + working_directory: /go/src/github.com/pelletier/go-toml + steps: + - checkout + - run: mkdir -p /tmp/workspace + - run: go fmt ./... + - get_deps + - run_test: + test_name: "go-toml" + module: "github.com/pelletier/go-toml" + coverage: true + - run_test: + test_name: "tomljson" + module: "github.com/pelletier/go-toml/cmd/tomljson" + - run_test: + test_name: "tomll" + module: "github.com/pelletier/go-toml/cmd/tomll" + - run_test: + test_name: "query" + module: "github.com/pelletier/go-toml/query" + - store_test_results: + path: /tmp/test-results + codecov: + docker: + - image: "circleci/golang:1.12" + steps: + - attach_workspace: + at: /tmp/workspace + - run: + name: "upload to codecov" + working_directory: /tmp/workspace + command: | + curl https://codecov.io/bash > codecov.sh + bash codecov.sh -v + +workflows: + version: 2.1 + build: + jobs: + - go: + name: "go1_11" + version: "1.11" + - go: + name: "go1_12" + version: "1.12" + post-steps: + - run: go tool cover -html=/tmp/workspace/coverage.txt -o coverage.html + - store_artifacts: + path: /tmp/workspace/coverage.txt + - store_artifacts: + path: coverage.html + - persist_to_workspace: + root: /tmp/workspace + paths: + - coverage.txt + - go: + name: "gotip" + version: "1.12" # use as base + pre-steps: + - restore_cache: + keys: + - go-tip-source + - run: + name: "Compile go tip" + command: | + if [ ! -d "/tmp/go" ]; then + git clone https://go.googlesource.com/go /tmp/go + fi + cd /tmp/go + git checkout master + git pull + cd src + ./make.bash + echo 'export PATH="/tmp/go/bin:$PATH"' >> $BASH_ENV + - run: go version + - save_cache: + key: go-tip-source + paths: + - "/tmp/go" + - codecov: + requires: + - go1_11 + - go1_12