stages: - check - build - test - deploy variables: # We don't need Husky to install the Git hooks for CI. CARGO_HUSKY_DONT_INSTALL_HOOKS: "true" # fs-mistrust doesn't like umask 0 FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: "true" default: before_script: # gitlab fetch strategy doesn't reset permissions - (while [ "$PWD" != / ]; do chmod go-w . && cd ..; done) check-editorconfig: stage: check image: mstruebing/editorconfig-checker script: - ec shellcheck: stage: check image: koalaman/shellcheck-alpine script: - apk add git bash - ./maint/shellcheck_all maint-checks: stage: check image: debian:stable-slim script: - apt-get update && apt-get install -y python3-toml - ./maint/check_toposort - ./maint/add_warning --check crates/*/src/{lib,main}.rs rust-checks: # This is too slow (and the cacheing of the "cargo build" too flaky) to be a "check" stage: build image: rust:latest script: - rustup show - rustup component add rustfmt - ./maint/via-cargo-install-in-ci cargo-audit cargo-sort cargo-license - cargo fmt -- --check - ./maint/check_licenses - ./maint/cargo_audit - ./maint/cargo_sort - ./maint/check_tree cache: paths: - cargo-audit - cargo-sort - cargo-license rust-latest: stage: build image: rust:latest script: - rustup show - cargo build --locked --verbose --target x86_64-unknown-linux-gnu - cargo test --verbose --target x86_64-unknown-linux-gnu - rustup component add clippy - rustup show - cargo clippy --all-features --all-targets -- -D warnings - cargo build --verbose --release -p arti-bench --target x86_64-unknown-linux-gnu artifacts: paths: - target/x86_64-unknown-linux-gnu/debug/arti - target/x86_64-unknown-linux-gnu/release/arti-bench expire_in: 1 hours tags: - amd64 rust-latest-async-std-rustls: stage: build image: rust:latest script: - rustup show - rustup component add clippy - cd crates/arti-client && cargo clippy --no-default-features --features=async-std,rustls tags: - amd64 rust-nightly: stage: test image: rustlang/rust:nightly allow_failure: true script: - rustup show - cargo build --verbose --target x86_64-unknown-linux-gnu --all-features - cargo test --verbose --target x86_64-unknown-linux-gnu --all-features - rustup component add clippy # We check these extra warnings on CI only, since we don't want to forbid them while developing. # The --cfg allows us to write #![cfg_attr(ci_arti_nightly, allow(clippy::needless_borrow))] # and similar, for when nightly clippy has false positives. (There is no builtin # cfg flag for nightly, and a cargo "feature" would be bad with --all-features.) - (echo; cat clippy-nightly.toml) >>clippy.toml - cargo clippy --all-features --tests -- --cfg ci_arti_nightly -D clippy::dbg_macro -D clippy::print_stdout -D clippy::print_stderr - RUSTDOCFLAGS="-Dwarnings" cargo doc --all-features --document-private-items --no-deps tags: - amd64 coverage: stage: test image: rust:latest script: - apt-get update && apt-get install -y python3-pip python3-setuptools - pip3 install beautifulsoup4 lxml - rustup component add llvm-tools-preview - ./maint/via-cargo-install-in-ci grcov # Generate report - ./maint/with_coverage -f cobertura -o coverage.xml cargo test --verbose --all-features cache: paths: - grcov artifacts: reports: coverage_report: coverage_format: cobertura path: coverage.xml tags: - amd64 minimal-versions: stage: test image: rust:1.56 script: - rustup install nightly - ./maint/downgrade_dependencies - cargo build --verbose --target x86_64-unknown-linux-gnu --all-features - cargo test --verbose --target x86_64-unknown-linux-gnu --all-features tags: - amd64 build-repro: rules: - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG != null stage: build # If you upgrade this image, also change the one in docker_reproducible_build image: rust:1.59.0-alpine3.15 script: - apk add bash - ./maint/reproducible_build linux windows macos artifacts: paths: - arti-linux - arti-windows.exe - arti-macos expire_in: 1 day cache: paths: - osxcross/target tags: - tpa - amd64 integration: stage: test image: debian:stable-slim script: - apt update - apt install -y tor git python3 curl dnsutils - ./tests/chutney/setup proxy - ./tests/chutney/test - ./tests/chutney/stop-arti - RUST_LOG=debug target/x86_64-unknown-linux-gnu/release/arti-bench -c ./chutney/net/nodes/arti.toml --socks5 127.0.0.1:9008 -o benchmark_results.json - ./tests/chutney/teardown artifacts: paths: - benchmark_results.json tags: - amd64 coverage-aggregated: rules: - if: $CI_PIPELINE_SOURCE == "schedule" stage: test image: rust:latest needs: [] script: - apt update && apt install -y tor python3 python3-pip python3-setuptools curl # install deps for report generation - pip3 install beautifulsoup4 lxml - rustup component add llvm-tools-preview - cp grcov $CARGO_HOME/bin/ || cargo install grcov - cp $CARGO_HOME/bin/grcov . # Generate report - ./maint/coverage all cache: paths: - grcov artifacts: paths: - coverage tags: - amd64 pages: rules: - if: $CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_REF_NAME == "main" stage: deploy image: debian:stable-slim script: - apt update && apt install -y git # Export report as website, while keeping the existing public page - git fetch - git checkout origin/pages -- public/ - mv coverage public/ artifacts: paths: - public