1#!/usr/bin/env bash
2
3set -eu
4
5function prerun() {
6  echo "::group::Install build dependencies"
7  # remove snap things, update+upgrade will be faster then
8  for x in lxd core20 snapd; do sudo snap remove $x; done
9  sudo apt-get purge snapd google-chrome-stable firefox
10  # https://github.com/orgs/community/discussions/47863
11  sudo apt-get remove grub-efi-amd64-bin grub-efi-amd64-signed shim-signed --allow-remove-essential
12  sudo apt-get update
13  sudo apt upgrade
14  sudo xargs --arg-file=.github/workflows/build-dependencies.txt apt-get install -qq
15  sudo apt-get clean
16  sudo dmesg -c > /var/tmp/dmesg-prerun
17  echo "::endgroup::"
18}
19
20function mod_build() {
21  echo "::group::Generate debian packages"
22  ./autogen.sh
23  ./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan
24  make --no-print-directory --silent native-deb-utils native-deb-kmod
25  mv ../*.deb .
26  rm ./openzfs-zfs-dracut*.deb ./openzfs-zfs-dkms*.deb
27  echo "$ImageOS-$ImageVersion" > tests/ImageOS.txt
28  echo "::endgroup::"
29}
30
31function mod_install() {
32  # install the pre-built module only on the same runner image
33  MOD=`cat tests/ImageOS.txt`
34  if [ "$MOD" != "$ImageOS-$ImageVersion" ]; then
35    rm -f *.deb
36    mod_build
37  fi
38
39  echo "::group::Install and load modules"
40  # don't use kernel-shipped zfs modules
41  sudo sed -i.bak 's/updates/extra updates/' /etc/depmod.d/ubuntu.conf
42  sudo apt-get install --fix-missing ./*.deb
43
44  # Native Debian packages enable and start the services
45  # Stop zfs-zed daemon, as it may interfere with some ZTS test cases
46  sudo systemctl stop zfs-zed
47  sudo depmod -a
48  sudo modprobe zfs
49  sudo dmesg
50  sudo dmesg -c > /var/tmp/dmesg-module-load
51  echo "::endgroup::"
52
53  echo "::group::Report CPU information"
54  lscpu
55  cat /proc/spl/kstat/zfs/chksum_bench
56  echo "::endgroup::"
57
58  echo "::group::Reclaim and report disk space"
59  # remove 4GiB of images
60  sudo systemd-run docker system prune --force --all --volumes
61
62  # remove unused software
63  sudo systemd-run --wait rm -rf \
64    "$AGENT_TOOLSDIRECTORY" \
65    /opt/* \
66    /usr/local/* \
67    /usr/share/az* \
68    /usr/share/dotnet \
69    /usr/share/gradle* \
70    /usr/share/miniconda \
71    /usr/share/swift \
72    /var/lib/gems \
73    /var/lib/mysql \
74    /var/lib/snapd
75
76  # trim the cleaned space
77  sudo fstrim /
78
79  # disk usage afterwards
80  df -h /
81  echo "::endgroup::"
82}
83
84case "$1" in
85  build)
86    prerun
87    mod_build
88    ;;
89  tests)
90    prerun
91    mod_install
92    ;;
93esac
94