influxdb/.circleci/config.yml

180 lines
5.3 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

# CI Overview
# -----------
#
# Each night:
#
# A build image is created (ci_image) from `docker/Dockerfile.ci` and is
# pushed to `quay.io/influxdb/rust:ci`. This build image is then used to run
# the CI tasks for the day.
#
# CI runs for git branches ending in `/perf`:
#
# Runs tests, fmt, & lints and then compiles binaries using the "release"
# cargo target and pushes a container with the binary to
# `quay.io/influxdb/fusion` (see perf_image below).
#
# CI for all other branches is performed by the GitHub actions (see .github dir)
version: 2.1
commands:
rust_nightly:
description: Install nightly Rust toolchain
steps:
- run:
name: Install rust nightly-2020-11-19
command: rustup toolchain install nightly-2020-11-19
- run:
name: Install rustfmt and clippy for nightly-2020-11-19
command: rustup component add rustfmt clippy --toolchain nightly-2020-11-19
jobs:
fmt:
docker:
- image: quay.io/influxdb/rust:ci
steps:
- checkout
- rust_nightly
- run:
name: Rust fmt
command: cargo fmt --all -- --check
lint:
docker:
- image: quay.io/influxdb/rust:ci
steps:
- checkout
- rust_nightly
- run:
name: Clippy
command: cargo clippy --all-targets --workspace -- -D warnings
test:
docker:
- image: quay.io/influxdb/rust:ci
resource_class: xlarge # use of a smaller executor tends crashes on link
steps:
- checkout
- rust_nightly
- run:
name: Cargo test
command: cargo test --workspace
# Build a dev binary.
#
# Compiles a binary with the default ("dev") cargo profile from the iox source
# using the latest ci_image.
build:
docker:
- image: quay.io/influxdb/rust:ci
steps:
- checkout
- rust_nightly
- run:
name: Cargo build
command: cargo build --workspace
# Compile a cargo "release" profile binary for branches that end in `/perf`
#
# Uses the latest ci_image (influxdb/rust below) to build a release binary and
# copies it to a minimal container image based upon `rust:slim-buster`. This
# minimal image is then pushed to `quay.io/influxdb/fusion:${BRANCH}` with '/'
# repaced by '.' - as an example:
#
# git branch: dom/my-awesome-feature/perf
# container: quay.io/influxdb/fusion:dom.my-awesome-feature.perf
#
# Subsequent CI runs will overwrite the tag if you push more changes, so watch
# out for parallel CI runs!
#
# To change the contents of the build container, modify docker/Dockerfile.ci
# To change the final release container, modify docker/Dockerfile.perf
perf_image:
docker:
- image: quay.io/influxdb/rust:ci
steps:
- checkout
- rust_nightly
- run:
name: Cargo release build with target arch set for CRoaring
command: ROARING_ARCH=x86-64 cargo build --release
- setup_remote_docker:
docker_layer_caching: true
- run: |
sudo apt-get update
sudo apt-get install -y docker.io
- run: |
echo "$QUAY_PASS" | docker login quay.io --username $QUAY_USER --password-stdin
- run: |
BRANCH=$(git rev-parse --abbrev-ref HEAD | tr '/' '.')
docker build -t quay.io/influxdb/fusion:$BRANCH -f docker/Dockerfile.perf .
docker push quay.io/influxdb/fusion:$BRANCH
echo "export BRANCH=${BRANCH}" >> $BASH_ENV
- run:
name: Deploy tags
command: ./.circleci/get-deploy-tags.sh "${BRANCH}"
# Prepare the CI image used for other tasks.
#
# A nightly job (scheduled below in the `workflows` section) to build the CI
# image (influxdb/rust) used for the rest of the checks.
#
# To modify the contents of the CI image, update docker/Dockerfile.ci
ci_image:
machine: true
resource_class: xlarge
steps:
- checkout
- run: |
echo "$QUAY_PASS" | docker login quay.io --username $QUAY_USER --password-stdin
- run: |
COMMIT_SHA=$(git rev-parse --short HEAD)
docker build -t quay.io/influxdb/rust:$COMMIT_SHA -f docker/Dockerfile.ci .
docker tag quay.io/influxdb/rust:$COMMIT_SHA quay.io/influxdb/rust:ci
docker push quay.io/influxdb/rust:$COMMIT_SHA
docker push quay.io/influxdb/rust:ci
workflows:
version: 2
# Internal pipeline for perf builds.
#
# Filter ensures this only runs for git branches ending in `/perf`.
perf_build:
jobs:
- fmt:
filters:
branches:
only: /.*\/perf$/
- lint:
filters:
branches:
only: /.*\/perf$/
- test:
filters:
branches:
only: /.*\/perf$/
- build:
filters:
branches:
only: /.*\/perf$/
- perf_image:
filters:
branches:
only: /.*\/perf$/
requires: # Only do a release build if all tests have passed
- fmt
- lint
- test
- build
# Nightly rebuild of the build container
ci_image:
triggers:
- schedule:
cron: "0 5 * * *"
filters:
branches:
only:
- main
jobs:
- ci_image