Files
go-toml/.circleci/config.yml
T
Thomas Pelletier 6ea91ef590 Do not push Docker images for forked repositories (#272)
For security reasons, CircleCI does not make environment variables
available on forked repositories (often used in PRs). This will still
build the docker image, but won't try to push it to dockerhub.
2019-04-11 13:49:07 +01:00

171 lines
6.1 KiB
YAML

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_test:
description: "Run unit tests for a go module"
parameters:
test_name:
type: string
module:
type: string
coverage:
default: false
type: boolean
allow_fail:
type: boolean
default: false
steps:
- run:
name: "Run tests for <<parameters.test_name>>"
command: |
TEST_DIR="/tmp/test-results/<<parameters.test_name>>"
mkdir -p ${TEST_DIR}
trap "go-junit-report </tmp/test-results/go-test.out > ${TEST_DIR}/go-test-report.xml" EXIT
go test <<parameters.module>> -race -v \
<<# parameters.coverage >>-coverprofile=/tmp/workspace/coverage.txt -covermode=atomic<</ parameters.coverage >> \
| tee /tmp/test-results/go-test.out <<# parameters.allow_fail >>|| true<</ parameters.allow_fail >>
jobs:
go:
parameters:
version:
type: string
allow_fail:
type: boolean
default: false
executor:
name: golang
version: "<<parameters.version>>"
working_directory: /go/src/github.com/pelletier/go-toml
environment:
GO111MODULE: "on"
steps:
- checkout
- run: mkdir -p /tmp/workspace
- run: go fmt ./... <<# parameters.allow_fail >>|| true<</ parameters.allow_fail >>
- get_deps
- run_test:
test_name: "go-toml"
module: "github.com/pelletier/go-toml"
coverage: true
allow_fail: <<parameters.allow_fail>>
- run_test:
test_name: "tomljson"
module: "github.com/pelletier/go-toml/cmd/tomljson"
allow_fail: <<parameters.allow_fail>>
- run_test:
test_name: "tomll"
module: "github.com/pelletier/go-toml/cmd/tomll"
allow_fail: <<parameters.allow_fail>>
- run_test:
test_name: "query"
module: "github.com/pelletier/go-toml/query"
allow_fail: <<parameters.allow_fail>>
- 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
docker:
docker:
- image: "circleci/golang:1.12"
steps:
- checkout
- setup_remote_docker:
docker_layer_caching: true
- run: docker build -t pelletier/go-toml:$CIRCLE_SHA1 .
- run:
name: "Publish docker image"
command: |
if [ "${CIRCLE_PR_REPONAME}" == "" ]; then
IMAGE_NAME="pelletier/go-toml"
IMAGE_SHA_TAG="${IMAGE_NAME}:$CIRCLE_SHA1"
if [ "${CIRCLE_BRANCH}" = "master" ]; then
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker tag ${IMAGE_SHA_TAG} ${IMAGE_NAME}:latest
docker push ${IMAGE_NAME}:latest
fi
if [ "${CIRCLE_TAG}" != "" ]; then
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker tag ${IMAGE_SHA_TAG} ${IMAGE_NAME}:${CIRCLE_TAG}
docker push ${IMAGE_NAME}:${CIRCLE_TAG}
fi
else
echo "not pushing docker image for forked repo"
fi
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
allow_fail: true
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
- docker:
requires:
- codecov