Compare commits
8 Commits
7e8ac5845c
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 166b2c0eb9 | |||
| 490d7d4d5a | |||
| 96c65cbea6 | |||
| 174ba237be | |||
| a1722bc39b | |||
| 29021df1dc | |||
| 6548e193dc | |||
| 49cf1e90f5 |
@@ -1,59 +0,0 @@
|
|||||||
name: Build and Push Docker Image
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths-ignore:
|
|
||||||
- '.github/patch_android.py'
|
|
||||||
- '.github/workflows/release.yml'
|
|
||||||
- 'package.json'
|
|
||||||
- 'README.md'
|
|
||||||
- 'README_zh.md'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
# 添加权限声明,确保可以推送到 GHCR
|
|
||||||
permissions:
|
|
||||||
packages: write
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
docker:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ github.actor }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USER }}
|
|
||||||
password: ${{ secrets.DOCKER_TOKEN }}
|
|
||||||
|
|
||||||
- name: Lowercase the repo name
|
|
||||||
run: echo "REPO_LOWER=${GITHUB_REPOSITORY_OWNER,,}" >> ${GITHUB_ENV}
|
|
||||||
|
|
||||||
- name: Build and push
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
push: true
|
|
||||||
tags: |
|
|
||||||
ghcr.io/${{ env.REPO_LOWER }}/embyx:latest
|
|
||||||
${{ secrets.DOCKER_USER }}/embyx:latest
|
|
||||||
cache-from: type=gha
|
|
||||||
cache-to: type=gha,mode=max
|
|
||||||
+115
-116
@@ -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,37 +11,70 @@ 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
|
||||||
uses: actions/setup-java@v4
|
run: |
|
||||||
with:
|
apt-get update -qq
|
||||||
java-version: '21'
|
apt-get install -y wget gnupg python3
|
||||||
distribution: 'temurin'
|
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
|
- name: Setup Node.js 22
|
||||||
uses: actions/setup-node@v6
|
run: |
|
||||||
with:
|
npm install -g n
|
||||||
node-version: 22
|
N_NODE_MIRROR=https://npmmirror.com/mirrors/node n 22
|
||||||
|
hash -r
|
||||||
|
node --version
|
||||||
|
|
||||||
# 动态生成中文版 capacitor.config.json(webDir 指向 zh/ 目录)
|
# ── 配置 Gradle / Maven 国内镜像(避免访问 gradle.org / google.com)────
|
||||||
- name: Create capacitor.config.json (zh)
|
- name: Configure Gradle & Maven Mirrors
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.gradle/init.d
|
||||||
|
cat > ~/.gradle/init.d/mirrors.gradle << 'EOF'
|
||||||
|
allprojects {
|
||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
maven { url "https://maven.aliyun.com/repository/google" }
|
||||||
|
maven { url "https://maven.aliyun.com/repository/central" }
|
||||||
|
maven { url "https://maven.aliyun.com/repository/gradle-plugins" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
repositories {
|
||||||
|
maven { url "https://maven.aliyun.com/repository/google" }
|
||||||
|
maven { url "https://maven.aliyun.com/repository/central" }
|
||||||
|
maven { url "https://maven.aliyun.com/repository/gradle-plugins" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# ── 构建中文版 APK ──────────────────────────────────────────────────────
|
||||||
|
- name: Build zh APK
|
||||||
run: |
|
run: |
|
||||||
cat > capacitor.config.json << 'EOF'
|
cat > capacitor.config.json << 'EOF'
|
||||||
{
|
{
|
||||||
@@ -63,55 +96,22 @@ 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
|
||||||
|
sed -i 's|services.gradle.org/distributions|mirrors.huaweicloud.com/gradle|g' \
|
||||||
|
android/gradle/wrapper/gradle-wrapper.properties
|
||||||
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
|
|
||||||
uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: 'temurin'
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@v6
|
|
||||||
with:
|
|
||||||
node-version: 22
|
|
||||||
|
|
||||||
# 动态生成英文版 capacitor.config.json(webDir 指向 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",
|
||||||
@@ -132,62 +132,61 @@ 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
|
||||||
|
sed -i 's|services.gradle.org/distributions|mirrors.huaweicloud.com/gradle|g' \
|
||||||
|
android/gradle/wrapper/gradle-wrapper.properties
|
||||||
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"
|
||||||
|
|||||||
Reference in New Issue
Block a user