#### # DO NOT EDIT THIS FILE IN MASTER. ONLY EDIT IT IN THE OLDEST SUPPORTED # BRANCH, THEN MERGE FORWARD. #### # This file controls how gitlab validates Tor commits and merge requests. # # It is primarily based on a set of scripts and configurations by # Hans-Christoph Steiner. It only copies parts of those scripts and # configurations for now. If you want a new piece of functionality # (more debians, more fedoras, android support) then you shouldn't # start from scratch: have a look at the original ticket, at # https://gitlab.torproject.org/tpo/core/tor/-/issues/32193 ! # # The file to copy from is # https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/96/diffs#diff-content-587d266bb27a4dc3022bbed44dfa19849df3044c # # Having said that, if there is anything really stupid here, don't # blame it on Hans-Christoph! Tor probably added it on their own. # # Copyright 2020, The Tor Project, Inc. # See LICENSE for licence information. # These variables are set everywhere, unconditionally. variables: TERM: "ansi" DEBUG_CI: "yes" # This template is for exporting ephemeral things from the scripts. By # convention we expect our scripts to copy stuff into artifacts/, rather than # having a big list of files that be treated as artifacts. .artifacts-template: &artifacts-template artifacts: name: "${CI_PROJECT_PATH}_${CI_JOB_STAGE}_${CI_COMMIT_REF_NAME}_${CI_COMMIT_SHA}" expire_in: 1 week when: always paths: - artifacts/ # This template is used for x86-64 builds. .x86-64-template: &x86-64-template tags: - amd64 - physical # This template should be usable on any system that's based on apt. .apt-template: &apt-template | export LC_ALL=C.UTF-8 echo Etc/UTC > /etc/timezone mkdir -p apt-cache export APT_CACHE_DIR="$(pwd)/apt-cache" rm -f /etc/apt/apt.conf.d/docker-clean echo 'quiet "1";' \ 'Acquire::Retries "20";' \ 'APT::Install-Recommends "0";' \ 'APT::Install-Suggests "0";' \ 'APT::Get::Assume-Yes "true";' \ 'Dpkg::Use-Pty "0";' \ "Dir::Cache::Archives \"${APT_CACHE_DIR}\"; " \ >> /etc/apt/apt.conf.d/99gitlab apt-get update -qq apt-get upgrade -qy # This template sets us up for Debian system in particular. .debian-template: &debian-template <<: *artifacts-template <<: *x86-64-template variables: DEBIAN_FRONTEND: "noninteractive" # TODO: Using "cache" in this way speeds up our downloads. It would be # even better, though, to start with a pre-upgraded debian image. # # TODO: Will we have to do this differently once we have more than one # debian version that we're using? cache: key: apt paths: - apt-cache before_script: - *apt-template # Install patches unconditionally. - apt-get install apt-utils automake build-essential ca-certificates file git libevent-dev liblzma-dev libscrypt-dev libseccomp-dev libssl-dev pkg-config python3 zlib1g-dev # Install patches that we only need for some use cases. - if [ "$ASCIIDOC" = yes ]; then apt-get install asciidoc xmlto; fi - if [ "$DOXYGEN" = yes ]; then apt-get install doxygen; fi - if [ "$STEM" = yes ]; then apt-get install timelimit; fi - if [ "$CC" = clang ]; then apt-get install clang; fi - if [ "$NSS" = yes ]; then apt-get install libnss3 libnss3-dev; fi # llvm-symbolizer for sanitizer backtrace - if [ "$HARDENING" = yes ]; then apt-get install llvm; fi # TODO: This next line should not be debian-only. - if [ "$STEM" = yes ]; then git clone --depth 1 https://gitlab.torproject.org/tpo/network-health/stem.git ; export STEM_PATH="$(pwd)/stem"; fi # TODO: This next line should not be debian-only. - | if [ "$CHUTNEY" = yes ]; then git clone --depth 1 https://gitlab.torproject.org/tpo/core/chutney.git export CHUTNEY_PATH="$(pwd)/chutney" # Have pip install chutney's python dependencies by installing chutney # itself. apt-get install python3-pip pip3 install --user ./chutney fi - if [ "$TRACING" = yes ]; then apt install liblttng-ust-dev; fi # Minimal check on debian: just make, make check. # debian-minimal: image: debian:bullseye <<: *debian-template script: - ./scripts/ci/ci-driver.sh # Minimal check on debian/i386: just make, make check. # debian-i386-minimal: image: i386/debian:bullseye <<: *debian-template script: - ./scripts/ci/ci-driver.sh tags: - physical ##### # Run "make check" with a hardened clang on debian stable. This takes # care of a hardening check, and a compile-with-clang check. # # TODO: This will be faster once we merge #40098 and #40099. debian-hardened: image: debian:bullseye <<: *debian-template variables: ALL_BUGS_ARE_FATAL: "yes" HARDENING: "yes" CC: "clang" script: - ./scripts/ci/ci-driver.sh ##### # Distcheck on debian stable debian-distcheck: image: debian:bullseye <<: *debian-template variables: DISTCHECK: "yes" CHECK: "no" script: - ./scripts/ci/ci-driver.sh ##### # Documentation tests on debian stable: doxygen and asciidoc. debian-docs: image: debian:bullseye <<: *debian-template variables: DOXYGEN: "yes" ASCIIDOC: "yes" CHECK: "no" RUN_STAGE_BUILD: "no" script: - ./scripts/ci/ci-driver.sh ##### # Integration tests on debian stable: chutney and stem. # # TODO: It would be cool if this target didn't have to re-build tor, and # could instead re-use Tor from debian-minimal. That can be done # with the 'artifacts' mechanism, in theory, but it would be good to # avoid having to have a system with hundreds of artifacts. debian-integration: image: debian:bullseye <<: *debian-template variables: CHECK: "no" CHUTNEY: "yes" CHUTNEY_MAKE_TARGET: "test-network-all" STEM: "yes" ALL_BUGS_ARE_FATAL: "yes" script: - ./scripts/ci/ci-driver.sh ##### # Tracing build on Debian stable. debian-tracing: image: debian:bullseye <<: *debian-template variables: TRACING: "yes" CHECK: "no" DISTCHECK: "yes" script: - ./scripts/ci/ci-driver.sh ##### # No-authority mode debian-disable-dirauth: image: debian:bullseye <<: *debian-template variables: DISABLE_DIRAUTH: "yes" script: - ./scripts/ci/ci-driver.sh ##### # No-relay mode debian-disable-relay: image: debian:bullseye <<: *debian-template variables: DISABLE_RELAY: "yes" script: - ./scripts/ci/ci-driver.sh ##### # GPL licensed mode, enables pow module debian-gpl: image: debian:bullseye <<: *debian-template variables: GPL: "yes" script: - ./scripts/ci/ci-driver.sh ##### # NSS check on debian debian-nss: image: debian:bullseye <<: *debian-template variables: NSS: "yes" script: - ./scripts/ci/ci-driver.sh ##### # Debian packaging triggers for maintenance branches debian-packaging-0.4.5: stage: deploy trigger: project: tpo/core/debian/tor branch: debian-0.4.5 rules: - if: $CI_PROJECT_NAMESPACE == "tpo/core" && $CI_COMMIT_BRANCH == "maint-0.4.5" debian-packaging-0.4.6: stage: deploy trigger: project: tpo/core/debian/tor branch: debian-0.4.6 rules: - if: $CI_PROJECT_NAMESPACE == "tpo/core" && $CI_COMMIT_BRANCH == "maint-0.4.6" ##### # Run tests written in Rust, and run clippy on all Rust code here. rust-latest: image: rust:latest <<: *debian-template script: - apt-get install llvm-dev libclang-dev clang - rustup show - cargo build --locked --verbose - cargo test --verbose - rustup component add clippy - rustup show - cargo clippy --all-features --all-targets -- -D warnings after_script: - cargo clean