/ .cirrus.yml
.cirrus.yml
  1  
  2  compute_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-13-2-release-amd64
  8    cpu: 8
  9    memory: 8G
 10    disk: 40
 11  
 12  env:
 13    PKG_FORMAT: tar
 14  
 15  task:
 16    matrix:
 17    - name: amd64-llvm15 World and kernel build and boot smoke test
 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: llvm15
 24        TOOLCHAIN_PKG: ${TOOLCHAIN}-lite
 25    - name: amd64-llvm16 World and kernel build and boot smoke test
 26      only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src' || $CIRRUS_BRANCH =~ 'pull/.*'
 27      env:
 28        TARGET: amd64
 29        TARGET_ARCH: amd64
 30        TOOLCHAIN: llvm16
 31        TOOLCHAIN_PKG: ${TOOLCHAIN}-lite
 32    - name: arm64-llvm15 World and kernel build and boot smoke test
 33      only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
 34      trigger_type: manual
 35      env:
 36        TARGET: arm64
 37        TARGET_ARCH: aarch64
 38        TOOLCHAIN: llvm15
 39        TOOLCHAIN_PKG: ${TOOLCHAIN}
 40    - name: arm64-llvm16 World and kernel build and boot smoke test
 41      only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
 42      trigger_type: manual
 43      env:
 44        TARGET: arm64
 45        TARGET_ARCH: aarch64
 46        TOOLCHAIN: llvm16
 47        TOOLCHAIN_PKG: ${TOOLCHAIN}
 48    - name: amd64-gcc12 World and kernel build and boot smoke test (manual)
 49      only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
 50      trigger_type: manual
 51      env:
 52        TARGET: amd64
 53        TARGET_ARCH: amd64
 54        TOOLCHAIN: amd64-gcc12
 55        TOOLCHAIN_PKG: ${TOOLCHAIN}
 56        EXTRA_MAKE_FLAGS: -s
 57    - name: aarch64-gcc12 World and kernel build and boot smoke test (manual)
 58      only_if: $CIRRUS_REPO_FULL_NAME != 'freebsd/freebsd-src'
 59      trigger_type: manual
 60      env:
 61        TARGET: arm64
 62        TARGET_ARCH: aarch64
 63        TOOLCHAIN: aarch64-gcc12
 64        TOOLCHAIN_PKG: ${TOOLCHAIN}
 65        EXTRA_MAKE_FLAGS: -s
 66    - name: amd64-gcc12 World and kernel build and boot smoke test (FreeBSD repo)
 67      only_if: $CIRRUS_REPO_FULL_NAME == 'freebsd/freebsd-src' && $CIRRUS_BRANCH =~ 'pull/.*'
 68      env:
 69        TARGET: amd64
 70        TARGET_ARCH: amd64
 71        TOOLCHAIN: amd64-gcc12
 72        TOOLCHAIN_PKG: ${TOOLCHAIN}
 73        EXTRA_MAKE_FLAGS: -s
 74    timeout_in: 120m
 75    install_script:
 76    - sh .cirrus-ci/pkg-install.sh ${TOOLCHAIN_PKG} git-lite
 77  
 78    setup_script:
 79    - uname -a
 80    - gpart show
 81    - df -m
 82    - pkg --version
 83    - pw useradd user
 84    - mkdir -p /usr/obj/$(pwd -P)
 85    - chown user:user /usr/obj/$(pwd -P)
 86  
 87    build_world_script:
 88    - su user -c "make -j$(sysctl -n hw.ncpu) ${EXTRA_MAKE_FLAGS} CROSS_TOOLCHAIN=${TOOLCHAIN} WITHOUT_TOOLCHAIN=yes buildworld"
 89  
 90    build_kernel_script:
 91    - su user -c "make -j$(sysctl -n hw.ncpu) CROSS_TOOLCHAIN=${TOOLCHAIN} WITHOUT_TOOLCHAIN=yes buildkernel"
 92  
 93    package_script:
 94    - su user -c "make CROSS_TOOLCHAIN=${TOOLCHAIN} WITHOUT_TOOLCHAIN=yes packages"
 95  
 96    package_check_script:
 97    - su user -c "/usr/libexec/flua tools/pkgbase/metalog_reader.lua -c /usr/obj/$(pwd -P)/${TARGET}.${TARGET_ARCH}/worldstage/METALOG"
 98  
 99    test_script:
100    - sh .cirrus-ci/pkg-install.sh qemu-nox11
101    - sh tools/boot/ci-qemu-test.sh
102  
103    make_sysent_script:
104    # Check that make sysent results were committed if required
105    - make sysent
106    - if ! git diff --exit-code; then printf "\n>>> Generated sysent files not updated, run make sysent <<<\n"; false; fi
107  
108    include_ldirs_script:
109    # Check that includes/Makefile refers to existing directories
110    - if ! make -C include/ check-ldirs; then printf "\n>>> include/Makefile lists nonexistant directories <<<\n"; false; fi
111  
112    makeman_script:
113    # Check that the committed src.conf.5 matches the one generated by
114    # tools/build/options/makeman (modulo the date which always updates)
115    # XXX: This script is slow so keep it last
116    - (make makeman 2> /tmp/makeman.out); cat /tmp/makeman.out
117    - 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
118    - if grep -q "no description found" /tmp/makeman.out; then printf "\n>>> Missing description files <<<\n"; false; fi
119  
120    post_script:
121    - df -m
122    - du -m -s /usr/obj