Skip to content

Commit b1097ab

Browse files
committed
Fix ReSukiSU version metadata in WSA builds
1 parent 28eeb99 commit b1097ab

5 files changed

Lines changed: 90 additions & 1 deletion

File tree

.github/workflows/build.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,16 @@ jobs:
6060
submodules: recursive
6161
fetch-depth: 1
6262

63+
- name: Hydrate and validate ReSukiSU version history
64+
run: |
65+
set -euo pipefail
66+
if [ "$(git -C KernelSU rev-parse --is-shallow-repository)" = "true" ]; then
67+
git -C KernelSU fetch --unshallow --tags origin
68+
fi
69+
resukisu_version="$(scripts/wsa-resukisu-version.sh KernelSU)"
70+
echo "ReSukiSU version code: $resukisu_version"
71+
echo "RESUKISU_VERSION_CODE=$resukisu_version" >> "$GITHUB_ENV"
72+
6373
- name: Install build dependencies
6474
run: |
6575
sudo apt-get update
@@ -96,6 +106,7 @@ jobs:
96106
set -e
97107
cp configs/wsa/config-wsa-x64 .config
98108
./scripts/config --file .config --set-str LOCALVERSION '-WSA-ReSukiSU'
109+
./scripts/config --file .config --set-str KSU_FULL_NAME_FORMAT '%TAG_NAME%-%COMMIT_SHA%@%REPO_NAME% (%KSU_VERSION%)'
99110
./scripts/config --file .config \
100111
-e KSU \
101112
-d KSU_DEBUG \
@@ -128,6 +139,14 @@ jobs:
128139
set -e
129140
make ARCH=x86_64 LLVM=1 CC="ccache clang" -j"$(nproc)" bzImage
130141
142+
- name: Verify embedded ReSukiSU version
143+
run: |
144+
set -euo pipefail
145+
version_object="$(find KernelSU/kernel -path '*/supercall/dispatch.o' -type f -print -quit)"
146+
test -n "$version_object"
147+
strings "$version_object" | grep -F "($RESUKISU_VERSION_CODE)"
148+
echo "Embedded ReSukiSU version verified: $RESUKISU_VERSION_CODE"
149+
131150
- name: Inspect output
132151
id: inspect
133152
run: |

KernelSU

scripts/wsa-release-manifest.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,15 @@ if git -C KernelSU rev-parse --is-inside-work-tree >/dev/null 2>&1; then
5454
kv kernelsu_commit "$(git -C KernelSU rev-parse HEAD 2>/dev/null || printf unknown)"
5555
kv kernelsu_branch "$(git -C KernelSU rev-parse --abbrev-ref HEAD 2>/dev/null || printf unknown)"
5656
kv kernelsu_dirty "$(git_tracked_dirty KernelSU)"
57+
kernelsu_shallow="$(git -C KernelSU rev-parse --is-shallow-repository)"
58+
kv kernelsu_shallow "$kernelsu_shallow"
59+
if [ "$kernelsu_shallow" = "true" ]; then
60+
printf 'cannot generate release metadata from shallow ReSukiSU history\n' >&2
61+
exit 1
62+
fi
63+
kernelsu_commit_count="$(git -C KernelSU rev-list --count HEAD)"
64+
kv kernelsu_commit_count "$kernelsu_commit_count"
65+
kv kernelsu_version_code "$((30000 + kernelsu_commit_count + 700))"
5766
if [ -f KernelSU/kernel/kpm/kpm_loader_x86_64.h ]; then
5867
loader_name="$(sed -n 's/^#define SUKISU_KPM_LOADER_NAME "\(.*\)"/\1/p' KernelSU/kernel/kpm/kpm_loader_x86_64.h)"
5968
loader_semver="$(sed -n 's/^#define SUKISU_KPM_LOADER_SEMVER "\(.*\)"/\1/p' KernelSU/kernel/kpm/kpm_loader_x86_64.h)"

