mirror of https://github.com/status-im/consul.git
219 lines
6.0 KiB
YAML
219 lines
6.0 KiB
YAML
version: 2.1
|
|
|
|
# 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
|
|
|
|
# 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 >>
|
|
|
|
- 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
|
|
|
|
|
|
jobs:
|
|
dev-build:
|
|
executor: go
|
|
working_directory: /go/src/github.com/hashicorp/consul
|
|
steps:
|
|
- checkout
|
|
- run: make dev
|
|
|
|
# save dev build to CircleCI
|
|
- store_artifacts:
|
|
path: /go/bin/consul
|
|
|
|
# save dev build to pass to downstream jobs
|
|
- persist_to_workspace:
|
|
root: /go/bin
|
|
paths:
|
|
- consul
|
|
|
|
# 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
|
|
|
|
# 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
|
|
|
|
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
|
|
steps:
|
|
- checkout:
|
|
path: ~/project
|
|
|
|
# restores gem cache
|
|
- restore_cache:
|
|
key: static-site-gems-v1-{{ checksum "Gemfile.lock" }}
|
|
|
|
- run:
|
|
name: install gems
|
|
command: bundle check || bundle install --path vendor/bundle --retry=3
|
|
|
|
# saves gem cache if we have changed the Gemfile
|
|
- save_cache:
|
|
key: static-site-gems-v1-{{ checksum "Gemfile.lock" }}
|
|
paths:
|
|
- ~/project/website/vendor/bundle
|
|
|
|
- run:
|
|
name: middleman build
|
|
command: bundle exec middleman build
|
|
|
|
- run:
|
|
name: website deploy
|
|
command: ./scripts/deploy.sh
|
|
|
|
# build frontend yarn cache
|
|
frontend-cache:
|
|
docker:
|
|
- image: circleci/node:8
|
|
steps:
|
|
- checkout
|
|
|
|
# cache yarn deps
|
|
- restore_cache:
|
|
key: consul-ui-v1-{{ checksum "ui-v2/yarn.lock" }}
|
|
|
|
- run:
|
|
name: install yarn packages
|
|
command: cd ui-v2 && yarn install
|
|
|
|
- save_cache:
|
|
key: consul-ui-v1-{{ checksum "ui-v2/yarn.lock" }}
|
|
paths:
|
|
- ui-v2/node_modules
|
|
|
|
# build ember so frontend tests run faster
|
|
ember-build:
|
|
docker:
|
|
- image: circleci/node:8
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: consul-ui-v1-{{ checksum "ui-v2/yarn.lock" }}
|
|
- run: cd ui-v2 && yarn build-ci --output-path=dist
|
|
|
|
# saves the build to a workspace to be passed to a downstream job
|
|
- persist_to_workspace:
|
|
root: ui-v2
|
|
paths:
|
|
- dist
|
|
|
|
# run ember frontend tests
|
|
ember-test:
|
|
docker:
|
|
- image: circleci/node:8-browsers
|
|
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
|
|
parallelism: 4
|
|
steps:
|
|
- checkout
|
|
- restore_cache:
|
|
key: consul-ui-v1-{{ checksum "ui-v2/yarn.lock" }}
|
|
- attach_workspace:
|
|
at: ui-v2
|
|
- run:
|
|
working_directory: ui-v2
|
|
command: node_modules/ember-cli/bin/ember exam --split=$CIRCLE_NODE_TOTAL --partition=`expr $CIRCLE_NODE_INDEX + 1` --path dist --silent -r xunit
|
|
- store_test_results:
|
|
path: ui-v2/test-results
|
|
|
|
workflows:
|
|
version: 2
|
|
test-apis:
|
|
jobs:
|
|
- dev-build
|
|
- nomad-integration-master:
|
|
requires:
|
|
- dev-build
|
|
- nomad-integration-0_8:
|
|
requires:
|
|
- dev-build
|
|
website:
|
|
jobs:
|
|
- build-website:
|
|
context: static-sites
|
|
filters:
|
|
branches:
|
|
only: stable-website
|
|
frontend:
|
|
jobs:
|
|
- frontend-cache
|
|
- ember-build:
|
|
requires:
|
|
- frontend-cache
|
|
- ember-test:
|
|
requires:
|
|
- ember-build
|