Skip to content

Commit 66b3ed4

Browse files
committed
fix(ci): resolve Alpine apk revisions dynamically + gate close-issues to upstream
- android.yml + prepare-android-runtime.sh: Alpine bumped musl r9 -> r11 on v3.21, breaking the APK build with 404. Scrape the Alpine index instead of hardcoding revisions so future bumps don't break CI. Same treatment for libstdc++/libgcc. - close-issues.yml: script targets anomalyco/opencode in hardcoded form, the fork's GITHUB_TOKEN hits 403 when commenting on upstream issues. Guard with github.repository == 'anomalyco/opencode' (same pattern as publish.yml).
1 parent 6310896 commit 66b3ed4

3 files changed

Lines changed: 40 additions & 14 deletions

File tree

.github/workflows/android.yml

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,35 @@ jobs:
6666
unzip -o -q /tmp/bun.zip -d /tmp/bun-extract
6767
cp /tmp/bun-extract/bun-linux-aarch64-musl/bun "$JNIDIR/libbun_exec.so"
6868
69+
# Resolve the latest apk revision from the Alpine index. Alpine bumps
70+
# `-r*` revisions without warning, so hardcoding breaks the build with 404.
71+
ALPINE_INDEX="https://dl-cdn.alpinelinux.org/alpine/v3.21/main/aarch64"
72+
resolve_apk() {
73+
local pkg="$1"
74+
curl -fsSL "$ALPINE_INDEX/" \
75+
| grep -oE "${pkg}-[0-9][0-9.]*-r[0-9]+\.apk" \
76+
| sort -uV | tail -1
77+
}
78+
6979
# musl dynamic linker
7080
echo "Downloading musl libc..."
71-
curl -fsSL https://dl-cdn.alpinelinux.org/alpine/v3.21/main/aarch64/musl-1.2.5-r9.apk -o /tmp/musl.apk
81+
MUSL_APK=$(resolve_apk "musl")
82+
echo "Resolved: $MUSL_APK"
83+
curl -fsSL "$ALPINE_INDEX/$MUSL_APK" -o /tmp/musl.apk
7284
cd /tmp && tar -xzf musl.apk lib/ld-musl-aarch64.so.1
7385
cp /tmp/lib/ld-musl-aarch64.so.1 "$GITHUB_WORKSPACE/$JNIDIR/libmusl_linker.so"
7486
cd "$GITHUB_WORKSPACE"
7587
7688
# libstdc++ and libgcc_s
7789
echo "Downloading C++ runtime libs..."
78-
curl -fsSL https://dl-cdn.alpinelinux.org/alpine/v3.21/main/aarch64/libstdc++-14.2.0-r4.apk -o /tmp/libstdcpp.apk
79-
curl -fsSL https://dl-cdn.alpinelinux.org/alpine/v3.21/main/aarch64/libgcc-14.2.0-r4.apk -o /tmp/libgcc.apk
80-
cd /tmp && tar -xzf libstdcpp.apk usr/lib/libstdc++.so.6.0.33
90+
LIBSTDCPP_APK=$(resolve_apk "libstdc\+\+")
91+
LIBGCC_APK=$(resolve_apk "libgcc")
92+
echo "Resolved: $LIBSTDCPP_APK / $LIBGCC_APK"
93+
curl -fsSL "$ALPINE_INDEX/$LIBSTDCPP_APK" -o /tmp/libstdcpp.apk
94+
curl -fsSL "$ALPINE_INDEX/$LIBGCC_APK" -o /tmp/libgcc.apk
95+
cd /tmp && tar -xzf libstdcpp.apk --wildcards 'usr/lib/libstdc++.so.6.*'
8196
cd /tmp && tar -xzf libgcc.apk usr/lib/libgcc_s.so.1
82-
cp /tmp/usr/lib/libstdc++.so.6.0.33 "$GITHUB_WORKSPACE/$JNIDIR/libstdcpp_compat.so"
97+
cp /tmp/usr/lib/libstdc++.so.6.* "$GITHUB_WORKSPACE/$JNIDIR/libstdcpp_compat.so"
8398
cp /tmp/usr/lib/libgcc_s.so.1 "$GITHUB_WORKSPACE/$JNIDIR/libgcc_compat.so"
8499
cd "$GITHUB_WORKSPACE"
85100

.github/workflows/close-issues.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ on:
77

