ci(probe): 加一次性环境探针,为 Android APK 能否在 CI 构建取证
Design System Guard / guard (push) Successful in 5m40s
Design System Guard / guard (push) Successful in 5m40s
runner 到 github.com 已确认不通,而 Android 构建链依赖 dl.google.com / maven.google.com / gradle 分发 / apt / crates,这些通不通决定方案。 探针只挂 workflow_dispatch,不参与 push 触发;全部失败也 exit 0, 结论看日志里的 OK/FAIL 表。
This commit is contained in:
1 parent
71efe04e32
commit
e2848ca672
1 file changed
+84
@@ -0,0 +1,84 @@
|
||||
# 一次性环境探针:为「CI 上能否构建 Android APK」取证
|
||||
#
|
||||
# 只挂 workflow_dispatch,不会被 push 触发。
|
||||
# 触发方式:
|
||||
# curl -X POST -H "Authorization: token <t>" -H 'Content-Type: application/json' \
|
||||
# -d '{"ref":"main"}' \
|
||||
# http://<gitea>/api/v1/repos/mtfyun/inkwatch/actions/workflows/probe-android-env.yml/dispatches
|
||||
#
|
||||
# 目的:runner 到 github.com 不通(已实测),Android 构建链路依赖
|
||||
# dl.google.com / maven.google.com / gradle 分发 / apt / crates,
|
||||
# 这些通不通决定了方案,必须一次测全,不能靠猜。
|
||||
# 全部探测失败也不让 job 变红(exit 0),结果看日志里的 OK/FAIL 表。
|
||||
|
||||
name: Probe Android Env
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
probe:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- name: Probe network + toolchain
|
||||
run: |
|
||||
echo "===== 1. 出口探测(curl,8s 超时)====="
|
||||
probe() {
|
||||
local name="$1" url="$2"
|
||||
local t0=$(date +%s%N)
|
||||
local code
|
||||
code=$(curl -sS -o /dev/null -w '%{http_code}' -m 8 -L --connect-timeout 6 "$url" 2>/tmp/err.txt) || code="ERR"
|
||||
local ms=$(( ($(date +%s%N) - t0) / 1000000 ))
|
||||
if [ "$code" = "200" ] || [ "$code" = "301" ] || [ "$code" = "302" ] || [ "$code" = "403" ]; then
|
||||
printf ' OK %-34s %-4s %5sms %s\n' "$name" "$code" "$ms" "$url"
|
||||
else
|
||||
printf ' FAIL %-34s %-4s %5sms %s [%s]\n' "$name" "$code" "$ms" "$url" "$(head -c 90 /tmp/err.txt | tr '\n' ' ')"
|
||||
fi
|
||||
}
|
||||
|
||||
probe "dl.google.com(SDK清单)" "https://dl.google.com/android/repository/repository2-3.xml"
|
||||
probe "dl.google.com(SDK包)" "https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip"
|
||||
probe "maven.google.com(AGP)" "https://maven.google.com/com/android/tools/build/gradle/maven-metadata.xml"
|
||||
probe "maven.aliyun(google镜像)" "https://maven.aliyun.com/repository/google/com/android/tools/build/gradle/maven-metadata.xml"
|
||||
probe "maven.aliyun(central镜像)" "https://maven.aliyun.com/repository/public/org/jetbrains/kotlin/kotlin-stdlib/maven-metadata.xml"
|
||||
probe "repo.maven.apache.org" "https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/maven-metadata.xml"
|
||||
probe "services.gradle.org" "https://services.gradle.org/distributions/"
|
||||
probe "mirrors.cloud.tencent(gradle)" "https://mirrors.cloud.tencent.com/gradle/"
|
||||
probe "mirrors.cloud.tencent(AndroidSDK)" "https://mirrors.cloud.tencent.com/AndroidSDK/"
|
||||
probe "deb.debian.org(apt)" "http://deb.debian.org/debian/dists/bookworm/Release"
|
||||
probe "rsproxy(crates)" "https://rsproxy.cn/index/config.json"
|
||||
probe "storage.flutter-io.cn" "https://storage.flutter-io.cn/flutter_infra_release/releases/releases_linux.json"
|
||||
|
||||
echo
|
||||
echo "===== 2. 工具链现状 ====="
|
||||
for c in java javac gradle sdkmanager adb keytool unzip zip; do
|
||||
if command -v "$c" >/dev/null 2>&1; then
|
||||
printf ' 有 %-12s %s\n' "$c" "$(command -v "$c")"
|
||||
else
|
||||
printf ' 无 %-12s\n' "$c"
|
||||
fi
|
||||
done
|
||||
echo " node: $(node --version 2>/dev/null || echo 无)"
|
||||
if command -v java >/dev/null 2>&1; then java -version 2>&1 | sed 's/^/ /'; fi
|
||||
|
||||
echo
|
||||
echo "===== 3. apt 能否装 JDK ====="
|
||||
if apt-get update -qq >/tmp/apt.log 2>&1; then
|
||||
echo " apt-get update: OK"
|
||||
apt-cache policy openjdk-17-jdk-headless 2>/dev/null | head -4 | sed 's/^/ /'
|
||||
echo " (仅查可用版本,不实际安装,避免拖长探测)"
|
||||
else
|
||||
echo " apt-get update: FAIL"
|
||||
tail -5 /tmp/apt.log | sed 's/^/ /'
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "===== 4. 磁盘 / 内存 ====="
|
||||
df -h / /tmp 2>/dev/null | sed 's/^/ /'
|
||||
free -h 2>/dev/null | sed 's/^/ /'
|
||||
nproc | sed 's/^/ CPU 核数: /'
|
||||
|
||||
echo
|
||||
echo "===== 探测结束(本 job 一律 exit 0)====="
|
||||
exit 0
|
||||
Reference in new issue
Block a user