7
7
fail-fast : false
8
8
matrix :
9
9
# TODO: Add 20.04
10
- # TODO: Build all LTS and latest kernels
11
10
os : [ubuntu-22.04]
12
- ack : [0, 1 ]
11
+ kernel : [{ack: 0, version: 5.10.164}, {ack: 0, version: 5.15.89}, {ack: 0, version: 6.1.7}, {ack: 1, version: android13-5.10-lts} ]
13
12
arch : [arm64, x86_64]
14
13
runs-on : ${{ matrix.os }}
15
- timeout-minutes : 80
14
+ timeout-minutes : 100
16
15
env :
17
- ACK : ${{ matrix.ack }}
16
+ ACK : ${{ matrix.kernel. ack }}
18
17
ARCH : ${{ matrix.arch }}
19
18
outputs :
20
19
SHORT_HASH : ${{ steps.vars.outputs.SHORT_HASH }}
21
20
steps :
22
21
23
22
- uses : actions/checkout@v3
24
- with :
25
- submodules : true
26
23
27
24
- name : Set output variables
28
25
id : vars
@@ -39,74 +36,130 @@ jobs:
39
36
OUT_DIR=out/ack/common/${ARCH}
40
37
fi
41
38
42
- KERNEL_IMAGE="${OUT_DIR}/arch/${ARCH}/boot"
43
-
44
39
if [ $ARCH == x86_64 ]; then
45
- KERNEL_IMAGE="$KERNEL_IMAGE/bzImage"
40
+ # We need to use the real image in the x86 folder because caching
41
+ # doesn't work with symlinks
42
+ KERNEL_IMAGE="${OUT_DIR}/arch/x86/boot/bzImage"
46
43
elif [ $ARCH == arm64 ]; then
47
- KERNEL_IMAGE="$KERNEL_IMAGE /Image"
44
+ KERNEL_IMAGE="${OUT_DIR}/arch/${ARCH}/boot /Image"
48
45
fi
49
46
50
47
echo "SHORT_HASH=$SHORT_HASH" >> $GITHUB_OUTPUT
51
48
echo "OUT_DIR=$OUT_DIR" >> $GITHUB_OUTPUT
52
49
echo "KERNEL_TYPE=$KERNEL_TYPE" >> $GITHUB_OUTPUT
53
50
echo "KERNEL_IMAGE=$KERNEL_IMAGE" >> $GITHUB_OUTPUT
54
51
55
- # TODO: We can make this step faster by splitting up ACK, arm64, and x86 dependencies
56
- - name : Install dependencies
57
- run : |
58
- sudo apt update && sudo apt install -y \
59
- qemu \
60
- qemu-system-x86 \
61
- qemu-system-arm \
62
- build-essential \
63
- bc \
64
- bison \
65
- flex \
66
- git \
67
- libelf-dev \
68
- libssl-dev \
69
- ncurses-dev \
70
- llvm \
71
- clang \
72
- clang-tools \
73
- lld \
74
- lz4 \
75
- pahole \
76
- binutils-aarch64-linux-gnu \
77
- gcc-aarch64-linux-gnu
78
-
79
- - name : Initialize rootfs
80
- run : |
81
- make rootfs-init
52
+ - name : Cache kernel image
53
+ id : cache-kernel
54
+ uses : actions/cache@v3
55
+ with :
56
+ key : ${{ matrix.kernel.version }}-${{ matrix.arch }}
57
+ path : |
58
+ ${{ steps.vars.outputs.KERNEL_IMAGE }}
59
+ ${{ steps.vars.outputs.OUT_DIR }}/vmlinux
60
+
61
+ - run : ls -lR
62
+ if : ${{ steps.cache-kernel.outputs.cache-hit == 'true' }}
82
63
83
64
- name : Build kernel
84
- run : |
85
- make -j$(nproc) linux
65
+ if : ${{ steps.cache-kernel.outputs.cache-hit != 'true' }}
66
+ uses : ./.github/actions/build-kernel
67
+ with :
68
+ os : ${{ matrix.os }}
69
+ arch : ${{ matrix.arch }}
70
+ ack : ${{ matrix.kernel.ack }}
71
+ kernel-version : ${{ matrix.kernel.version }}
86
72
87
- - name : Run kernel
73
+ - name : Rename kernel images
88
74
run : |
89
- mkdir shared
90
- echo poweroff > shared/init.sh
91
- chmod +x shared/init.sh
92
- make run
75
+ SUFFIX=${{ steps.vars.outputs.KERNEL_TYPE }}-${{ matrix.kernel.version }}-${{ matrix.arch }}
76
+ cp ${{ steps.vars.outputs.KERNEL_IMAGE }} ${{ steps.vars.outputs.KERNEL_IMAGE }}-$SUFFIX
77
+ cp ${{ steps.vars.outputs.OUT_DIR }}/vmlinux ${{ steps.vars.outputs.OUT_DIR }}/vmlinux-$SUFFIX
93
78
94
- - run : |
95
- cp ${{ steps.vars.outputs.KERNEL_IMAGE }} \
96
- ${{ steps.vars.outputs.KERNEL_IMAGE }}-${{ steps.vars.outputs.KERNEL_TYPE }}-${{ matrix.arch }}
97
- cp ${{ steps.vars.outputs.OUT_DIR }}/vmlinux ${{ steps.vars.outputs.OUT_DIR }}/vmlinux-${{ steps.vars.outputs.KERNEL_TYPE }}-${{ matrix.arch }}
79
+ echo "SUFFIX=$SUFFIX" >> $GITHUB_ENV
98
80
99
81
- name : Upload kernel image artifact
100
82
uses : actions/upload-artifact@v3
101
83
with :
102
84
name : kernel-image
103
- path : ${{ steps.vars.outputs.KERNEL_IMAGE }}-${{ steps.vars.outputs.KERNEL_TYPE }}-${{ matrix.arch }}
85
+ path : ${{ steps.vars.outputs.KERNEL_IMAGE }}-${{ env.SUFFIX }}
104
86
105
87
- name : Upload vmlinux artifact
106
88
uses : actions/upload-artifact@v3
107
89
with :
108
90
name : vmlinux
109
- path : ${{ steps.vars.outputs.OUT_DIR }}/vmlinux-${{ steps.vars.outputs.KERNEL_TYPE }}-${{ matrix.arch }}
91
+ path : ${{ steps.vars.outputs.OUT_DIR }}/vmlinux-${{ env.SUFFIX }}
92
+
93
+ run :
94
+ needs : build
95
+ strategy :
96
+ fail-fast : false
97
+ matrix :
98
+ kernel : [{ack: 0, version: 5.10.164}, {ack: 0, version: 5.15.89}, {ack: 0, version: 6.1.7}, {ack: 1, version: android13-5.10-lts}]
99
+ arch : [arm64, x86_64]
100
+ runs-on : ubuntu-22.04
101
+ env :
102
+ ACK : ${{ matrix.kernel.ack }}
103
+ ARCH : ${{ matrix.arch }}
104
+ steps :
105
+ - uses : actions/checkout@v3
106
+
107
+ - name : Download all workflow run artifacts
108
+ uses : actions/download-artifact@v3
109
+
110
+ - name : Install x86_64 dependencies
111
+ if : ${{ matrix.arch == 'x86_64' }}
112
+ shell : bash
113
+ run : sudo apt update && sudo apt install -y qemu-system-x86
114
+
115
+ - name : Install arm64 dependencies
116
+ if : ${{ matrix.arch == 'arm64' }}
117
+ shell : bash
118
+ run : sudo apt update && sudo apt install -y qemu-system-arm
119
+
120
+ - name : Set output variables
121
+ id : vars
122
+ run : |
123
+ set -x
124
+
125
+ if [ $ACK -eq 0 ]; then
126
+ KERNEL_TYPE=linux
127
+ else
128
+ KERNEL_TYPE=ack
129
+ fi
130
+
131
+ SUFFIX=$KERNEL_TYPE-${{ matrix.kernel.version }}-${{ matrix.arch }}
132
+
133
+ if [ $ARCH == x86_64 ]; then
134
+ IMAGE_NAME=bzImage-$SUFFIX
135
+ else
136
+ IMAGE_NAME=Image-$SUFFIX
137
+ fi
138
+
139
+ echo "IMAGE_NAME=$IMAGE_NAME" >> $GITHUB_ENV
140
+
141
+ - name : Initialize rootfs and initramfs
142
+ run : |
143
+ make rootfs-init
144
+ ROOTFS=./rootfs-${{ matrix.arch }} make rootfs-init
145
+
146
+ make cpio
147
+ INITRAMFS_DIR=./rootfs/alpine-${{ matrix.arch }} make cpio CPIO_FILE=../../alpine-${{ matrix.arch }}.cpio.gz
148
+
149
+ - name : Setup shared/init.sh
150
+ run : |
151
+ mkdir shared
152
+ echo poweroff > shared/init.sh
153
+ chmod +x shared/init.sh
154
+
155
+ - run : ls -lR
156
+
157
+ - name : Run kernel
158
+ run : |
159
+ KERNEL_IMAGE=./kernel-image/$IMAGE_NAME make run
160
+ KERNEL_IMAGE=./kernel-image/$IMAGE_NAME ROOTFS=./rootfs-${{ matrix.arch }} make run
161
+ KERNEL_IMAGE=./kernel-image/$IMAGE_NAME INITRD=./alpine-${{ matrix.arch }}.cpio.gz make run
162
+ KERNEL_IMAGE=./kernel-image/$IMAGE_NAME CPU=2 MEM=2048M QEMU_EXTRA_ARGS="" QEMU_EXTRA_KERNEL_CMDLINE="nokaslr" make run
110
163
111
164
- name : Upload rootfs artifact
112
165
uses : actions/upload-artifact@v3
@@ -116,7 +169,7 @@ jobs:
116
169
117
170
release :
118
171
runs-on : ubuntu-22.04
119
- needs : build
172
+ needs : [run, build]
120
173
permissions :
121
174
contents : write
122
175
steps :
0 commit comments