88
jobs:
99
close:
10+
# Script cible anomalyco/opencode : ne rien tenter depuis un fork (GITHUB_TOKEN → 403).
11+
if: github.repository == 'anomalyco/opencode'
1012
runs-on: ubuntu-latest
1113
permissions:
1214
contents: read

packages/mobile/scripts/prepare-android-runtime.sh

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,31 @@ echo "[1b/6] Downloading musl libc + C++ runtime libs..."
3333
LIB_DIR="$RUNTIME_DIR/lib"
3434
mkdir -p "$LIB_DIR"
3535

36+
# Resolve the latest apk revision from the Alpine index. Alpine bumps `-r*`
37+
# revisions without warning, so hardcoding breaks the download with 404.
38+
ALPINE_INDEX="https://dl-cdn.alpinelinux.org/alpine/v3.21/main/aarch64"
39+
resolve_apk() {
40+
curl -fsSL "$ALPINE_INDEX/" \
41+
| grep -oE "$1-[0-9][0-9.]*-r[0-9]+\.apk" \
42+
| sort -uV | tail -1
43+
}
44+
3645
# musl dynamic linker (required to run musl-linked binaries on Android Bionic)
37-
MUSL_URL="https://dl-cdn.alpinelinux.org/alpine/v3.21/main/aarch64/musl-1.2.5-r9.apk"
38-
curl -fsSL "$MUSL_URL" -o "$TEMP_DIR/musl.apk"
46+
MUSL_APK=$(resolve_apk "musl")
47+
curl -fsSL "$ALPINE_INDEX/$MUSL_APK" -o "$TEMP_DIR/musl.apk"
3948
cd "$TEMP_DIR" && tar -xzf musl.apk lib/ld-musl-aarch64.so.1 2>/dev/null
4049
cp "$TEMP_DIR/lib/ld-musl-aarch64.so.1" "$LIB_DIR/ld-musl-aarch64.so.1"
4150
chmod 755 "$LIB_DIR/ld-musl-aarch64.so.1"
42-
echo " musl: $(du -sh "$LIB_DIR/ld-musl-aarch64.so.1" | cut -f1)"
51+
echo " musl ($MUSL_APK): $(du -sh "$LIB_DIR/ld-musl-aarch64.so.1" | cut -f1)"
4352

4453
# libstdc++ and libgcc_s (Bun depends on C++ runtime, not available on Android)
45-
LIBSTDCPP_URL="https://dl-cdn.alpinelinux.org/alpine/v3.21/main/aarch64/libstdc++-14.2.0-r4.apk"
46-
LIBGCC_URL="https://dl-cdn.alpinelinux.org/alpine/v3.21/main/aarch64/libgcc-14.2.0-r4.apk"
47-
curl -fsSL "$LIBSTDCPP_URL" -o "$TEMP_DIR/libstdcpp.apk"
48-
curl -fsSL "$LIBGCC_URL" -o "$TEMP_DIR/libgcc.apk"
49-
cd "$TEMP_DIR" && tar -xzf libstdcpp.apk usr/lib/libstdc++.so.6.0.33 2>/dev/null
54+
LIBSTDCPP_APK=$(resolve_apk "libstdc\+\+")
55+
LIBGCC_APK=$(resolve_apk "libgcc")
56+
curl -fsSL "$ALPINE_INDEX/$LIBSTDCPP_APK" -o "$TEMP_DIR/libstdcpp.apk"
57+
curl -fsSL "$ALPINE_INDEX/$LIBGCC_APK" -o "$TEMP_DIR/libgcc.apk"
58+
cd "$TEMP_DIR" && tar -xzf libstdcpp.apk --wildcards 'usr/lib/libstdc++.so.6.*' 2>/dev/null
5059
cd "$TEMP_DIR" && tar -xzf libgcc.apk usr/lib/libgcc_s.so.1 2>/dev/null
51-
cp "$TEMP_DIR/usr/lib/libstdc++.so.6.0.33" "$LIB_DIR/libstdc++.so.6"
60+
cp "$TEMP_DIR"/usr/lib/libstdc++.so.6.* "$LIB_DIR/libstdc++.so.6"
5261
cp "$TEMP_DIR/usr/lib/libgcc_s.so.1" "$LIB_DIR/libgcc_s.so.1"
5362
chmod 755 "$LIB_DIR/libstdc++.so.6" "$LIB_DIR/libgcc_s.so.1"
5463
echo " libstdc++: $(du -sh "$LIB_DIR/libstdc++.so.6" | cut -f1)"

0 commit comments

Comments
 (0)