# 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 - run: name: Deploy tags command: ./.circleci/get-deploy-tags.sh # 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