xref: /freebsd/.cirrus.yml (revision e6475c8f353981baeddb544f5a9deb48956f2815)
1
2compute_engine_instance:
3  # Image list available via
4  # gcloud compute images list --project freebsd-org-cloud-dev --no-standard-images
5  platform: freebsd
6  image_project: freebsd-org-cloud-dev
7  image: freebsd-15-0-release-amd64-ufs
8  cpu: 8
9  memory: 8G
10  disk: 40
11
12env:
13  PKG_LEVEL: 1
14
15task:
16  matrix:
17  - name: amd64-llvm16 World and kernel build and boot smoke test (manual)
18    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
19    trigger_type: manual
20    env:
21      TARGET: amd64
22      TARGET_ARCH: amd64
23      TOOLCHAIN: llvm16
24      TOOLCHAIN_PKG: ${TOOLCHAIN}-lite
25  - name: amd64-llvm17 World and kernel build and boot smoke test (manual)
26    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
27    trigger_type: manual
28    env:
29      TARGET: amd64
30      TARGET_ARCH: amd64
31      TOOLCHAIN: llvm17
32      TOOLCHAIN_PKG: ${TOOLCHAIN}-lite
33  - name: amd64-llvm18 World and kernel build and boot smoke test (manual)
34    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
35    trigger_type: manual
36    env:
37      TARGET: amd64
38      TARGET_ARCH: amd64
39      TOOLCHAIN: llvm18
40      TOOLCHAIN_PKG: ${TOOLCHAIN}-lite
41  - name: amd64-llvm19 World and kernel build and boot smoke test
42    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
43    trigger_type: manual
44    env:
45      TARGET: amd64
46      TARGET_ARCH: amd64
47      TOOLCHAIN: llvm19
48      TOOLCHAIN_PKG: ${TOOLCHAIN}-lite
49  - name: amd64-llvm21 World and kernel build and boot smoke test
50    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src' || $CIRRUS_BRANCH =~ 'pull/.*'
51    env:
52      TARGET: amd64
53      TARGET_ARCH: amd64
54      TOOLCHAIN: llvm21
55      TOOLCHAIN_PKG: ${TOOLCHAIN}-lite
56  - name: arm64-llvm16 World and kernel build and boot smoke test (manual)
57    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
58    trigger_type: manual
59    env:
60      TARGET: arm64
61      TARGET_ARCH: aarch64
62      TOOLCHAIN: llvm16
63      TOOLCHAIN_PKG: ${TOOLCHAIN}
64  - name: arm64-llvm17 World and kernel build and boot smoke test (manual)
65    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
66    trigger_type: manual
67    env:
68      TARGET: arm64
69      TARGET_ARCH: aarch64
70      TOOLCHAIN: llvm17
71      TOOLCHAIN_PKG: ${TOOLCHAIN}
72  - name: arm64-llvm18 World and kernel build and boot smoke test (manual)
73    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
74    trigger_type: manual
75    env:
76      TARGET: arm64
77      TARGET_ARCH: aarch64
78      TOOLCHAIN: llvm18
79      TOOLCHAIN_PKG: ${TOOLCHAIN}
80  - name: arm64-llvm19 World and kernel build and boot smoke test (manual)
81    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
82    trigger_type: manual
83    env:
84      TARGET: arm64
85      TARGET_ARCH: aarch64
86      TOOLCHAIN: llvm19
87      TOOLCHAIN_PKG: ${TOOLCHAIN}
88  - name: arm64-llvm21 World and kernel build and boot smoke test (manual)
89    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
90    trigger_type: manual
91    env:
92      TARGET: arm64
93      TARGET_ARCH: aarch64
94      TOOLCHAIN: llvm21
95      TOOLCHAIN_PKG: ${TOOLCHAIN}
96  - name: amd64-gcc12 World and kernel build and boot smoke test (manual)
97    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
98    trigger_type: manual
99    env:
100      TARGET: amd64
101      TARGET_ARCH: amd64
102      TOOLCHAIN: amd64-gcc12
103      TOOLCHAIN_PKG: ${TOOLCHAIN}
104      EXTRA_MAKE_FLAGS: -s
105  - name: amd64-gcc13 World and kernel build and boot smoke test (manual)
106    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
107    trigger_type: manual
108    env:
109      TARGET: amd64
110      TARGET_ARCH: amd64
111      TOOLCHAIN: amd64-gcc13
112      TOOLCHAIN_PKG: ${TOOLCHAIN}
113      EXTRA_MAKE_FLAGS: -s
114  - name: amd64-gcc14 World and kernel build and boot smoke test (manual)
115    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
116    trigger_type: manual
117    env:
118      TARGET: amd64
119      TARGET_ARCH: amd64
120      TOOLCHAIN: amd64-gcc14
121      TOOLCHAIN_PKG: ${TOOLCHAIN}
122      EXTRA_MAKE_FLAGS: -s
123  - name: aarch64-gcc12 World and kernel build and boot smoke test (manual)
124    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
125    trigger_type: manual
126    env:
127      TARGET: arm64
128      TARGET_ARCH: aarch64
129      TOOLCHAIN: aarch64-gcc12
130      TOOLCHAIN_PKG: ${TOOLCHAIN}
131      EXTRA_MAKE_FLAGS: -s
132  - name: aarch64-gcc13 World and kernel build and boot smoke test (manual)
133    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
134    trigger_type: manual
135    env:
136      TARGET: arm64
137      TARGET_ARCH: aarch64
138      TOOLCHAIN: aarch64-gcc13
139      TOOLCHAIN_PKG: ${TOOLCHAIN}
140      EXTRA_MAKE_FLAGS: -s
141  - name: aarch64-gcc14 World and kernel build and boot smoke test (manual)
142    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
143    trigger_type: manual
144    env:
145      TARGET: arm64
146      TARGET_ARCH: aarch64
147      TOOLCHAIN: aarch64-gcc14
148      TOOLCHAIN_PKG: ${TOOLCHAIN}
149      EXTRA_MAKE_FLAGS: -s
150  - name: amd64-gcc14 World and kernel build and boot smoke test (FreeBSD repo)
151    only_if: $CIRRUS_REPO_FULL_NAME == 'freebsd/freebsd-src' && $CIRRUS_BRANCH =~ 'pull/.*'
152    env:
153      TARGET: amd64
154      TARGET_ARCH: amd64
155      TOOLCHAIN: amd64-gcc14
156      TOOLCHAIN_PKG: ${TOOLCHAIN}
157      EXTRA_MAKE_FLAGS: -s
158  timeout_in: 120m
159  install_script:
160  - sh .cirrus-ci/pkg-install.sh ${TOOLCHAIN_PKG} git-lite
161
162  setup_script:
163  - uname -a
164  - gpart show
165  - df -m
166  - pkg --version
167  - pw useradd -n user -m
168  - mkdir -p /usr/obj/$(pwd -P)
169  - chown user:user /usr/obj/$(pwd -P)
170  - su user -c "git config --global --add safe.directory $(pwd -P)"
171
172  build_world_script:
173  - su user -c "make -j$(nproc) ${EXTRA_MAKE_FLAGS} CROSS_TOOLCHAIN=${TOOLCHAIN} WITHOUT_TOOLCHAIN=yes buildworld"
174
175  build_kernel_script:
176  - su user -c "make -j$(nproc) CROSS_TOOLCHAIN=${TOOLCHAIN} WITHOUT_TOOLCHAIN=yes buildkernel"
177
178  package_script:
179  - su user -c "make -j$(nproc) CROSS_TOOLCHAIN=${TOOLCHAIN} WITHOUT_TOOLCHAIN=yes packages"
180
181  test_script:
182  - sh .cirrus-ci/pkg-install.sh qemu-nox11
183  - sh tools/boot/ci-qemu-test.sh
184
185  package_check_script:
186  - su user -c "/usr/libexec/flua tools/pkgbase/metalog_reader.lua -c /usr/obj/$(pwd -P)/${TARGET}.${TARGET_ARCH}/worldstage/METALOG"
187
188  make_sysent_script:
189  # Check that make sysent results were committed if required
190  - make sysent
191  - if ! git diff --exit-code; then printf "\n>>> Generated sysent files not updated, run make sysent <<<\n"; false; fi
192
193  include_ldirs_script:
194  # Check that includes/Makefile refers to existing directories
195  - if ! make -C include/ check-ldirs; then printf "\n>>> include/Makefile lists nonexistant directories <<<\n"; false; fi
196
197  makeman_script:
198  # Check that the committed src.conf.5 matches the one generated by
199  # tools/build/options/makeman (modulo the date which always updates)
200  # XXX: This script is slow so keep it last
201  - (make makeman 2> /tmp/makeman.out); cat /tmp/makeman.out
202  - if ! git diff --exit-code --ignore-matching-lines "^.Dd" share/man/man5/src.conf.5; then printf "\n>>> src.conf.5 was not updated as required <<<\n"; false; fi
203  - if grep -q "no description found" /tmp/makeman.out; then printf "\n>>> Missing description files <<<\n"; false; fi
204
205  post_script:
206  - df -m
207  - du -m -s /usr/obj
208
209precommit_task:
210  persistent_worker:
211    labels:
212      jail: FreeBSD-src
213  matrix:
214    - name: amd64 smoke test using internal ci systems
215      only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src' || $CIRRUS_BRANCH =~ 'pull/.*'
216      env:
217        TARGET: amd64
218        TARGET_ARCH: amd64
219    - name: aarch64 smoke test using internal ci systems
220      only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src' || $CIRRUS_BRANCH =~ 'pull/.*'
221      env:
222        TARGET: arm64
223        TARGET_ARCH: aarch64
224  timeout_in: 120m
225
226  setup_script:
227    - uname -a
228    - gpart show
229    - df -m
230    - pkg --version
231
232  ci_script:
233    - make -C tests/ci TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} CIENV=cirrus CITYPE=smoke ci
234
235  post_script:
236    - df -m
237    - du -m -s /usr/obj
238