Skip to content

Commit d610cdc

Browse files
update
1 parent 1f021fe commit d610cdc

File tree

1 file changed

+68
-59
lines changed

1 file changed

+68
-59
lines changed

.github/workflows/build.yml

Lines changed: 68 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,23 @@ name: Hyperion Kernel Build CI
33
on:
44
workflow_dispatch:
55

6+
concurrency:
7+
group: hyperion-kernel
8+
cancel-in-progress: false
9+
610
permissions:
711
contents: write
8-
actions: write
912

1013
jobs:
1114

1215
validate-config:
13-
name: Validate Hyperion Config
1416
runs-on: ubuntu-latest
1517

1618
outputs:
1719
VERSION: ${{ steps.parse.outputs.VERSION }}
18-
PATCH: ${{ steps.parse.outputs.PATCH }}
19-
SUB: ${{ steps.parse.outputs.SUB }}
20-
EXTRA: ${{ steps.parse.outputs.EXTRA }}
21-
LOCAL: ${{ steps.parse.outputs.LOCAL }}
20+
FULL_VERSION: ${{ steps.parse.outputs.FULL_VERSION }}
2221
TAG: ${{ steps.parse.outputs.TAG }}
2322
HYPERION_VER: ${{ steps.parse.outputs.HYPERION_VER }}
24-
FULL_VERSION: ${{ steps.parse.outputs.FULL_VERSION }}
2523
CONFIG_HASH: ${{ steps.parse.outputs.CONFIG_HASH }}
2624
PATCHES_HASH: ${{ steps.parse.outputs.PATCHES_HASH }}
2725

@@ -31,35 +29,29 @@ jobs:
3129
- name: Parse hyperion.config
3230
id: parse
3331
run: |
34-
python3 << 'EOF'
35-
import sys, os, hashlib, glob
32+
set -euo pipefail
3633
37-
config = {}
34+
python3 << 'EOF'
35+
import os, hashlib, glob
3836
37+
config={}
3938
with open("hyperion.config") as f:
4039
for line in f:
4140
line=line.strip()
4241
if not line or line.startswith("#"): continue
4342
k,v=line.split("=",1)
4443
config[k.strip()]=v.strip().strip('"')
4544
46-
def parse_int(k):
47-
try:
48-
return int(config.get(k,0))
49-
except:
50-
print("Invalid value:",k)
51-
sys.exit(1)
45+
VERSION=int(config.get("CONFIG_VERSION",0))
46+
PATCH=int(config.get("CONFIG_PATCHLEVEL",0))
47+
SUB=int(config.get("CONFIG_SUBLEVEL",0))
5248
53-
VERSION=parse_int("CONFIG_VERSION")
54-
PATCH=parse_int("CONFIG_PATCHLEVEL")
55-
SUB=parse_int("CONFIG_SUBLEVEL")
49+
FULL_VERSION=f"{VERSION}.{PATCH}" if SUB==0 else f"{VERSION}.{PATCH}.{SUB}"
5650
57-
EXTRA=config.get("CONFIG_EXTRAVERSION","")
5851
LOCAL=config.get("CONFIG_LOCALVERSION","")
5952
60-
FULL_VERSION=f"{VERSION}.{PATCH}" if SUB==0 else f"{VERSION}.{PATCH}.{SUB}"
61-
6253
HYPERION_VER=LOCAL.split("-Hyperion-",1)[-1] if "-Hyperion-" in LOCAL else LOCAL.lstrip("-")
54+
6355
TAG=HYPERION_VER
6456
6557
CONFIG_HASH=hashlib.sha256(open("hyperion.config","rb").read()).hexdigest()[:12]
@@ -73,37 +65,32 @@ jobs:
7365
7466
out=os.environ["GITHUB_OUTPUT"]
7567
76-
with open(out,"a") as f:
77-
f.write(f"VERSION={VERSION}\n")
78-
f.write(f"PATCH={PATCH}\n")
79-
f.write(f"SUB={SUB}\n")
80-
f.write(f"EXTRA={EXTRA}\n")
81-
f.write(f"LOCAL={LOCAL}\n")
82-
f.write(f"TAG={TAG}\n")
83-
f.write(f"HYPERION_VER={HYPERION_VER}\n")
84-
f.write(f"FULL_VERSION={FULL_VERSION}\n")
85-
f.write(f"CONFIG_HASH={CONFIG_HASH}\n")
86-
f.write(f"PATCHES_HASH={PATCHES_HASH}\n")
68+
for k,v in {
69+
"VERSION":VERSION,
70+
"FULL_VERSION":FULL_VERSION,
71+
"TAG":TAG,
72+
"HYPERION_VER":HYPERION_VER,
73+
"CONFIG_HASH":CONFIG_HASH,
74+
"PATCHES_HASH":PATCHES_HASH
75+
}.items():
76+
open(out,"a").write(f"{k}={v}\n")
8777
EOF
8878
79+
8980
build-kernel:
90-
name: Build Linux Hyperion Kernel
9181
needs: validate-config
9282
runs-on: ubuntu-latest
9383

9484
env:
95-
KERNEL_VERSION: ${{ needs.validate-config.outputs.VERSION }}
96-
FULL_VERSION: ${{ needs.validate-config.outputs.FULL_VERSION }}
97-
CONFIG_HASH: ${{ needs.validate-config.outputs.CONFIG_HASH }}
98-
PATCHES_HASH: ${{ needs.validate-config.outputs.PATCHES_HASH }}
99-
TAG_NAME: ${{ needs.validate-config.outputs.TAG }}
100-
HYPERION_VER: ${{ needs.validate-config.outputs.HYPERION_VER }}
85+
KERNEL_VERSION: ${{ needs.validate-config.outputs.VERSION }}
86+
FULL_VERSION: ${{ needs.validate-config.outputs.FULL_VERSION }}
87+
TAG_NAME: ${{ needs.validate-config.outputs.TAG }}
88+
HYPERION_VER: ${{ needs.validate-config.outputs.HYPERION_VER }}
89+
CONFIG_HASH: ${{ needs.validate-config.outputs.CONFIG_HASH }}
90+
PATCHES_HASH: ${{ needs.validate-config.outputs.PATCHES_HASH }}
10191

