aboutsummaryrefslogtreecommitdiff
path: root/.cirrus.yml
blob: 13719a3e2058253c74165a26ce42e73d0a01c827 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157

compute_engine_instance:
  # Image list available via
  # gcloud compute images list --project freebsd-org-cloud-dev --no-standard-images
  platform: freebsd
  image_project: freebsd-org-cloud-dev
  image: freebsd-13-2-release-amd64
  cpu: 8
  memory: 8G
  disk: 40

env:
  PKG_FORMAT: tar

task:
  matrix:
  - name: amd64-llvm16 World and kernel build and boot smoke test
    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
    trigger_type: manual
    env:
      TARGET: amd64
      TARGET_ARCH: amd64
      TOOLCHAIN: llvm16
      TOOLCHAIN_PKG: ${TOOLCHAIN}-lite
  - name: amd64-llvm17 World and kernel build and boot smoke test
    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
    trigger_type: manual
    env:
      TARGET: amd64
      TARGET_ARCH: amd64
      TOOLCHAIN: llvm17
      TOOLCHAIN_PKG: ${TOOLCHAIN}-lite
  - name: amd64-llvm18 World and kernel build and boot smoke test
    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src' || $CIRRUS_BRANCH =~ 'pull/.*'
    env:
      TARGET: amd64
      TARGET_ARCH: amd64
      TOOLCHAIN: llvm18
      TOOLCHAIN_PKG: ${TOOLCHAIN}-lite
  - name: arm64-llvm16 World and kernel build and boot smoke test
    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
    trigger_type: manual
    env:
      TARGET: arm64
      TARGET_ARCH: aarch64
      TOOLCHAIN: llvm16
      TOOLCHAIN_PKG: ${TOOLCHAIN}
  - name: arm64-llvm17 World and kernel build and boot smoke test
    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
    trigger_type: manual
    env:
      TARGET: arm64
      TARGET_ARCH: aarch64
      TOOLCHAIN: llvm17
      TOOLCHAIN_PKG: ${TOOLCHAIN}
  - name: arm64-llvm18 World and kernel build and boot smoke test
    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
    trigger_type: manual
    env:
      TARGET: arm64
      TARGET_ARCH: aarch64
      TOOLCHAIN: llvm18
      TOOLCHAIN_PKG: ${TOOLCHAIN}
  - name: amd64-gcc12 World and kernel build and boot smoke test (manual)
    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
    trigger_type: manual
    env:
      TARGET: amd64
      TARGET_ARCH: amd64
      TOOLCHAIN: amd64-gcc12
      TOOLCHAIN_PKG: ${TOOLCHAIN}
      EXTRA_MAKE_FLAGS: -s
  - name: amd64-gcc13 World and kernel build and boot smoke test (manual)
    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
    trigger_type: manual
    env:
      TARGET: amd64
      TARGET_ARCH: amd64
      TOOLCHAIN: amd64-gcc13
      TOOLCHAIN_PKG: ${TOOLCHAIN}
      EXTRA_MAKE_FLAGS: -s
  - name: aarch64-gcc12 World and kernel build and boot smoke test (manual)
    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
    trigger_type: manual
    env:
      TARGET: arm64
      TARGET_ARCH: aarch64
      TOOLCHAIN: aarch64-gcc12
      TOOLCHAIN_PKG: ${TOOLCHAIN}
      EXTRA_MAKE_FLAGS: -s
  - name: aarch64-gcc13 World and kernel build and boot smoke test (manual)
    only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
    trigger_type: manual
    env:
      TARGET: arm64
      TARGET_ARCH: aarch64
      TOOLCHAIN: aarch64-gcc13
      TOOLCHAIN_PKG: ${TOOLCHAIN}
      EXTRA_MAKE_FLAGS: -s
  - name: amd64-gcc12 World and kernel build and boot smoke test (FreeBSD repo)
    only_if: $CIRRUS_REPO_FULL_NAME == 'freebsd/freebsd-src' && $CIRRUS_BRANCH =~ 'pull/.*'
    env:
      TARGET: amd64
      TARGET_ARCH: amd64
      TOOLCHAIN: amd64-gcc12
      TOOLCHAIN_PKG: ${TOOLCHAIN}
      EXTRA_MAKE_FLAGS: -s
  timeout_in: 120m
  install_script:
  - sh .cirrus-ci/pkg-install.sh ${TOOLCHAIN_PKG} git-lite

  setup_script:
  - uname -a
  - gpart show
  - df -m
  - pkg --version
  - pw useradd -n user -m
  - mkdir -p /usr/obj/$(pwd -P)
  - chown user:user /usr/obj/$(pwd -P)
  - su user -c "git config --global --add safe.directory $(pwd -P)"

  build_world_script:
  - su user -c "make -j$(sysctl -n hw.ncpu) ${EXTRA_MAKE_FLAGS} CROSS_TOOLCHAIN=${TOOLCHAIN} WITHOUT_TOOLCHAIN=yes buildworld"

  build_kernel_script:
  - su user -c "make -j$(sysctl -n hw.ncpu) CROSS_TOOLCHAIN=${TOOLCHAIN} WITHOUT_TOOLCHAIN=yes buildkernel"

  package_script:
  - su user -c "make CROSS_TOOLCHAIN=${TOOLCHAIN} WITHOUT_TOOLCHAIN=yes packages"

  package_check_script:
  - su user -c "/usr/libexec/flua tools/pkgbase/metalog_reader.lua -c /usr/obj/$(pwd -P)/${TARGET}.${TARGET_ARCH}/worldstage/METALOG"

  test_script:
  - sh .cirrus-ci/pkg-install.sh qemu-nox11
  - sh tools/boot/ci-qemu-test.sh

  make_sysent_script:
  # Check that make sysent results were committed if required
  - make sysent
  - if ! git diff --exit-code; then printf "\n>>> Generated sysent files not updated, run make sysent <<<\n"; false; fi

  include_ldirs_script:
  # Check that includes/Makefile refers to existing directories
  - if ! make -C include/ check-ldirs; then printf "\n>>> include/Makefile lists nonexistant directories <<<\n"; false; fi

  makeman_script:
  # Check that the committed src.conf.5 matches the one generated by
  # tools/build/options/makeman (modulo the date which always updates)
  # XXX: This script is slow so keep it last
  - (make makeman 2> /tmp/makeman.out); cat /tmp/makeman.out
  - 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
  - if grep -q "no description found" /tmp/makeman.out; then printf "\n>>> Missing description files <<<\n"; false; fi

  post_script:
  - df -m
  - du -m -s /usr/obj