remove redundant change entries
[tor.git] / .gitlab-ci.yml
blob5f8f46652fb9ebead5cbd277621869e64b5b93f9
1 ####
2 # DO NOT EDIT THIS FILE IN MASTER.  ONLY EDIT IT IN THE OLDEST SUPPORTED
3 # BRANCH, THEN MERGE FORWARD.
4 ####
6 # This file controls how gitlab validates Tor commits and merge requests.
8 # It is primarily based on a set of scripts and configurations by
9 # Hans-Christoph Steiner.  It only copies parts of those scripts and
10 # configurations for now.  If you want a new piece of functionality
11 # (more debians, more fedoras, android support) then you shouldn't
12 # start from scratch: have a look at the original ticket, at
13 # https://gitlab.torproject.org/tpo/core/tor/-/issues/32193 !
15 # The file to copy from is
16 # https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/96/diffs#diff-content-587d266bb27a4dc3022bbed44dfa19849df3044c
18 # Having said that, if there is anything really stupid here, don't
19 # blame it on Hans-Christoph! Tor probably added it on their own.
21 # Copyright 2020, The Tor Project, Inc.
22 # See LICENSE for licence information.
24 # These variables are set everywhere, unconditionally.
25 variables:
26   TERM: "ansi"
27   DEBUG_CI: "yes"
29 # This template is for exporting ephemeral things from the scripts.  By
30 # convention we expect our scripts to copy stuff into artifacts/, rather than
31 # having a big list of files that be treated as artifacts.
32 .artifacts-template: &artifacts-template
33   artifacts:
34     name: "${CI_PROJECT_PATH}_${CI_JOB_STAGE}_${CI_COMMIT_REF_NAME}_${CI_COMMIT_SHA}"
35     expire_in: 1 week
36     when: always
37     paths:
38       - artifacts/
41 # This template is used for x86-64 builds.
42 .x86-64-template: &x86-64-template
43   tags:
44     - amd64
45     - physical
47 # This template should be usable on any system that's based on apt.
48 .apt-template: &apt-template |
49       export LC_ALL=C.UTF-8
50       echo Etc/UTC > /etc/timezone
51       mkdir -p apt-cache
52       export APT_CACHE_DIR="$(pwd)/apt-cache"
53       rm -f /etc/apt/apt.conf.d/docker-clean
54       echo 'quiet "1";' \
55            'Acquire::Retries "20";' \
56            'APT::Install-Recommends "0";' \
57            'APT::Install-Suggests "0";' \
58            'APT::Get::Assume-Yes "true";' \
59            'Dpkg::Use-Pty "0";' \
60            "Dir::Cache::Archives \"${APT_CACHE_DIR}\"; " \
61         >> /etc/apt/apt.conf.d/99gitlab
62       apt-get update -qq
63       apt-get upgrade -qy
65 # This template sets us up for Debian system in particular.
66 .debian-template: &debian-template
67   <<: *artifacts-template
68   <<: *x86-64-template
69   variables:
70     DEBIAN_FRONTEND: "noninteractive"
71   # TODO: Using "cache" in this way speeds up our downloads.  It would be
72   # even better, though, to start with a pre-upgraded debian image.
73   #
74   # TODO: Will we have to do this differently once we have more than one
75   # debian version that we're using?
76   cache:
77     key: apt
78     paths:
79       - apt-cache
80   before_script:
81     - *apt-template
82     # Install patches unconditionally.
83     - apt-get install
84         apt-utils
85         automake
86         build-essential
87         ca-certificates
88         file
89         git
90         libevent-dev
91         liblzma-dev
92         libscrypt-dev
93         libseccomp-dev
94         libssl-dev
95         pkg-config
96         python3
97         zlib1g-dev
98     # Install patches that we only need for some use cases.
99     - if [ "$ASCIIDOC" = yes ]; then apt-get install asciidoc xmlto; fi
100     - if [ "$DOXYGEN" = yes ]; then apt-get install doxygen; fi
101     - if [ "$STEM" = yes ]; then apt-get install timelimit; fi
102     - if [ "$CC" = clang ]; then apt-get install clang; fi
103     - if [ "$NSS" = yes ]; then apt-get install libnss3 libnss3-dev; fi
104     # llvm-symbolizer for sanitizer backtrace
105     - if [ "$HARDENING" = yes ]; then apt-get install llvm; fi
106     # TODO: This next line should not be debian-only.
107     - if [ "$STEM" = yes ]; then git clone --depth 1 https://gitlab.torproject.org/tpo/network-health/stem.git ; export STEM_PATH="$(pwd)/stem"; fi
108     # TODO: This next line should not be debian-only.
109     - |
110       if [ "$CHUTNEY" = yes ]; then
111         # Use a fixed version of chutney to avoid surprise breakage.
112         CHUTNEY_SHALLOW_SINCE=2024-10-28
113         CHUTNEY_COMMIT=be881a1e7c4bc8038fa13fde4a7b24e5c56349c4
115         git clone --shallow-since "$CHUTNEY_SHALLOW_SINCE" https://gitlab.torproject.org/tpo/core/chutney.git
116         git -C ./chutney checkout "$CHUTNEY_COMMIT"
117         export CHUTNEY_PATH="$(pwd)/chutney"
118         # Have pip install chutney's python dependencies by installing chutney
119         # itself.
120         apt-get install python3-pip
121         pip3 install --user ./chutney
122       fi
123     - if [ "$TRACING" = yes ]; then apt install liblttng-ust-dev; fi
125 # Minimal check on debian: just make, make check.
127 debian-minimal:
128   image: containers.torproject.org/tpo/tpa/base-images/debian:bullseye
129   <<: *debian-template
130   script:
131     - ./scripts/ci/ci-driver.sh
133 # Minimal check on debian/i386: just make, make check.
135 debian-i386-minimal:
136   # TODO: Use a TPA-maintained image when there is one.
137   # See https://gitlab.torproject.org/tpo/tpa/base-images/-/issues/3
138   image:
139     name: i386/debian:bullseye
140     docker:
141       platform: linux/386
142   <<: *debian-template
143   script:
144     - ./scripts/ci/ci-driver.sh
145   tags:
146     - physical
148 #####
149 # Run "make check" with a hardened clang on debian stable.  This takes
150 # care of a hardening check, and a compile-with-clang check.
152 # TODO: This will be faster once we merge #40098 and #40099.
153 debian-hardened:
154   image: containers.torproject.org/tpo/tpa/base-images/debian:bullseye
155   <<: *debian-template
156   variables:
157     ALL_BUGS_ARE_FATAL: "yes"
158     HARDENING: "yes"
159     CC: "clang"
160   script:
161     - ./scripts/ci/ci-driver.sh
163 #####
164 # Distcheck on debian stable
165 debian-distcheck:
166   image: containers.torproject.org/tpo/tpa/base-images/debian:bullseye
167   <<: *debian-template
168   variables:
169     DISTCHECK: "yes"
170     CHECK: "no"
171   script:
172     - ./scripts/ci/ci-driver.sh
174 #####
175 # Documentation tests on debian stable: doxygen and asciidoc.
176 debian-docs:
177   image: containers.torproject.org/tpo/tpa/base-images/debian:bullseye
178   <<: *debian-template
179   variables:
180     DOXYGEN: "yes"
181     ASCIIDOC: "yes"
182     CHECK: "no"
183     RUN_STAGE_BUILD: "no"
184   script:
185     - ./scripts/ci/ci-driver.sh
187 #####
188 # Integration tests on debian stable: chutney and stem.
190 # TODO: It would be cool if this target didn't have to re-build tor, and
191 #       could instead re-use Tor from debian-minimal.  That can be done
192 #       with the 'artifacts' mechanism, in theory, but it would be good to
193 #       avoid having to have a system with hundreds of artifacts.
194 debian-integration:
195   image: containers.torproject.org/tpo/tpa/base-images/debian:bullseye
196   <<: *debian-template
197   variables:
198     CHECK: "no"
199     CHUTNEY: "yes"
200     CHUTNEY_MAKE_TARGET: "test-network-all"
201     STEM: "yes"
202     ALL_BUGS_ARE_FATAL: "yes"
203   script:
204     - ./scripts/ci/ci-driver.sh
206 #####
207 # Tracing build on Debian stable.
208 debian-tracing:
209   image: containers.torproject.org/tpo/tpa/base-images/debian:bullseye
210   <<: *debian-template
211   variables:
212     TRACING: "yes"
213     CHECK: "no"
214     DISTCHECK: "yes"
215   script:
216     - ./scripts/ci/ci-driver.sh
218 #####
219 # No-authority mode
220 debian-disable-dirauth:
221   image: containers.torproject.org/tpo/tpa/base-images/debian:bullseye
222   <<: *debian-template
223   variables:
224     DISABLE_DIRAUTH: "yes"
225   script:
226     - ./scripts/ci/ci-driver.sh
228 #####
229 # No-relay mode
230 debian-disable-relay:
231   image: containers.torproject.org/tpo/tpa/base-images/debian:bullseye
232   <<: *debian-template
233   variables:
234     DISABLE_RELAY: "yes"
235   script:
236     - ./scripts/ci/ci-driver.sh
238 #####
239 # GPL licensed mode, enables pow module
240 debian-gpl:
241   image: containers.torproject.org/tpo/tpa/base-images/debian:bullseye
242   <<: *debian-template
243   variables:
244     GPL: "yes"
245   script:
246     - ./scripts/ci/ci-driver.sh
248 #####
249 # NSS check on debian
250 debian-nss:
251   image: containers.torproject.org/tpo/tpa/base-images/debian:bullseye
252   <<: *debian-template
253   variables:
254     NSS: "yes"
255   script:
256     - ./scripts/ci/ci-driver.sh
258 #####
259 # Debian packaging triggers for maintenance branches
260 debian-packaging-0.4.5:
261   stage: deploy
262   trigger:
263     project: tpo/core/debian/tor
264     branch: debian-0.4.5
265   rules:
266     - if: $CI_PROJECT_NAMESPACE == "tpo/core" &&
267           $CI_COMMIT_BRANCH == "maint-0.4.5"
268 debian-packaging-0.4.6:
269   stage: deploy
270   trigger:
271     project: tpo/core/debian/tor
272     branch: debian-0.4.6
273   rules:
274     - if: $CI_PROJECT_NAMESPACE == "tpo/core" &&
275           $CI_COMMIT_BRANCH == "maint-0.4.6"
277 #####
278 # Run tests written in Rust, and run clippy on all Rust code here.
279 rust-latest:
280   image: rust:latest
281   <<: *debian-template
282   script:
283     - apt-get install llvm-dev libclang-dev clang
284     - rustup show
285     - cargo build --locked --verbose
286     - cargo test --verbose
287     - rustup component add clippy
288     - rustup show
289     - cargo clippy --all-features --all-targets -- -D warnings
290   after_script:
291     - cargo clean