johnsonjh/gfcp

View on GitHub
.gitlab-ci.yml

Summary

Maintainability
Test Coverage
###################### Begin Defaults
stages:
    - all
variables:
    GIT_DEPTH: 0
    GIT_STRATEGY: clone
default:
    before_script:
    - | 
        # before_script
        echo "Starting before_script actions."
        echo "Finished before_script actions."
    after_script:
    - | 
        # after_script
        echo "Starting after_script actions."
        echo "Finished after_script actions."
###################### End Defaults

###################### Begin Common Blocks
.scriptCommon: &scriptCommon | 
    # scriptCommon
    echo "Project Name              : $CI_PROJECT_TITLE"
    echo "Project Git Commit        : $CI_COMMIT_SHA"
    echo "Project Git Branch        : $CI_COMMIT_BRANCH"
    echo "GitLab CI User Details    : $GITLAB_USER_LOGIN - $GITLAB_USER_NAME ($GITLAB_USER_ID) $GITLAB_USER_EMAIL"
    echo "GitLab CI Job Name        : $CI_JOB_NAME"
    echo "GitLab CI Job ID          : $CI_JOB_ID"
    echo "GitLab CI Job Stage       : $CI_JOB_STAGE"
    echo "GitLab CI Runner Details  : $CI_RUNNER_VERSION ($CI_RUNNER_REVISION)"
.scriptGoVersion: &scriptGoVersion | 
    # scriptGoVersion
    echo "Go Compiler Version:"
    go version
    echo "Go Default Environment:"
    go env
    echo "Go Current Environment:"
    go tool dist env -p
.scriptGitPre: &scriptGitPre | 
    # scriptGitPre
    git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
    git --no-pager fetch --tags
    git --no-pager fetch --all --recurse-submodules=yes
    git --no-pager update-index -q --refresh --really-refresh
    git --no-pager for-each-ref --count=1
    git --no-pager reset --hard
    git --no-pager diff --full-index --exit-code
###################### End Common Blocks

###################### Begin Windows Build + Test
windows job:
    tags:
    - Windows-x86_64
    stage: all
    script: 
    - *scriptCommon
    - $env:Path += ";C:\Program Files\Git\cmd;C:\Go\bin"
    - $env:GO111MODULE="on"
    - $env:GOPROXY="https://proxy.golang.org,direct"
    - $env:CGO_ENABLED="0"
    - *scriptGoVersion
    - go clean -modcache -cache -r
    - go mod download
    - go mod verify
    - *scriptGitPre
    - go build -v -a -trimpath .\...
    - | 
        # status
        echo "Build completed successfully - running tests; coverage and race detector enabled"
        echo "TODO: Port of full coverage tools to PowerShell"
    - $env:CGO_ENABLED="1"
    - go test -v -cover -covermode="atomic" -race -count="1" -cpu="2" -parallel="2" .\...
###################### End Windows Build + Test

###################### Begin Linux
linux job:
    tags:
    - Linux-x86_64
    stage: all
    script: 
    - *scriptCommon
    - | 
        # upgrade system, install development tools
    - yum install dnf -y
    - yum clean all -y
    - dnf upgrade --refresh -y
    - dnf groupinstall "Development Tools" -y
    - dnf install epel-release centos-release-scl centos-release-scl-rh -y
    - dnf install ccache pv valgrind graphviz clang zsh scl-utils devtoolset-9 -y
    - dnf groupupdate base -y
    - source /opt/rh/devtoolset-9/enable
    - dnf clean all -y
    - | 
        # gimme go 1.15.6
        bash --norc --noprofile --posix -o pipefail -c "set -e && mkdir -p /tools/bin && curl -fsSL -o /tools/bin/gimme https://raw.githubusercontent.com/travis-ci/gimme/master/gimme && chmod a+x /tools/bin/gimme"
        bash --norc --noprofile --posix -o pipefail -c "set -e && mkdir -p /tools/gimme && GIMME_SILENT_ENV=1 GIMME_ENV_PREFIX=/tools/gimme/env GIMME_VERSION_PREFIX=/tools/gimme/ver GIMME_GO_VERSION=1.15.6 GIMME_CGO_ENABLED=1 /tools/bin/gimme" > /tools/genv && source /tools/genv
    - source /tools/genv
    - go env -w GO111MODULE=on && export GO111MODULE=on
    - export GOPROXY="https://proxy.golang.org,direct" && go env -w GOPROXY="${GOPROXY:?}"
    - *scriptGoVersion
    - go clean -modcache -cache -r -x
    - *scriptGitPre
    - CGO_ENABLED=0 go build -v -a -trimpath $(go list ./... | grep -v test | sort | uniq)
    - | 
        # status
        echo "Build completed successfully - running race-enabled testing."
    - CGO_ENABLED=1 go test -v -a -cover -covermode=atomic -race -count=1 -cpu=2 -parallel=2 $(go list ./... | grep -v test | sort | uniq)
