-
Notifications
You must be signed in to change notification settings - Fork 24
155 lines (133 loc) · 5.51 KB
/
main.yml
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
---
# Tools that can save round-trips to github and a lot of time:
#
# yamllint -f parsable pull_request.yml
# pip3 install ruamel.yaml.cmd
# yaml merge-expand pull_request.yml exp.yml &&
# diff -w -u pull_request.yml exp.yml
#
# github.com also has a powerful web editor that can be used without
# committing.
name: main test
# 'workflow_dispatch' allows running this workflow manually from the
# 'Actions' tab
# yamllint disable-line rule:truthy
on: [pull_request, workflow_dispatch]
jobs:
build:
runs-on: ${{ matrix.cfg.os }}
strategy:
fail-fast: false
# matrix is very flexible and not always "obvious"
# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/running-variations-of-jobs-in-a-workflo
matrix:
# Keep it simple and just build "ourselves"
cfg:
- os: ubuntu-22.04
img_distro: ubuntu
img_rel: jammy
- os: ubuntu-24.04
img_distro: ubuntu
img_rel: noble
arch: [x86_64]
run_opts: [--cxl --ndctl-build]
steps:
- uses: actions/checkout@v4
with:
path: run_qemu
- name: apt get requirements
run: |
# update is required first, see
# https://github.com/actions/runner-images/issues/2924
sudo apt-get update
# Kernel deps
sudo apt install -y build-essential flex bison libelf-dev libssl-dev ccache
# run_qemu deps
sudo apt install -y mkosi # this one pulls A LOT
sudo apt install -y dracut-core qemu-utils ovmf mtools
- name: mkosi v20 fixes
if: matrix.cfg.os == 'ubuntu-24.04'
run: |
cd /usr/lib/python3/dist-packages
sudo git apply "${{ github.workspace }}"/run_qemu/Patches/ubuntu/24.04/mkosi/*.patch
- name: apt get Ubuntu 24 requirements
if: matrix.cfg.os == 'ubuntu-24.04'
run: |
# systemd was monolithic in Ubunutu 22
sudo apt install -y systemd-ukify systemd-boot
# argbash. TODO: mixing generated code and sources in the same git
# repo is generally a bad idea but this particular one changes
# rarely, so it should probably deserve an exception avoiding
# everyone this step.
- name: argbash
run: |
AB_VER=2.10.0
wget https://github.com/matejak/argbash/archive/refs/tags/${AB_VER}.tar.gz
tar xf ${AB_VER}.tar.gz
sudo apt install -y autoconf
sudo make -C argbash-${AB_VER}/resources install PREFIX=/usr/local/
- name: download ndctl
uses: actions/checkout@v4
with:
repository: pmem/ndctl
ref: v80
path: ndctl
- name: download kernel
id: kernel_checkout
uses: actions/checkout@v4
with:
repository: torvalds/linux
ref: v6.12
path: kernel
- name: set week number for ccache
id: weeks
run: |
printf 'now=%s\n' "$(date +%Y-w%U)" >> "$GITHUB_OUTPUT"
printf 'previous=%s\n' "$(date +%Y-w%U -d '7 days ago')" >> "$GITHUB_OUTPUT"
# Note there is "Caches" section in Actions->Management
- name: ccache
uses: actions/cache@v4
with:
# 'CCACHE_DIR' in https://manpages.ubuntu.com/manpages/noble/man1/ccache.1.html
# Max GitHub storage for this is 10G. Dunno what happens if a
# _single_ cache entry/key is bigger than 10G? ccache max_size is
# 5G, so we're good. Typical kernel compilation seems to use ~1G?
path: ~/.cache/ccache/
# The kernel takes MUCH longer than ndctl or anything else, so
# index the cache only based on the kernel version to keep
# things simple. But: invalidate and refresh .ccache weekly
# to regularly adjust to any .config, toolchain, ndctl, .dpkg
# upgrade or any other escaping change.
key: ${{ matrix.cfg.os }}_${{ matrix.arch }}_${{ steps.kernel_checkout.outputs.ref }}_${{ steps.weeks.outputs.now }}
# Don't start new week from scratch if available
restore-keys: |
${{ matrix.cfg.os }}_${{ matrix.arch }}_${{ steps.kernel_checkout.outputs.ref }}_${{ steps.weeks.outputs.previous }}
- name: defconfig
run: cd kernel &&
make defconfig ARCH=${{ matrix.arch }}
- name: disable AppArmor
run: |
# Bubblewrap needs this for RTM_NEWADDR. This may not be required in
# this GitHub runner/container but it's still useful as "documentation"
# https://ubuntu.com/blog/ubuntu-23-10-restricted-unprivileged-user-namespaces
if test -e /proc/sys/kernel/apparmor_restrict_unprivileged_unconfined; then
sudo sysctl -w kernel.apparmor_restrict_unprivileged_unconfined=0
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
fi
- name: build
run: |
set -x
mkosi --version
ccache --show-stats
cd kernel
PATH=/usr/lib/ccache:"$PATH" \
distro=${{ matrix.cfg.img_distro }} rev=${{ matrix.cfg.img_rel }} \
ndctl='${{ github.workspace }}'/ndctl \
../run_qemu/run_qemu.sh -v --no-run ${{ matrix.run_opts }}
- name: ccache stats post build
run: |
# Pre-build stats printed at the start of the build step
set -x
ccache --show-stats
ccache --show-config | grep dir
# TODO: drop --no-run thanks to "nested KVM" or something?