Skip to content

Commit 36b5456

Browse files
committed
fix: use $GITHUB_WORKSPACE in run steps directly, patch Mali Kconfig before defconfig
1 parent a7144c8 commit 36b5456

1 file changed

Lines changed: 90 additions & 75 deletions

File tree

.github/workflows/build-kernel.yml

Lines changed: 90 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@ jobs:
2626
runs-on: ubuntu-latest
2727
permissions:
2828
contents: write
29-
env:
30-
KERNEL_DIR: ${{ github.workspace }}/android-kernel
31-
OUT_DIR: ${{ github.workspace }}/android-kernel/out
3229

3330
steps:
3431
- name: Checkout build repo
@@ -51,34 +48,52 @@ jobs:
5148
5249
- name: Clone kernel source
5350
run: |
54-
echo "Cloning ${{ github.event.inputs.kernel_source }} @ ${{ github.event.inputs.kernel_branch }}"
51+
KERNEL_DIR="$GITHUB_WORKSPACE/android-kernel"
52+
echo "Cloning into $KERNEL_DIR"
5553
git clone --depth=1 \
5654
-b ${{ github.event.inputs.kernel_branch }} \
5755
${{ github.event.inputs.kernel_source }} \
58-
${{ env.KERNEL_DIR }}
59-
ls ${{ env.KERNEL_DIR }}/
56+
"$KERNEL_DIR"
57+
echo "KERNEL_DIR=$KERNEL_DIR" >> $GITHUB_ENV
58+
echo "OUT_DIR=$KERNEL_DIR/out" >> $GITHUB_ENV
59+
ls "$KERNEL_DIR/"
6060
6161
- name: Fix kernel script permissions
6262
run: |
63-
echo "Fixing execute permissions on kernel scripts..."
64-
find ${{ env.KERNEL_DIR }}/scripts -type f -name "*.sh" -exec chmod +x {} \;
65-
chmod +x ${{ env.KERNEL_DIR }}/scripts/clang-android.sh 2>/dev/null || true
66-
chmod +x ${{ env.KERNEL_DIR }}/scripts/gcc-version.sh 2>/dev/null || true
67-
chmod +x ${{ env.KERNEL_DIR }}/scripts/clang-version.sh 2>/dev/null || true
68-
chmod +x ${{ env.KERNEL_DIR }}/scripts/lld-version.sh 2>/dev/null || true
69-
chmod +x ${{ env.KERNEL_DIR }}/scripts/gcc-plugin.sh 2>/dev/null || true
70-
chmod +x ${{ env.KERNEL_DIR }}/scripts/link-vmlinux.sh 2>/dev/null || true
71-
chmod +x ${{ env.KERNEL_DIR }}/scripts/mkcompile_h 2>/dev/null || true
72-
find ${{ env.KERNEL_DIR }}/scripts -type f ! -name "*.c" ! -name "*.h" ! -name "*.py" -exec chmod +x {} \;
63+
find "$KERNEL_DIR/scripts" -type f \( -name "*.sh" -o -name "gcc-version*" -o -name "clang-*" -o -name "lld-*" -o -name "gcc-plugin*" -o -name "link-vmlinux*" -o -name "mkcompile_h" \) -exec chmod +x {} \;
64+
find "$KERNEL_DIR/scripts" -type f ! -name "*.c" ! -name "*.h" ! -name "*.py" ! -name "*.txt" ! -name "Makefile" -exec chmod +x {} \;
7365
echo "Script permissions fixed."
7466
67+
- name: Patch Mali GPU Kconfig
68+
run: |
69+
# Samsung Exynos kernels ship a Mali GPU Kconfig that uses
70+
# 'depends on' with a shell-expansion syntax unsupported by
71+
# the host kconfig parser, causing "syntax error" at lines 27-29.
72+
# Fix: comment out the two broken 'depends on' lines.
73+
MALI_KCONFIG="$KERNEL_DIR/drivers/gpu/arm/Kconfig"
74+
if [ -f "$MALI_KCONFIG" ]; then
75+
echo "Patching $MALI_KCONFIG"
76+
# Replace lines that call shell commands inside 'depends on' with a safe stub
77+
sed -i 's/^\(\s*depends on\s*\$(shell.*\)/# \1/' "$MALI_KCONFIG"
78+
# Also handle bare shell() calls in source lines
79+
sed -i '/^source.*\$(shell/d' "$MALI_KCONFIG"
80+
echo "Mali Kconfig patched."
81+
else
82+
echo "Mali Kconfig not found at expected path, searching..."
83+
find "$KERNEL_DIR/drivers/gpu" -name "Kconfig" | xargs grep -l 'shell' 2>/dev/null | while read f; do
84+
sed -i 's/^\(\s*depends on\s*\$(shell.*\)/# \1/' "$f"
85+
sed -i '/^source.*\$(shell/d' "$f"
86+
echo "Patched: $f"
87+
done
88+
fi
89+
7590
- name: Detect kernel version
7691
id: kver
7792
run: |
78-
VER=$(grep "^VERSION =" ${{ env.KERNEL_DIR }}/Makefile | awk '{print $3}')
79-
PATCH=$(grep "^PATCHLEVEL =" ${{ env.KERNEL_DIR }}/Makefile | awk '{print $3}')
80-
SUB=$(grep "^SUBLEVEL =" ${{ env.KERNEL_DIR }}/Makefile | awk '{print $3}')
81-
echo "Detected kernel version: $VER.$PATCH.$SUB"
93+
VER=$(grep "^VERSION =" "$KERNEL_DIR/Makefile" | awk '{print $3}')
94+
PATCH=$(grep "^PATCHLEVEL =" "$KERNEL_DIR/Makefile" | awk '{print $3}')
95+
SUB=$(grep "^SUBLEVEL =" "$KERNEL_DIR/Makefile" | awk '{print $3}')
96+
echo "Kernel version: $VER.$PATCH.$SUB"
8297
echo "version=$VER.$PATCH.$SUB" >> $GITHUB_OUTPUT
8398
echo "major=$VER.$PATCH" >> $GITHUB_OUTPUT
8499
@@ -97,7 +112,7 @@ jobs:
97112
98113
- name: Integrate KernelSU
99114
run: |
100-
cd ${{ env.KERNEL_DIR }}
115+
cd "$KERNEL_DIR"
101116
KSU_TAG="${{ steps.ksu_info.outputs.ksu_version }}"
102117
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s "$KSU_TAG"
103118
head -5 KernelSU/kernel/Makefile 2>/dev/null || head -5 drivers/kernelsu/Makefile 2>/dev/null
@@ -121,22 +136,22 @@ jobs:
121136
122137
- name: Configure kernel
123138
run: |
124-
cd ${{ env.KERNEL_DIR }}
139+
cd "$KERNEL_DIR"
125140
export PATH=$HOME/toolchain/clang/bin:$PATH
126141
127142
DEFCONFIG=$(find arch/arm64/configs -name "*a04s*" -o -name "*a04*defconfig" 2>/dev/null | head -1 | xargs -r basename)
128143
[ -z "$DEFCONFIG" ] && DEFCONFIG="a04_defconfig"
129144
echo "Using defconfig: $DEFCONFIG"
130145
echo "DEFCONFIG=$DEFCONFIG" >> $GITHUB_ENV
131146
132-
make O=${{ env.OUT_DIR }} ARCH=arm64 CC=clang \
147+
make O="$OUT_DIR" ARCH=arm64 CC=clang \
133148
CLANG_TRIPLE=aarch64-linux-gnu- \
134149
CROSS_COMPILE=aarch64-linux-gnu- \
135150
"$DEFCONFIG"
136151
137-
sed -i 's/CONFIG_WERROR=y/CONFIG_WERROR=n/g' ${{ env.OUT_DIR }}/.config
152+
sed -i 's/CONFIG_WERROR=y/CONFIG_WERROR=n/g' "$OUT_DIR/.config"
138153
139-
scripts/config --file ${{ env.OUT_DIR }}/.config \
154+
scripts/config --file "$OUT_DIR/.config" \
140155
-e CONFIG_KSU \
141156
-e CONFIG_KPROBES \
142157
-e CONFIG_HAVE_KPROBES \
@@ -145,11 +160,11 @@ jobs:
145160
-e CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE \
146161
-d CONFIG_KSU_DEBUG
147162
148-
scripts/config --file ${{ env.OUT_DIR }}/.config \
163+
scripts/config --file "$OUT_DIR/.config" \
149164
--set-str CONFIG_LOCALVERSION "-KSU-${{ steps.ksu_info.outputs.ksu_version }}" \
150165
--disable CONFIG_LOCALVERSION_AUTO
151166
152-
scripts/config --file ${{ env.OUT_DIR }}/.config \
167+
scripts/config --file "$OUT_DIR/.config" \
153168
--disable CONFIG_DEBUG_INFO \
154169
--disable CONFIG_DEBUG_INFO_SPLIT \
155170
--disable CONFIG_DEBUG_INFO_REDUCED \
@@ -159,17 +174,17 @@ jobs:
159174
--enable CONFIG_STRIP_ASM_SYMS \
160175
--enable CONFIG_CC_OPTIMIZE_FOR_SIZE
161176
162-
make O=${{ env.OUT_DIR }} ARCH=arm64 CC=clang \
177+
make O="$OUT_DIR" ARCH=arm64 CC=clang \
163178
CLANG_TRIPLE=aarch64-linux-gnu- \
164179
CROSS_COMPILE=aarch64-linux-gnu- \
165180
olddefconfig
166181
167182
- name: Compile kernel
168183
run: |
169-
cd ${{ env.KERNEL_DIR }}
184+
cd "$KERNEL_DIR"
170185
export PATH=$HOME/toolchain/clang/bin:$PATH
171186
172-
make -j$(nproc --all) O=${{ env.OUT_DIR }} ARCH=arm64 \
187+
make -j$(nproc --all) O="$OUT_DIR" ARCH=arm64 \
173188
CC=clang LD=ld.lld AR=llvm-ar NM=llvm-nm \
174189
OBJCOPY=llvm-objcopy STRIP=llvm-strip \
175190
LLVM=1 LLVM_IAS=1 \
@@ -179,19 +194,19 @@ jobs:
179194
KCFLAGS="-w" \
180195
Image dtbs 2>&1 | tee $GITHUB_WORKSPACE/compile.log
181196
182-
if [ ! -f ${{ env.OUT_DIR }}/arch/arm64/boot/Image ]; then
197+
if [ ! -f "$OUT_DIR/arch/arm64/boot/Image" ]; then
183198
echo "::error::Build failed - kernel Image not found!"
184199
exit 1
185200
fi
186-
echo "Build successful! Size: $(du -h ${{ env.OUT_DIR }}/arch/arm64/boot/Image | cut -f1)"
201+
echo "Build successful! Size: $(du -h $OUT_DIR/arch/arm64/boot/Image | cut -f1)"
187202
188203
- name: Collect DTBs
189204
run: |
190-
find ${{ env.OUT_DIR }}/arch/arm64/boot/dts -name "*.dtb" 2>/dev/null \
191-
| sort | xargs cat > ${{ env.OUT_DIR }}/arch/arm64/boot/dtb.img 2>/dev/null || true
192-
if [ -s ${{ env.OUT_DIR }}/arch/arm64/boot/dtb.img ]; then
205+
find "$OUT_DIR/arch/arm64/boot/dts" -name "*.dtb" 2>/dev/null \
206+
| sort | xargs cat > "$OUT_DIR/arch/arm64/boot/dtb.img" 2>/dev/null || true
207+
if [ -s "$OUT_DIR/arch/arm64/boot/dtb.img" ]; then
193208
echo "HAS_DTB=true" >> $GITHUB_ENV
194-
echo "DTB size: $(du -h ${{ env.OUT_DIR }}/arch/arm64/boot/dtb.img | cut -f1)"
209+
echo "DTB size: $(du -h $OUT_DIR/arch/arm64/boot/dtb.img | cut -f1)"
195210
else
196211
echo "HAS_DTB=false" >> $GITHUB_ENV
197212
echo "No DTBs found."
@@ -201,53 +216,53 @@ jobs:
201216
run: |
202217
mkdir -p $GITHUB_WORKSPACE/ak3out
203218
python3 - <<'PYEOF'
204-
import os
205-
lines = [
206-
"# AnyKernel3 Ramdisk Mod Script\n",
207-
"# Samsung Galaxy A04s (SM-A047F) + KernelSU\n",
208-
"properties() { '\n",
209-
"kernel.string=Samsung A04s KernelSU Kernel\n",
210-
"do.devicecheck=1\n",
211-
"do.modules=0\n",
212-
"do.systemless=1\n",
213-
"do.cleanup=1\n",
214-
"do.cleanuponabort=1\n",
215-
"device.name1=a04s\n",
216-
"device.name2=a047f\n",
217-
"device.name3=SM-A047F\n",
218-
"device.name4=a047fxxu\n",
219-
"device.name5=a047x\n",
220-
"supported.versions=12-14\n",
221-
"supported.patchlevels=\n",
222-
"'; }\n",
223-
"block=auto;\n",
224-
"is_slot_device=0;\n",
225-
"ramdisk_compression=auto;\n",
226-
"patch_vbmeta_flag=auto;\n",
227-
". tools/ak3-core.sh;\n",
228-
"split_boot;\n",
229-
"if [ -f \"$AKHOME/dtb.img\" ]; then\n",
230-
" flash_dtb;\n",
231-
"fi\n",
232-
"flash_boot;\n",
233-
]
234-
out = os.path.join(os.environ['GITHUB_WORKSPACE'], 'ak3out', 'anykernel.sh')
235-
with open(out, 'w') as f:
236-
f.writelines(lines)
237-
print(f'Written: {out}')
238-
PYEOF
219+
import os
220+
lines = [
221+
"# AnyKernel3 Ramdisk Mod Script\n",
222+
"# Samsung Galaxy A04s (SM-A047F) + KernelSU\n",
223+
"properties() { '\n",
224+
"kernel.string=Samsung A04s KernelSU Kernel\n",
225+
"do.devicecheck=1\n",
226+
"do.modules=0\n",
227+
"do.systemless=1\n",
228+
"do.cleanup=1\n",
229+
"do.cleanuponabort=1\n",
230+
"device.name1=a04s\n",
231+
"device.name2=a047f\n",
232+
"device.name3=SM-A047F\n",
233+
"device.name4=a047fxxu\n",
234+
"device.name5=a047x\n",
235+
"supported.versions=12-14\n",
236+
"supported.patchlevels=\n",
237+
"'; }\n",
238+
"block=auto;\n",
239+
"is_slot_device=0;\n",
240+
"ramdisk_compression=auto;\n",
241+
"patch_vbmeta_flag=auto;\n",
242+
". tools/ak3-core.sh;\n",
243+
"split_boot;\n",
244+
"if [ -f \"$AKHOME/dtb.img\" ]; then\n",
245+
" flash_dtb;\n",
246+
"fi\n",
247+
"flash_boot;\n",
248+
]
249+
out = os.path.join(os.environ['GITHUB_WORKSPACE'], 'ak3out', 'anykernel.sh')
250+
with open(out, 'w') as f:
251+
f.writelines(lines)
252+
print(f'Written: {out}')
253+
PYEOF
239254