###################### End Linux Build + Test

###################### Begin macOS Build + Test
macos job:
    tags:
    - macOS_X-x86_64
    stage: all
    script:
    - | 
        # update tools
        bash --norc --noprofile --posix -c "brew update || true" || true
        bash --norc --noprofile --posix -c "brew upgrade || true" || true
    - *scriptCommon
    - if type brew >/dev/null 2>&1; then export HOMEBREW_PREFIX=$(brew --prefix 2>/dev/null); for dir in ${HOMEBREW_PREFIX:?}/opt/*/libexec/gnubin; do export PATH="${dir:?}:${PATH:?}"; done; fi
    - export PATH="/usr/local/opt/gcc/bin:${PATH:?}"
    - go env -w GO111MODULE=on && export GO111MODULE=on
    - export GOPROXY="https://proxy.golang.org,direct" && go env -w GOPROXY="${GOPROXY:?}"
    - export PRIVPATH=$(mktemp -d "${HOME:?}/.XXXXXXXXXXXXXXXX")
    - export NEW_GOPATH=$(mktemp -d "${PRIVPATH:?}/XXXXXXXXXXXXXXXX")
    - export NEW_GOCACHE=$(mktemp -d "${PRIVPATH:?}/XXXXXXXXXXXXXXXX")
    - export NEW_GOMODCACHE=$(mktemp -d "${PRIVPATH:?}/XXXXXXXXXXXXXXXX")
    - export GOPATH="${NEW_GOPATH:?}" && go env -w GOPATH="${NEW_GOPATH:?}"
    - export GOCACHE="${NEW_GOCACHE:?}" && go env -w GOCACHE="${NEW_GOCACHE:?}"
    - export GOMODCACHE="${NEW_GOMODCACHE:?}" && go env -w GOMODCACHE="${NEW_GOMODCACHE:?}"
    - *scriptGoVersion
    - go clean -testcache -modcache -cache -r -x
    - *scriptGitPre
    - GOMAXPROCS=8 CGO_ENABLED=0 go build -v -a -trimpath $(go list ./... | grep -v test | sort | uniq)
    - | 
        # status
        echo "Build completed successfully - running race-enabled tests."
    - GOMAXPROCS=8 CGO_ENABLED=1 go test -v -a -cover -covermode=atomic -race -count=1 -cpu=2 -parallel=2 $(go list ./... | grep -v test | sort | uniq)
    - | 
        # cleaning up
    - chmod -R u+rwx "${GOPATH:?}"/* 2>/dev/null && rm -rf -- "${GOPATH:?}"/* 2>/dev/null || true :;
    - chmod -R u+rwx "${GOCACHE:?}"/* 2>/dev/null && rm -rf -- "${GOCACHE:?}"/* 2>/dev/null || true :;
    - chmod -R u+rwx "${GOMODCACHE:?}"/* 2>/dev/null && rm -rf -- "${GOMODCACHE:?}"/* 2>/dev/null || true :;
###################### End macOS Build + Test