influxdb/.circleci/config.yml

495 lines
17 KiB
YAML

version: "2.1"
commands:
install_rust_compiler:
description: >
This will install the rust compiler with the rust tools.
steps:
- run:
name: Install clang
command: sudo apt-get install -y --no-install-recommends clang
- run:
name: Install rust compiler
command: |
curl https://sh.rustup.rs -sSf | \
sh -s -- --default-toolchain stable -y
echo 'source $HOME/.cargo/env' >> $BASH_ENV
jobs:
litmus_daily:
machine: true
steps:
- attach_workspace:
at: ~/project
- run: docker login -u=$QUAY_USER -p=$QUAY_PASS quay.io
- run: docker run --entrypoint "./run_litmus_tests_oss.sh" -e ONE_TEST=src/cloud/rest_api/smoke/test_smoke.py -e BINARYPATH=/Litmus/result/bin/linux/influxd -e BOLTPATH=/Litmus/result/influxd_test/influxd.bolt -e ENGINEPATH=/Litmus/result/influxd_test --net host -v /var/run/docker.sock:/var/run/docker.sock -v ~/project:/Litmus/result quay.io/influxdb/litmus:latest
- run:
name: Litmus Smoke Tests Success
when: on_success
command: bash ~/project/etc/litmus_success_notify.sh Smoke
path: ~/project
- run:
name: Litmus Smoke Tests Fail
when: on_fail
command: bash ~/project/etc/litmus_fail_notify.sh Smoke
- store_artifacts:
path: ~/project
destination: raw-daily-output
- store_test_results:
path: ~/project
destination: daily-junit
litmus_nightly:
machine: true
steps:
- attach_workspace:
at: ~/project
- run: docker login -u=$QUAY_USER -p=$QUAY_PASS quay.io
- run: docker run --entrypoint "./run_litmus_tests_oss.sh" -e TEST_LIST=tests_lists/gateway_api_tests.list -e DOCKERIMAGE=true --net host -v /var/run/docker.sock:/var/run/docker.sock -v ~/project:/Litmus/result quay.io/influxdb/litmus:latest
- run:
name: Litmus Nightly Tests Success
when: on_success
command: bash ~/project/etc/litmus_success_notify.sh Nightly
- run:
name: Litmus Nightly Tests Fail
when: on_fail
command: bash ~/project/etc/litmus_fail_notify.sh Nightly
- store_artifacts:
path: ~/project
destination: raw-nightly-output
- store_test_results:
path: ~/project
destination: nightly-junit
e2e:
docker:
- image: circleci/golang:1.13-node-browsers
environment:
GOCACHE: /tmp/go-cache
GOFLAGS: "-mod=readonly -p=4" # Go on Circle thinks 32 CPUs are available, but there aren't.
working_directory: /go/src/github.com/influxdata/influxdb
steps:
- checkout
# Speed up `make build` by restoring caches from previous runs.
- restore_cache:
name: Restoring GOCACHE
keys:
- influxdb-gocache- # Just match the most recent Go cache.
- restore_cache:
name: Restoring GOPATH/pkg/mod
keys:
- influxdb-gomod-{{ checksum "go.sum" }} # Just match the go.sum checksum cache.
- run: sudo apt-get install -y netcat-openbsd
- run: sudo apt-get install -y bzr
- install_rust_compiler
- run: make protoc
- run: make build
- run:
command: ./bin/linux/influxd --store=memory --e2e-testing=true
background: true
- run: make e2e
- store_test_results:
path: ui/junit-results
destination: junit-results
- store_artifacts:
path: ui/cypress/videos
destination: videos
- store_artifacts:
path: ui/cypress/screenshots
destination: screenshots
selenium_accept:
docker:
- image: circleci/node:13.0.1-stretch-browsers
- image: quay.io/influxdb/influx:nightly
command: [--e2e-testing=true]
steps:
- checkout
- run:
name: Environment check
command: |
git --version
node --version && npm --version
docker --version
google-chrome --version && which google-chrome && chromedriver --version && which chromedriver
timeout 300 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:9999)" != "200" ]]; do sleep 5; done' || false
- run:
name: Checkout Tests
command: git clone --single-branch --branch 2.0-Beta https://github.com/bonitoo-io/selenium-accept-infl2.git
- run:
name: Selenium tests
command: |
set +e
cd selenium-accept-infl2
npm install
npm test; TEST_RESULT=$?
npm run report:html
npm run report:junit
mkdir -p ~/test-results/cucumber
mkdir -p ~/artifacts/html
cp ~/project/selenium-accept-infl2/report/cucumber_report.html ~/artifacts/html/cucumber_report.html
cp ~/project/selenium-accept-infl2/report/cucumber_junit.xml ~/test-results/cucumber/report.xml
cp ~/project/selenium-accept-infl2/report/cucumber_junit.xml ~/artifacts/report.xml
cp -r ~/project/selenium-accept-infl2/screenshots ~/artifacts
ls -al
exit $TEST_RESULT
- store_test_results:
path: ~/test-results
- store_artifacts:
path: ~/artifacts
jstest:
docker:
- image: circleci/golang:1.13-node-browsers
working_directory: /go/src/github.com/influxdata/influxdb
parallelism: 8
steps:
- checkout
- restore_cache:
keys:
- 'yarn-cached-packages-{{ checksum "yarn.lock" }}'
name: "Restore Yarn Package Cache"
- run:
command: |
set +e
cd ui
yarn install --frozen-lockfile
yarn prettier
name: "Install Dependencies"
- run: make ui_client
- run:
name: parallel jest tests
command: |
set +e
cd ui
TESTFILES=$(circleci tests glob "src/**/*.test.ts*" | circleci tests split --split-by=timings)
yarn test:circleci $TESTFILES
- store_test_results:
path: coverage
- store_artifacts:
path: coverage
destination: raw-test-output
- save_cache:
key: 'yarn-cached-packages-{{ checksum "yarn.lock" }}'
name: "Save Yarn Package Cache"
paths:
- ~/.cache/yarn
jslint:
docker:
- image: circleci/golang:1.13-node-browsers
working_directory: /go/src/github.com/influxdata/influxdb
parallelism: 8
steps:
- checkout
- restore_cache:
keys:
- 'yarn-cached-packages-{{ checksum "yarn.lock" }}'
name: "Restore Yarn Package Cache"
- run:
command: |
set +e
cd ui
yarn install --frozen-lockfile
name: "Install Dependencies"
- run: make ui_client
- run:
name: parallel eslint
command: |
set +e
cd ui
TESTFILES=$(circleci tests glob "src/**/*.ts*" "cypress/**/*.ts*" | circleci tests split --split-by=filesize)
yarn eslint:circleci $TESTFILES
- save_cache:
key: 'yarn-cached-packages-{{ checksum "yarn.lock" }}'
name: "Save Yarn Package Cache"
paths:
- ~/.cache/yarn
gotest:
docker:
- image: circleci/golang:1.13
environment:
GOCACHE: /tmp/go-cache
GOFLAGS: "-mod=readonly -p=2" # Go on Circle thinks 32 CPUs are available, but there aren't.
TEST_RESULTS: /tmp/test-results
working_directory: /go/src/github.com/influxdata/influxdb
parallelism: 8
steps:
- checkout
# Populate GOCACHE.
- restore_cache:
name: Restoring GOCACHE
keys:
- influxdb-gocache-{{ .Branch }}-{{ .Revision }} # Matches when retrying a single run.
- influxdb-gocache-{{ .Branch }}- # Matches a new commit on an existing branch.
- influxdb-gocache- # Matches a new branch.
# Populate GOPATH/pkg.
- restore_cache:
name: Restoring GOPATH/pkg/mod
keys:
- influxdb-gomod-{{ checksum "go.sum" }} # Matches based on go.sum checksum.
- run: sudo apt-get install -y bzr
- install_rust_compiler
- run: mkdir -p $TEST_RESULTS
- run: make test-go # This uses the test cache so it may succeed or fail quickly.
- run:
name: parallel go race tests
command: |
set +e
# filter internal/promqltests because it has special go.mod
TESTFILES=$(go list ./... | grep -v internal/promqltests | circleci tests split --split-by=timings)
echo $TESTFILES
GOTRACEBACK=all GO111MODULE=on FLUX_PARSER_TYPE=rust CGO_LDFLAGS="$(cat .cgo_ldflags)" gotestsum --format standard-quiet --junitfile /tmp/test-results/gotestsum.xml -- -race -count=1 -tags 'libflux' $TESTFILES
- save_cache:
name: Saving GOCACHE
key: influxdb-gocache-{{ .Branch }}-{{ .Revision }}
paths:
- /tmp/go-cache
when: always
- save_cache:
name: Saving GOPATH/pkg/mod
key: influxdb-gomod-{{ checksum "go.sum" }}
paths:
- /go/pkg/mod
when: always
- store_artifacts: # Upload test summary for display in Artifacts: https://circleci.com/docs/2.0/artifacts/
path: /tmp/test-results
destination: raw-test-output
- store_test_results: # Upload test results for display in Test Summary: https://circleci.com/docs/2.0/collect-test-data/
path: /tmp/test-results
golint:
docker:
- image: circleci/golang:1.13
environment:
GOCACHE: /tmp/go-cache
GOFLAGS: "-mod=readonly -p=2" # Go on Circle thinks 32 CPUs are available, but there aren't.
TEST_RESULTS: /tmp/test-results
working_directory: /go/src/github.com/influxdata/influxdb
steps:
- checkout
# Populate GOCACHE.
- restore_cache:
name: Restoring GOCACHE
keys:
- influxdb-gocache-{{ .Branch }}-{{ .Revision }} # Matches when retrying a single run.
- influxdb-gocache-{{ .Branch }}- # Matches a new commit on an existing branch.
- influxdb-gocache- # Matches a new branch.
# Populate GOPATH/pkg.
- restore_cache:
name: Restoring GOPATH/pkg/mod
keys:
- influxdb-gomod-{{ checksum "go.sum" }} # Matches based on go.sum checksum.
- run: sudo apt-get install -y bzr
- install_rust_compiler
- run: mkdir -p $TEST_RESULTS
- run: |
# this is not in a seperate bash script because it isn't meant to be run on local.
# it just checks to make sure that the same major/minor version of go is used in the mod file as on ci
# to prevent accidentally checking in a wrong go mod version.
gomodversiondiff=$( go mod edit -go=$( go version | sed -n 's/^.*go\([0-9]*.[0-9]*\).*$/\1/p') -print |diff - go.mod )
if [ "$gomodversiondiff" ]
then
echo unexpected go version $gomodversiondiff
exit 1
fi
- run: make vet
- run: make checkfmt
- run: make checktidy
- run: GO111MODULE=on go mod vendor # staticcheck looks in vendor for dependencies.
- run: GO111MODULE=on go install honnef.co/go/tools/cmd/staticcheck # Install staticcheck from the version we specify in go.mod.
- run: GO111MODULE=on staticcheck ./...
- save_cache:
name: Saving GOCACHE
key: influxdb-gocache-{{ .Branch }}-{{ .Revision }}
paths:
- /tmp/go-cache
when: always
- save_cache:
name: Saving GOPATH/pkg/mod
key: influxdb-gomod-{{ checksum "go.sum" }}
paths:
- /go/pkg/mod
when: always
- store_artifacts:
path: /tmp/test-results
destination: raw-test-output
- store_test_results:
path: /tmp/test-results
build:
docker:
- image: circleci/golang:1.13-node-browsers
environment:
GOCACHE: /tmp/go-cache
GOFLAGS: "-mod=readonly -p=4" # Go on Circle thinks 32 CPUs are available, but there aren't.
working_directory: /go/src/github.com/influxdata/influxdb
steps:
- checkout
- run: sudo apt-get install -y bzr
- install_rust_compiler
- run: make checkcommit
# Speed up `make build` by restoring caches from previous runs.
- restore_cache:
name: Restoring GOCACHE
keys:
- influxdb-gocache- # Just match the most recent Go cache.
- restore_cache:
name: Restoring GOPATH/pkg/mod
keys:
- influxdb-gomod-{{ checksum "go.sum" }} # Just match the go.sum checksum cache.
- run: make protoc
- run: make build
- persist_to_workspace:
root: .
paths:
- project
- bin/linux/influxd
- bin/linux/influx
- etc/litmus_success_notify.sh
- etc/litmus_fail_notify.sh
deploy-nightly:
docker:
- image: circleci/golang:1.13-node-browsers
environment:
GOCACHE: /tmp/go-cache
GOFLAGS: "-mod=readonly -p=4" # Go on Circle thinks 32 CPUs are available, but there aren't.
working_directory: /go/src/github.com/influxdata/influxdb
steps:
- checkout
# Speed up `make nightly` by restoring caches from previous runs.
- restore_cache:
name: Restoring GOCACHE
keys:
- influxdb-gocache- # Just match the most recent Go cache.
- restore_cache:
name: Restoring GOPATH/pkg/mod
keys:
- influxdb-gomod-{{ checksum "go.sum" }} # Just match the go.sum checksum cache.
- setup_remote_docker
- run:
name: "Docker Login"
command: docker login -u "$QUAY_USER" -p $QUAY_PASS quay.io
- run: sudo apt-get install -y bzr
- run: make protoc # installs protoc
- run:
name: "Build nightly"
command: make nightly
- persist_to_workspace:
root: .
paths:
- etc/litmus_success_notify.sh
- etc/litmus_fail_notify.sh
release:
docker:
- image: circleci/golang:1.13-node-browsers
environment:
GOCACHE: /tmp/go-cache
GOFLAGS: "-mod=readonly -p=4" # Go on Circle thinks 32 CPUs are available, but there aren't.
DOCKER_VERSION: 2.0.0-beta
working_directory: /go/src/github.com/influxdata/influxdb
steps:
- checkout
# Speed up `make nightly` by restoring caches from previous runs.
- restore_cache:
name: Restoring GOCACHE
keys:
- influxdb-gocache- # Just match the most recent Go cache.
- restore_cache:
name: Restoring GOPATH/pkg/mod
keys:
- influxdb-gomod-{{ checksum "go.sum" }} # Just match the go.sum checksum cache.
- setup_remote_docker
- run:
name: "Docker Login"
command: docker login -u "$QUAY_USER" -p $QUAY_PASS quay.io
- run: sudo apt-get install -y bzr
- run: make protoc # installs protoc
- run:
name: "Build release"
command: make release
workflows:
version: 2
build:
jobs:
- gotest
- golint
- jstest
- jslint
- build
- litmus_daily:
requires:
- build
filters:
branches:
only: /^(?!pull\/).*$/
e2e:
jobs:
- e2e
nightly:
triggers:
- schedule:
cron: "0 7 * * *"
filters:
branches:
only:
- master
jobs:
- gotest
- golint
- jstest
- jslint
- deploy-nightly:
requires:
- gotest
- golint
- jstest
- jslint
filters:
branches:
only: master
- litmus_nightly:
requires:
- deploy-nightly
- selenium_accept:
requires:
- deploy-nightly
release:
jobs:
- gotest:
filters:
branches:
ignore: /.*/
tags:
only: /^v[0-9]+\.[0-9]+\.[0-9]+-(alpha|beta)\.[0-9]+$/
- golint:
filters:
branches:
ignore: /.*/
tags:
only: /^v[0-9]+\.[0-9]+\.[0-9]+-(alpha|beta)\.[0-9]+$/
- jstest:
filters:
branches:
ignore: /.*/
tags:
only: /^v[0-9]+\.[0-9]+\.[0-9]+-(alpha|beta)\.[0-9]+$/
- jslint:
filters:
branches:
ignore: /.*/
tags:
only: /^v[0-9]+\.[0-9]+\.[0-9]+-(alpha|beta)\.[0-9]+$/
- release:
requires:
- gotest
- golint
- jstest
- jslint
filters:
branches:
ignore: /.*/
tags:
only: /^v[0-9]+\.[0-9]+\.[0-9]+-(alpha|beta)\.[0-9]+$/