240255
- name: Package with AnyKernel3
241256
run: |
242257
git clone --depth=1 https://github.com/osm0sis/AnyKernel3 $GITHUB_WORKSPACE/AnyKernel3
243258
cd $GITHUB_WORKSPACE/AnyKernel3
244259
rm -rf .git .github *.md
245260
246-
cp ${{ env.OUT_DIR }}/arch/arm64/boot/Image ./
261+
cp "$OUT_DIR/arch/arm64/boot/Image" ./
247262
cp $GITHUB_WORKSPACE/ak3out/anykernel.sh ./
248263
249264
if [ "$HAS_DTB" = "true" ]; then
250-
cp ${{ env.OUT_DIR }}/arch/arm64/boot/dtb.img ./
265+
cp "$OUT_DIR/arch/arm64/boot/dtb.img" ./
251266
echo "DTB included."
252267
fi
253268
@@ -260,8 +275,8 @@ jobs:
260275
261276
- name: Verify zip contents
262277
run: |
263-
unzip -l "$GITHUB_WORKSPACE/${{ env.ZIP_NAME }}"
264-
unzip -l "$GITHUB_WORKSPACE/${{ env.ZIP_NAME }}" | grep -q "Image" \
278+
unzip -l "$GITHUB_WORKSPACE/$ZIP_NAME"
279+
unzip -l "$GITHUB_WORKSPACE/$ZIP_NAME" | grep -q "Image" \
265280
&& echo "Image present - OK" \
266281
|| { echo "::error::Image missing from zip!"; exit 1; }
267282

0 commit comments

Comments
 (0)