重构:合并job+替换所有GitHub Action为本地命令,彻底消除github.com依赖
Android APK 构建 / Build & Release EmbyX APKs (push) Failing after 19m43s

This commit is contained in:
yuming
2026-05-17 16:20:14 +08:00
parent 174ba237be
commit 96c65cbea6
+74 -118
View File
@@ -1,9 +1,9 @@
name: Android APK 构建 name: Android APK 构建
# 触发条件: # 触发条件:
# 1. 每次推送代码到 main 分支:自动构建并更新名为 "latest" 的 Release (Rolling Release) # 1. 推送到 main 分支:自动构建并更新 preview 滚动版本
# 2. 推送 v* 格式 tag(如 v1.0):自动构建并发布正式 Release # 2. 推送 v* 格式 tag:构建正式版本
# 3. 手动触发workflow_dispatch):手动指定 tag 发布 # 3. 手动触发指定 tag 发布
on: on:
push: push:
branches: [ main ] branches: [ main ]
@@ -11,28 +11,31 @@ on:
workflow_dispatch: workflow_dispatch:
inputs: inputs:
release_tag: release_tag:
description: '上传到已有标签 (如 v1.0)' description: '发布标签 (如 v1.0)'
required: true required: true
default: 'v1.0' default: 'v1.0'
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
permissions: permissions:
contents: write contents: write
jobs: jobs:
# ── 中文版 APK 构建 ────────────────────────────────────────────────────────── build-and-release:
build-android-zh: name: Build & Release EmbyX APKs
name: Build EmbyX-zh APK
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 # 手动 clone,避免从 github.com 下载 actions/checkout 超时
- name: Checkout
run: |
git init
git remote add origin \
http://oauth2:${{ secrets.GITHUB_TOKEN }}@192.168.1.66:3000/adminym/embyx.git
git fetch --depth=1 origin ${{ github.sha }}
git checkout FETCH_HEAD
- name: Setup JDK 21 - name: Setup JDK 21 & Python3
run: | run: |
apt-get update -qq apt-get update -qq
apt-get install -y wget gnupg apt-get install -y wget gnupg python3
wget -qO- https://packages.adoptium.net/artifactory/api/gpg/key/public \ wget -qO- https://packages.adoptium.net/artifactory/api/gpg/key/public \
| gpg --dearmor > /usr/share/keyrings/adoptium.gpg | gpg --dearmor > /usr/share/keyrings/adoptium.gpg
echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] \ echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] \
@@ -49,8 +52,8 @@ jobs:
hash -r hash -r
node --version node --version
# 动态生成中文版 capacitor.config.jsonwebDir 指向 zh/ 目录) # ── 构建中文版 APK ──────────────────────────────────────────────────────
- name: Create capacitor.config.json (zh) - name: Build zh APK
run: | run: |
cat > capacitor.config.json << 'EOF' cat > capacitor.config.json << 'EOF'
{ {
@@ -72,64 +75,20 @@ jobs:
} }
} }
EOF EOF
npm install
- name: Install Capacitor dependencies
run: npm install
- name: Add & Sync Android Platform
run: |
npx cap add android npx cap add android
npx cap sync android npx cap sync android
python3 .github/patch_android.py --lang zh
# 运行补丁脚本:替换图标、注册屏保、添加全屏模式
- name: Patch Android Project (zh)
run: python .github/patch_android.py --lang zh
- name: Build Debug APK
run: |
cd android cd android
chmod +x gradlew chmod +x gradlew
./gradlew assembleDebug ./gradlew assembleDebug
mv app/build/outputs/apk/debug/app-debug.apk ../EmbyX-zh.apk
cd ..
- name: Rename to EmbyX-zh.apk # ── 构建英文版 APK(复用已下载的 Gradle 缓存)──────────────────────────
run: mv android/app/build/outputs/apk/debug/app-debug.apk EmbyX-zh.apk - name: Build en APK
- name: Upload Artifact
uses: actions/upload-artifact@v7
with:
name: embyx-zh
path: EmbyX-zh.apk
# ── 英文版 APK 构建 ──────────────────────────────────────────────────────────
build-android-en:
name: Build EmbyX-en APK
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup JDK 21
run: |
apt-get update -qq
apt-get install -y wget gnupg
wget -qO- https://packages.adoptium.net/artifactory/api/gpg/key/public \
| gpg --dearmor > /usr/share/keyrings/adoptium.gpg
echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] \
https://packages.adoptium.net/artifactory/deb bullseye main" \
> /etc/apt/sources.list.d/adoptium.list
apt-get update -qq
apt-get install -y temurin-21-jdk
java -version
- name: Setup Node.js 22
run: |
npm install -g n
n 22
hash -r
node --version
# 动态生成英文版 capacitor.config.jsonwebDir 指向 en/ 目录)
- name: Create capacitor.config.json (en)
run: | run: |
rm -rf android
cat > capacitor.config.json << 'EOF' cat > capacitor.config.json << 'EOF'
{ {
"appId": "juneix.embyx", "appId": "juneix.embyx",
@@ -150,62 +109,59 @@ jobs:
} }
} }
EOF EOF
npm install
- name: Install Capacitor dependencies
run: npm install
- name: Add & Sync Android Platform
run: |
npx cap add android npx cap add android
npx cap sync android npx cap sync android
python3 .github/patch_android.py --lang en
# 运行补丁脚本:替换图标、注册屏保、添加全屏模式
- name: Patch Android Project (en)
run: python .github/patch_android.py --lang en
- name: Build Debug APK
run: |
cd android cd android
chmod +x gradlew chmod +x gradlew
./gradlew assembleDebug ./gradlew assembleDebug
mv app/build/outputs/apk/debug/app-debug.apk ../EmbyX-en.apk
cd ..
- name: Rename to EmbyX-en.apk # ── 发布到 Gitea Release(全程用本地 API,不访问 GitHub)───────────────
run: mv android/app/build/outputs/apk/debug/app-debug.apk EmbyX-en.apk
- name: Upload Artifact
uses: actions/upload-artifact@v7
with:
name: embyx-en
path: EmbyX-en.apk
# ── 发布 Release ─────────────────────────────────────────────────────────────
# 当推送到 main 分支、打 v* 标签或手动触发时执行
release:
name: Create GitHub Release
needs: [build-android-zh, build-android-en]
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' || startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/main'
steps:
- name: Download all artifacts
uses: actions/download-artifact@v7
- name: Verify APK files exist
run: |
ls -R
test -f "embyx-zh/EmbyX-zh.apk"
test -f "embyx-en/EmbyX-en.apk"
- name: Create Release - name: Create Release
uses: softprops/action-gh-release@v3 run: |
with: if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
# 如果是 main 分支,固定使用 preview 标签以便滚动更新 TAG="${{ inputs.release_tag }}"
tag_name: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || (github.ref_name == 'main' && 'preview' || github.ref_name) }} RNAME="${{ inputs.release_tag }}"
name: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || (github.ref_name == 'main' && 'EmbyX Preview' || github.ref_name) }} PRE=false
prerelease: ${{ github.event_name == 'push' && github.ref_name == 'main' }} elif [ "${{ github.ref_name }}" = "main" ]; then
draft: false TAG="preview"
fail_on_unmatched_files: true RNAME="EmbyX Preview"
files: | PRE=true
embyx-zh/EmbyX-zh.apk else
embyx-en/EmbyX-en.apk TAG="${{ github.ref_name }}"
env: RNAME="${{ github.ref_name }}"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PRE=false
fi
API="http://192.168.1.66:3000/api/v1/repos/adminym/embyx"
AUTH="Authorization: token ${{ secrets.GITHUB_TOKEN }}"
# 删除旧的同名 release(用于 preview 滚动更新)
OLD_ID=$(curl -sf "$API/releases/tags/$TAG" -H "$AUTH" \
| python3 -c "import sys,json; print(json.load(sys.stdin).get('id',''))" \
2>/dev/null || echo "")
if [ -n "$OLD_ID" ] && [ "$OLD_ID" != "None" ]; then
curl -sf -X DELETE "$API/releases/$OLD_ID" -H "$AUTH" || true
curl -sf -X DELETE "$API/tags/$TAG" -H "$AUTH" || true
fi
# 创建新 release
RID=$(curl -sf -X POST "$API/releases" \
-H "$AUTH" -H "Content-Type: application/json" \
-d "{\"tag_name\":\"$TAG\",\"name\":\"$RNAME\",\"prerelease\":$PRE,\"draft\":false}" \
| python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Release ID: $RID"
# 上传中文版 APK
curl -sf -X POST "$API/releases/$RID/assets?name=EmbyX-zh.apk" \
-H "$AUTH" -F "attachment=@EmbyX-zh.apk"
# 上传英文版 APK
curl -sf -X POST "$API/releases/$RID/assets?name=EmbyX-en.apk" \
-H "$AUTH" -F "attachment=@EmbyX-en.apk"
echo "发布完成: http://192.168.1.66:3000/adminym/embyx/releases/tag/$TAG"