构建 OpenList KernelSU 模块 #80
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: 构建 OpenList KernelSU 模块 | |
| on: | |
| schedule: | |
| - cron: '0 */4 * * *' # 每4小时运行一次 | |
| workflow_dispatch: # 支持手动触发 | |
| push: | |
| branches: | |
| - main # 推送 main 分支时触发 | |
| permissions: | |
| contents: write # 允许推送代码和创建 Release | |
| actions: read # 允许读取 Actions 状态 | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 检出仓库代码 | |
| - name: 检出仓库代码 | |
| uses: actions/checkout@v4 | |
| # 安装依赖工具 | |
| - name: 安装依赖 | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y curl zip gh | |
| # 获取 OpenList 最新版本 | |
| - name: 获取 OpenList 最新版本 | |
| id: get_version | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| API_URL: https://api.github.com/repos/OpenListTeam/OpenList/releases/latest | |
| run: | | |
| for i in {1..3}; do | |
| RESPONSE=$(curl -s -L -w "\n%{http_code}" -H "Authorization: Bearer $GITHUB_TOKEN" "$API_URL") | |
| HTTP_CODE=$(echo "$RESPONSE" | tail -n1) | |
| BODY=$(echo "$RESPONSE" | sed '$d') | |
| if [ "$HTTP_CODE" -eq 200 ] && [ -n "$BODY" ]; then | |
| echo "成功获取 OpenList Release 数据" | |
| echo "$BODY" > latest_release.json | |
| break | |
| fi | |
| echo "尝试 $i 失败,HTTP 状态码: $HTTP_CODE" | |
| sleep $((5 * i)) | |
| done | |
| if [ ! -f latest_release.json ] || [ ! -s latest_release.json ]; then | |
| echo "::error::无法获取 OpenList 版本信息" | |
| exit 1 | |
| fi | |
| # 提取版本号 | |
| VERSION=$(echo "$BODY" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') | |
| if [ -z "$VERSION" ]; then | |
| echo "::error::无法提取版本号" | |
| cat latest_release.json | |
| exit 1 | |
| fi | |
| # 生成版本代码(比如 v1.2.3 -> 120) | |
| VERSION_CODE=$(echo "$VERSION" | tr -d 'v' | tr -d '.' | awk '{printf "%d%02d", $1, $2}') | |
| # 提取下载链接 | |
| ARM_URL=$(echo "$BODY" | grep '"browser_download_url":' | grep 'openlist-android-arm.tar.gz' | sed -E 's/.*"([^"]+)".*/\1/') | |
| ARM64_URL=$(echo "$BODY" | grep '"browser_download_url":' | grep 'openlist-android-arm64.tar.gz' | sed -E 's/.*"([^"]+)".*/\1/') | |
| CHANGELOG=$(echo "$BODY" | grep '"body":' | sed -E 's/.*"body":\s*"([^"]+)"([,}]).*/\1/' | sed 's/\\"/"/g') | |
| if [ -z "$ARM_URL" ] || [ -z "$ARM64_URL" ]; then | |
| echo "::error::无法提取二进制下载链接" | |
| exit 1 | |
| fi | |
| # 设置环境变量 | |
| echo "OPENLIST_VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "OPENLIST_VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV | |
| echo "OPENLIST_ARM_URL=$ARM_URL" >> $GITHUB_ENV | |
| echo "OPENLIST_ARM64_URL=$ARM64_URL" >> $GITHUB_ENV | |
| echo "OPENLIST_CHANGELOG=$CHANGELOG" >> $GITHUB_ENV | |
| # 检查当前模块版本 | |
| - name: 检查当前模块版本 | |
| id: check_version | |
| run: | | |
| if [ -f update.json ]; then | |
| CURRENT_VERSION=$(grep '"version":' update.json | sed -E 's/.*"version":\s*"([^"]+)".*/\1/') | |
| echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV | |
| else | |
| echo "CURRENT_VERSION=none" >> $GITHUB_ENV | |
| fi | |
| # 比较版本并决定是否构建 | |
| - name: 检查是否需要构建 | |
| id: should_build | |
| run: | | |
| if [ "${{ env.CURRENT_VERSION }}" = "none" ] || [ "${{ env.OPENLIST_VERSION }}" != "${{ env.CURRENT_VERSION }}" ]; then | |
| echo "需要构建新模块:OpenList 版本 ${{ env.OPENLIST_VERSION }},当前模块版本 ${{ env.CURRENT_VERSION }}" | |
| echo "SHOULD_BUILD=true" >> $GITHUB_ENV | |
| else | |
| echo "模块版本已是最新 (${{ env.OPENLIST_VERSION }}),无需构建" | |
| echo "SHOULD_BUILD=false" >> $GITHUB_ENV | |
| fi | |
| # 同步 OpenList 二进制文件 | |
| - name: 同步 OpenList 二进制文件 | |
| if: env.SHOULD_BUILD == 'true' | |
| run: | | |
| # 下载并解压 ARM 版本 | |
| curl -L -o openlist-arm.tar.gz "${{ env.OPENLIST_ARM_URL }}" | |
| tar -xzf openlist-arm.tar.gz | |
| mv openlist openlist-arm | |
| rm -f openlist-arm.tar.gz | |
| # 下载并解压 ARM64 版本 | |
| curl -L -o openlist-arm64.tar.gz "${{ env.OPENLIST_ARM64_URL }}" | |
| tar -xzf openlist-arm64.tar.gz | |
| mv openlist openlist-arm64 | |
| rm -f openlist-arm64.tar.gz | |
| # 移动二进制文件到模块目录 | |
| mv openlist-arm OpenList-KernelSU/ | |
| mv openlist-arm64 OpenList-KernelSU/ | |
| # 设置权限 | |
| chmod 755 OpenList-KernelSU/openlist-arm OpenList-KernelSU/openlist-arm64 | |
| # 更新配置文件 | |
| - name: 更新配置文件 | |
| if: env.SHOULD_BUILD == 'true' | |
| run: | | |
| # 更新 update.json | |
| cat > update.json << EOF | |
| { | |
| "version": "${{ env.OPENLIST_VERSION }}", | |
| "versionCode": ${{ env.OPENLIST_VERSION_CODE }}, | |
| "zipUrl": "${{ github.server_url }}/${{ github.repository }}/releases/download/${{ env.OPENLIST_VERSION }}/openlist-ksu-${{ env.OPENLIST_VERSION }}.zip", | |
| "changelog": "${{ github.server_url }}/${{ github.repository }}/raw/main/OpenList-KernelSU/CHANGELOG.md" | |
| } | |
| EOF | |
| # 更新 module.prop | |
| if [ -f OpenList-KernelSU/module.prop ]; then | |
| sed -i "s/^version=.*/version=${{ env.OPENLIST_VERSION }}/" OpenList-KernelSU/module.prop | |
| sed -i "s/^versionCode=.*/versionCode=${{ env.OPENLIST_VERSION_CODE }}/" OpenList-KernelSU/module.prop | |
| else | |
| echo "::error::module.prop 文件不存在" | |
| exit 1 | |
| fi | |
| # 提交更改 | |
| git config user.name "GitHub Actions" | |
| git config user.email "actions@github.com" | |
| git add update.json OpenList-KernelSU/module.prop | |
| git commit -m "更新模块到 OpenList ${{ env.OPENLIST_VERSION }}" || echo "无更改需要提交" | |
| git push origin main | |
| # 打包模块 | |
| - name: 打包模块 | |
| if: env.SHOULD_BUILD == 'true' | |
| run: | | |
| cd OpenList-KernelSU | |
| zip -r ../openlist-ksu-${{ env.OPENLIST_VERSION }}.zip . | |
| cd .. | |
| # 创建 Release | |
| - name: 创建 Release | |
| if: env.SHOULD_BUILD == 'true' | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh release create "${{ env.OPENLIST_VERSION }}" \ | |
| --title "OpenList KernelSU Module ${{ env.OPENLIST_VERSION }}" \ | |
| --notes "Synced with OpenList official release v${{ env.OPENLIST_VERSION }}\n${{ env.OPENLIST_CHANGELOG }}" \ | |
| --draft=false \ | |
| --prerelease=false \ | |
| "openlist-ksu-${{ env.OPENLIST_VERSION }}.zip" | |
| # 清理临时文件 | |
| - name: 清理临时文件 | |
| if: always() | |
| run: | | |
| rm -rf openlist-ksu-*.zip openlist-arm*.tar.gz latest_release.json |