diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index efeb653818a352e5fc4aeede2c7557d419f55e38..c4128644ca1816278906d4479438ad2bfef8c90e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,15 +1,9 @@ # From: https://about.gitlab.com/2017/09/21/how-to-create-ci-cd-pipeline-with-autodeploy-to-kubernetes-using-gitlab-and-helm/ -cache: - untracked: true - key: "$CI_BUILD_REF_NAME" - paths: - - vendor/ - variables: REPO_DIR: gitlab.com/elixxir REPO_NAME: notifications-bot - DOCKER_IMAGE: golang:1.13.4-buster + DOCKER_IMAGE: elixxirlabs/cuda-go:latest MIN_CODE_COVERAGE: "0.0" before_script: @@ -23,60 +17,39 @@ before_script: - chmod 700 ~/.ssh - ssh-keyscan -t rsa gitlab.com > ~/.ssh/known_hosts - git config --global url."git@gitlab.com:".insteadOf "https://gitlab.com/" - - export GOFLAGS=-mod=vendor + - export PATH=$HOME/go/bin:$PATH + - export GOPRIVATE=gitlab.com/elixxir/* stages: - - setup - - test - build - - tag - trigger_integration -setup: - stage: setup +build: + stage: build image: $DOCKER_IMAGE except: - tags script: + - git clean -ffdx - go mod vendor -v - go build ./... - go mod tidy - artifacts: - paths: - - vendor/ - -test: - stage: test - image: $DOCKER_IMAGE - except: - - tags - script: - - GO111MODULE=off go get -u github.com/haya14busa/goverage - apt-get update - apt-get install bc -y - + - mkdir -p testdata # Test coverage - - goverage -coverprofile=testdata/coverage-real.out -v ./... 2>&1 | grep -v "no packages being tested depend on" + - go-acc --covermode atomic --output testdata/coverage.out ./... -- -v # Exclude cmd from test coverage as it is command line related tooling # - grep -v -e cmd testdata/coverage.out > testdata/coverage-real.out - - go tool cover -func=testdata/coverage-real.out - - go tool cover -html=testdata/coverage-real.out -o testdata/coverage.html + - go tool cover -func=testdata/coverage.out + - go tool cover -html=testdata/coverage.out -o testdata/coverage.html # Test Coverage Check - - go tool cover -func=testdata/coverage-real.out | grep "total:" | awk '{print $3}' | sed 's/\%//g' > testdata/coverage-percentage.txt + - go tool cover -func=testdata/coverage.out | grep "total:" | awk '{print $3}' | sed 's/\%//g' > testdata/coverage-percentage.txt - export CODE_CHECK=$(echo "$(cat testdata/coverage-percentage.txt) >= $MIN_CODE_COVERAGE" | bc -l) - (if [ "$CODE_CHECK" == "1" ]; then echo "Minimum coverage of $MIN_CODE_COVERAGE succeeded"; else echo "Minimum coverage of $MIN_CODE_COVERAGE failed"; exit 1; fi); - artifacts: - paths: - - testdata/ -build: - stage: build - image: $DOCKER_IMAGE - except: - - tags - script: - mkdir -p release - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags '-w -s' ./... - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags '-w -s' -o release/notifications.linux64 main.go @@ -85,10 +58,12 @@ build: - GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build -ldflags '-w -s' -o release/notifications.darwin64 main.go artifacts: paths: - - release/ + - vendor/ + - testdata/ + - release/ tag: - stage: tag + stage: trigger_integration only: - master image: $DOCKER_IMAGE