scripts/wsa-resukisu-version.sh

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
REPO="${1:-KernelSU}"
5+
MINIMUM_VERSION="${MINIMUM_RESUKISU_VERSION:-35002}"
6+
7+
if ! git -C "$REPO" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
8+
printf 'ReSukiSU repository not found: %s\n' "$REPO" >&2
9+
exit 1
10+
fi
11+
12+
if [ "$(git -C "$REPO" rev-parse --is-shallow-repository)" = "true" ]; then
13+
printf 'shallow ReSukiSU history cannot produce a valid version code: %s\n' "$REPO" >&2
14+
printf 'fetch the complete history before building\n' >&2
15+
exit 1
16+
fi
17+
18+
COMMIT_COUNT="$(git -C "$REPO" rev-list --count HEAD)"
19+
case "$COMMIT_COUNT" in
20+
''|*[!0-9]*)
21+
printf 'invalid ReSukiSU commit count: %s\n' "$COMMIT_COUNT" >&2
22+
exit 1
23+
;;
24+
esac
25+
26+
VERSION_CODE=$((30000 + COMMIT_COUNT + 700))
27+
if [ "$VERSION_CODE" -lt "$MINIMUM_VERSION" ]; then
28+
printf 'ReSukiSU version %s is below the supported minimum %s\n' \
29+
"$VERSION_CODE" "$MINIMUM_VERSION" >&2
30+
exit 1
31+
fi
32+
33+
printf '%s\n' "$VERSION_CODE"

scripts/wsa-verify-release-manifest.sh

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,25 @@ fi
135135
actual_artifact_sha="$(sha256sum "$artifact" | awk '{ print $1 }')"
136136
check_equal artifact_sha256 "$expected_artifact_sha" "$actual_artifact_sha"
137137

138+
expected_kernelsu_shallow="$(required_value kernelsu_shallow)"
139+
check_equal kernelsu_shallow false "$expected_kernelsu_shallow"
140+
141+
expected_kernelsu_commit_count="$(required_value kernelsu_commit_count)"
142+
expected_kernelsu_version_code="$(required_value kernelsu_version_code)"
143+
case "$expected_kernelsu_commit_count:$expected_kernelsu_version_code" in
144+
*[!0-9:]*|:*|*:)
145+
printf 'invalid ReSukiSU version metadata in manifest\n' >&2
146+
exit 1
147+
;;
148+
esac
149+
calculated_kernelsu_version_code="$((30000 + expected_kernelsu_commit_count + 700))"
150+
check_equal kernelsu_version_code "$calculated_kernelsu_version_code" "$expected_kernelsu_version_code"
151+
if [ "$expected_kernelsu_version_code" -lt 35002 ]; then
152+
printf 'kernelsu_version_code is below the supported minimum: %s\n' \
153+
"$expected_kernelsu_version_code" >&2
154+
failures=1
155+
fi
156+
138157
if [ "$SKIP_SOURCE" != "1" ] && git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
139158
expected_kernel_commit="$(required_value kernel_commit)"
140159
actual_kernel_commit="$(git rev-parse HEAD)"
@@ -152,6 +171,15 @@ if [ "$SKIP_SOURCE" != "1" ] && git rev-parse --is-inside-work-tree >/dev/null 2
152171
expected_kernelsu_dirty="$(required_value kernelsu_dirty)"
153172
actual_kernelsu_dirty="$(git_tracked_dirty KernelSU)"
154173
check_equal kernelsu_dirty "$expected_kernelsu_dirty" "$actual_kernelsu_dirty"
174+
175+
actual_kernelsu_shallow="$(git -C KernelSU rev-parse --is-shallow-repository)"
176+
check_equal kernelsu_shallow "$expected_kernelsu_shallow" "$actual_kernelsu_shallow"
177+
178+
actual_kernelsu_commit_count="$(git -C KernelSU rev-list --count HEAD)"
179+
check_equal kernelsu_commit_count "$expected_kernelsu_commit_count" "$actual_kernelsu_commit_count"
180+
181+
actual_kernelsu_version_code="$((30000 + actual_kernelsu_commit_count + 700))"
182+
check_equal kernelsu_version_code "$expected_kernelsu_version_code" "$actual_kernelsu_version_code"
155183
fi
156184
fi
157185

0 commit comments

Comments
 (0)