refactor circleci config to 2.0

This commit is contained in:
Alvin Huang 2019-03-08 15:33:03 -05:00
parent 8d98032ed9
commit 329d8b7cfb
1 changed files with 77 additions and 90 deletions

View File

@ -1,67 +1,30 @@
version: 2.1
---
version: 2
# reusable 'executor' object for jobs
executors:
go:
docker:
- image: circleci/golang:1.11.4
environment:
- TEST_RESULTS: /tmp/test-results # path to where test results are saved
references:
images:
go: &GOLANG_IMAGE circleci/golang:1.11.4
middleman: &MIDDLEMAN_IMAGE hashicorp/middleman-hashicorp:0.3.35
ember: &EMBER_IMAGE circleci/node:8-browsers
# reusable 'commands' to be added as a step in jobs
commands:
integration-test:
description: Run integration tests
parameters:
version:
description: what branch/version/tag to checkout
type: string
default: master
checkout-url:
description: HTTPS checkout URL (SSH checkout if using SSH key)
type: string
checkout-path:
description: path to checkout code
type: string
test-command:
description: command to run tests
type: string
steps:
- run: git clone << parameters.checkout-url >> --branch << parameters.version >> << parameters.checkout-path >>
# get consul binary
- attach_workspace:
at: /go/bin
# make dev build of nomad
- run:
command: make dev
working_directory: << parameters.checkout-path >>
paths:
test-results: &TEST_RESULTS_DIR /tmp/test-results
- run:
name: install junit and setup test path
command: |
go get github.com/jstemmer/go-junit-report
mkdir -p /tmp/test-results
# run integration tests
- run:
command: << parameters.test-command >> | tee ${TEST_RESULTS}/results.out
working_directory: << parameters.checkout-path >>
# generate XML results
- run:
command: go-junit-report < ${TEST_RESULTS}/results.out > ${TEST_RESULTS}/results.xml
when: always
# store test results for CircleCI
- store_test_results:
path: /tmp/test-results
cache:
yarn: &YARN_CACHE_KEY consul-ui-v1-{{ checksum "ui-v2/yarn.lock" }}
rubygem: &RUBYGEM_CACHE_KEY static-site-gems-v1-{{ checksum "Gemfile.lock" }}
environment: &ENVIRONMENT
TEST_RESULTS_DIR: *TEST_RESULTS_DIR
GOTESTSUM_RELEASE: 0.3.3
EMAIL: noreply@hashicorp.com
GIT_AUTHOR_NAME: circleci-consul
GIT_COMMITTER_NAME: circleci-consul
jobs:
dev-build:
executor: go
docker:
- image: *GOLANG_IMAGE
working_directory: /go/src/github.com/hashicorp/consul
steps:
- checkout
@ -80,40 +43,64 @@ jobs:
# Nomad 0.8 builds on go0.10
# Run integration tests on nomad/v0.8.7
nomad-integration-0_8:
docker:
- image: circleci/golang:1.10
environment:
- TEST_RESULTS: /tmp/test-results
steps:
- integration-test:
version: v0.8.7
checkout-url: https://github.com/hashicorp/nomad.git
checkout-path: /go/src/github.com/hashicorp/nomad
test-command: go test -v ./command/agent/consul -run TestConsul
docker:
- image: circleci/golang:1.10
environment:
<<: *ENVIRONMENT
NOMAD_WORKING_DIR: &NOMAD_WORKING_DIR /go/src/github.com/hashicorp/nomad
NOMAD_VERSION: v0.8.7
steps: &NOMAD_INTEGRATION_TEST_STEPS
- run: git clone https://github.com/hashicorp/nomad.git --branch ${NOMAD_VERSION} ${NOMAD_WORKING_DIR}
# get consul binary
- attach_workspace:
at: /go/bin
# make test result directory
- run: mkdir -p $TEST_RESULTS_DIR
# make dev build of nomad
- run:
command: make dev
working_directory: *NOMAD_WORKING_DIR
# update gotestsum
- run: curl -sSL "https://github.com/gotestyourself/gotestsum/releases/download/v${GOTESTSUM_RELEASE}/gotestsum_${GOTESTSUM_RELEASE}_linux_amd64.tar.gz" | tar --overwrite -xz -C /usr/local/bin gotestsum
# run integration tests
- run:
command: gotestsum --format=short-verbose --junitfile $TEST_RESULTS_DIR/results.xml -- ./command/agent/consul -run TestConsul
working_directory: *NOMAD_WORKING_DIR
# store test results for CircleCI
- store_test_results:
path: *TEST_RESULTS_DIR
- store_artifacts:
path: *TEST_RESULTS_DIR
# run integration tests on nomad/master
nomad-integration-master:
executor: go
steps:
- integration-test:
version: master
checkout-url: https://github.com/hashicorp/nomad.git
checkout-path: /go/src/github.com/hashicorp/nomad
test-command: go test -v ./command/agent/consul -run TestConsul
docker:
- image: *GOLANG_IMAGE
environment:
<<: *ENVIRONMENT
NOMAD_WORKING_DIR: /go/src/github.com/hashicorp/nomad
NOMAD_VERSION: master
steps: *NOMAD_INTEGRATION_TEST_STEPS
build-website:
# setting the working_directory along with the checkout path allows us to not have
# to cd into the website/ directory for commands
working_directory: ~/project/website
docker:
- image: hashicorp/middleman-hashicorp:0.3.35
- image: *MIDDLEMAN_IMAGE
steps:
- checkout:
path: ~/project
# restores gem cache
- restore_cache:
key: static-site-gems-v1-{{ checksum "Gemfile.lock" }}
key: *RUBYGEM_CACHE_KEY
- run:
name: install gems
@ -121,7 +108,7 @@ jobs:
# saves gem cache if we have changed the Gemfile
- save_cache:
key: static-site-gems-v1-{{ checksum "Gemfile.lock" }}
key: *RUBYGEM_CACHE_KEY
paths:
- ~/project/website/vendor/bundle
@ -136,31 +123,31 @@ jobs:
# build frontend yarn cache
frontend-cache:
docker:
- image: circleci/node:8
- image: *EMBER_IMAGE
steps:
- checkout
# cache yarn deps
- restore_cache:
key: consul-ui-v1-{{ checksum "ui-v2/yarn.lock" }}
key: *YARN_CACHE_KEY
- run:
name: install yarn packages
command: cd ui-v2 && yarn install
- save_cache:
key: consul-ui-v1-{{ checksum "ui-v2/yarn.lock" }}
key: *YARN_CACHE_KEY
paths:
- ui-v2/node_modules
# build ember so frontend tests run faster
ember-build:
docker:
- image: circleci/node:8
- image: *EMBER_IMAGE
steps:
- checkout
- restore_cache:
key: consul-ui-v1-{{ checksum "ui-v2/yarn.lock" }}
key: *YARN_CACHE_KEY
- run: cd ui-v2 && yarn build-ci --output-path=dist
# saves the build to a workspace to be passed to a downstream job
@ -172,7 +159,7 @@ jobs:
# run ember frontend tests
ember-test:
docker:
- image: circleci/node:8-browsers
- image: *EMBER_IMAGE
environment:
EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam
EMBER_TEST_REPORT: test-results/report.xml #outputs test report for CircleCI test summary
@ -180,7 +167,7 @@ jobs:
steps:
- checkout
- restore_cache:
key: consul-ui-v1-{{ checksum "ui-v2/yarn.lock" }}
key: *YARN_CACHE_KEY
- attach_workspace:
at: ui-v2
- run:
@ -191,12 +178,12 @@ jobs:
workflows:
version: 2
test-apis:
test-integrations:
jobs:
- dev-build
- nomad-integration-master:
requires:
- dev-build
- dev-build
- nomad-integration-0_8:
requires:
- dev-build