10292
KBUILD_BUILD_USER: Soumalya
103-
KBUILD_BUILD_HOST: hyperion-ci
104-
KBUILD_BUILD_TIMESTAMP: "2024-01-01 00:00:00 UTC"
105-
KBUILD_BUILD_VERSION: 1
106-
SOURCE_DATE_EPOCH: 1704067200
93+
KBUILD_BUILD_HOST: github-runner
10794

10895
CCACHE_DIR: ${{ github.workspace }}/.ccache
10996
CCACHE_MAXSIZE: 5G
@@ -115,36 +102,62 @@ jobs:
115102

116103
- uses: actions/checkout@v4
117104

105+
# deterministic timestamp
106+
- name: Generate reproducible timestamp
107+
run: |
108+
SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)
109+
echo "SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH" >> $GITHUB_ENV
110+
echo "KBUILD_BUILD_TIMESTAMP=$(date -u -d "@$SOURCE_DATE_EPOCH")" >> $GITHUB_ENV
111+
echo "KBUILD_BUILD_VERSION=${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV
112+
118113
- name: Install dependencies
119114
run: |
120115
sudo apt-get update
121-
sudo apt-get install -y \
116+
sudo apt-get install -y --no-install-recommends \
122117
build-essential bc bison flex \
123118
libssl-dev libelf-dev libncurses-dev \
124119
dwarves rsync cpio git wget curl \
125-
ccache zstd
120+
ccache zstd ca-certificates
126121
127-
- name: Restore ccache
122+
# ccache layer
123+
- name: Restore compiler cache
128124
uses: actions/cache@v4
129125
with:
130126
path: .ccache
131-
key: ccache-${{ env.FULL_VERSION }}-${{ env.CONFIG_HASH }}
132-
133-
- name: Restore kernel tarball
127+
key: ccache-${{ runner.os }}-${{ env.FULL_VERSION }}-${{ env.CONFIG_HASH }}-${{ env.PATCHES_HASH }}
128+
restore-keys: |
129+
ccache-${{ runner.os }}-${{ env.FULL_VERSION }}-${{ env.CONFIG_HASH }}-
130+
ccache-${{ runner.os }}-${{ env.FULL_VERSION }}-
131+
ccache-
132+
133+
# kernel tarball cache
134+
- name: Restore kernel source
135+
id: kernel
134136
uses: actions/cache@v4
135-
id: kernel-tar
136137
with:
137138
path: linux-${{ env.FULL_VERSION }}.tar.xz
138-
key: kernel-${{ env.FULL_VERSION }}
139+
key: kernel-src-${{ env.FULL_VERSION }}
139140

140141
- name: Download kernel
141-
if: steps.kernel-tar.outputs.cache-hit != 'true'
142+
if: steps.kernel.outputs.cache-hit != 'true'
142143
run: |
143144
wget https://cdn.kernel.org/pub/linux/kernel/v${KERNEL_VERSION}.x/linux-${FULL_VERSION}.tar.xz
144145
wget https://cdn.kernel.org/pub/linux/kernel/v${KERNEL_VERSION}.x/sha256sums.asc
145146
grep "linux-${FULL_VERSION}.tar.xz" sha256sums.asc | sha256sum -c -
146147
148+
# kernel object tree cache
149+
- name: Restore kernel build cache
150+
id: kernel-build
151+
uses: actions/cache@v4
152+
with:
153+
path: kernel
154+
key: kernel-build-${{ env.FULL_VERSION }}-${{ env.CONFIG_HASH }}-${{ env.PATCHES_HASH }}
155+
restore-keys: |
156+
kernel-build-${{ env.FULL_VERSION }}-${{ env.CONFIG_HASH }}-
157+
kernel-build-${{ env.FULL_VERSION }}-
158+
147159
- name: Extract kernel
160+
if: steps.kernel-build.outputs.cache-hit != 'true'
148161
run: |
149162
tar -xf linux-${FULL_VERSION}.tar.xz
150163
mv linux-${FULL_VERSION} kernel
@@ -164,19 +177,15 @@ jobs:
164177
- name: Apply patches
165178
working-directory: kernel
166179
run: |
167-
set -e
168180
shopt -s nullglob
169181
for patch in ../patches/*.patch; do
170-
echo "Applying $patch"
171182
patch -p1 < "$patch"
172183
done
173184
174185
- name: Build kernel
175186
working-directory: kernel
176187
run: |
177-
set -euo pipefail
178-
179-
make -j$(nproc --all) \
188+
make -j$(nproc) \
180189
CC="ccache gcc" \
181190
LOCALVERSION="-Hyperion-${HYPERION_VER}" \
182191
bzImage modules
@@ -192,7 +201,7 @@ jobs:
192201
193202
tar --zstd -cf Hyperion-Kernel-${FULL_VERSION}.tar.zst artifacts
194203
195-
- name: Checksums
204+
- name: Generate checksum
196205
run: |
197206
sha256sum Hyperion-Kernel-${FULL_VERSION}.tar.zst > Hyperion-Kernel-${FULL_VERSION}.sha256
198207

0 commit comments

Comments
 (0)