update 2026-10-25 16:53:21

This commit is contained in:
action committed 2026-10-25 16:53:21 +08:00
1 parent 91f217be10
commit 7fca8e9a3a
74 files changed
+1429 -918

No files matched your search

+83 -33
View File
@@ -5,18 +5,23 @@ on:
tags:
- 'v*'
- 'dev-*'
workflow_dispatch:
permissions:
contents: write
env:
TARGET: x86
SUBTARGET: 64
SUBTARGET: '64'
PKG_DIR_NAME: luci-app-adguardhome
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 90
defaults:
run:
shell: bash
steps:
- name: 检出代码
@@ -28,47 +33,79 @@ jobs:
run: |
sudo apt update
sudo apt install -y build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses5-dev libssl-dev \
python3-setuptools rsync swig unzip zlib1g-dev file wget zstd jq
gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \
python3-setuptools rsync swig unzip zlib1g-dev file curl zstd jq
- name: 下载 SDK
- name: 确定 SDK 版本
id: sdk
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
echo "🔍 获取 OpenWrt 25.12 最新版本..."
LATEST_TAG=$(
curl -fsSL https://api.github.com/repos/openwrt/openwrt/releases?per_page=50 \
| jq -r '.[].tag_name' \
| grep -E '^v25\.12\.[0-9]+(-rc[0-9]+)?$' \
| sort -V \
| tail -n 1
RELEASE=$(
curl --fail --silent --show-error --location --retry 3 \
-H "Authorization: Bearer ${GH_TOKEN}" \
'https://api.github.com/repos/openwrt/openwrt/releases?per_page=100' \
| jq -r '.[] | select(.draft == false and .prerelease == false) | .tag_name
| select(test("^v25\\.12\\.[0-9]+$")) | ltrimstr("v")' \
| sort -V | tail -n 1
)
[[ -n "$RELEASE" ]] || { echo '::error::未找到 OpenWrt 25.12 正式版'; exit 1; }
BASE="https://downloads.openwrt.org/releases/${RELEASE}/targets/${TARGET}/${SUBTARGET}"
SDK_CACHE="${RUNNER_TEMP}/adguardhome-sdk-download"
mkdir -p "$SDK_CACHE"
curl -fSL --retry 3 "$BASE/sha256sums" -o "$RUNNER_TEMP/adguardhome-sdk-sha256sums"
SDK_TARBALL=$(awk '{ name=$2; sub(/^\*/, "", name); if (name ~ /^openwrt-sdk-.*\.tar\.zst$/) print name }' "$RUNNER_TEMP/adguardhome-sdk-sha256sums")
[[ -n "$SDK_TARBALL" && "$SDK_TARBALL" != *$'\n'* && "$SDK_TARBALL" != */* ]] || {
echo '::error::无法唯一确定 SDK 文件'; exit 1;
}
SDK_SHA=$(awk -v name="$SDK_TARBALL" '{ file=$2; sub(/^\*/, "", file); if (file == name) print $1 }' "$RUNNER_TEMP/adguardhome-sdk-sha256sums")
[[ "$SDK_SHA" =~ ^[0-9a-f]{64}$ ]]
echo "sha256=$SDK_SHA" >> "$GITHUB_OUTPUT"
echo "SDK_URL=$BASE/$SDK_TARBALL" >> "$GITHUB_ENV"
echo "SDK_TARBALL=$SDK_TARBALL" >> "$GITHUB_ENV"
echo "SDK_SHA=$SDK_SHA" >> "$GITHUB_ENV"
echo "OpenWrt SDK: ${RELEASE}" >> "$GITHUB_STEP_SUMMARY"
if [[ -z "${LATEST_TAG}" || "${LATEST_TAG}" == "null" ]]; then
echo "❌ 获取 OpenWrt 25.12.x tag 失败"
exit 1
- name: 缓存 SDK 压缩包
uses: actions/cache@v5
with:
path: ${{ runner.temp }}/adguardhome-sdk-download
key: adguardhome-sdk-v1-${{ runner.os }}-${{ env.TARGET }}-${{ env.SUBTARGET }}-${{ steps.sdk.outputs.sha256 }}
- name: 校验并解压 SDK
run: |
set -euo pipefail
SDK_CACHE="${RUNNER_TEMP}/adguardhome-sdk-download"
SDK_ROOT="${RUNNER_TEMP}/adguardhome-sdk"
mkdir -p "$SDK_CACHE" "$SDK_ROOT"
cd "$SDK_CACHE"
# 缓存命中也校验官方摘要;缺失或损坏时重新下载。
if ! printf '%s %s\n' "$SDK_SHA" "$SDK_TARBALL" | sha256sum -c -; then
curl -fSL --retry 3 "$SDK_URL" -o "$SDK_TARBALL"
fi
printf '%s %s\n' "$SDK_SHA" "$SDK_TARBALL" | sha256sum -c -
tar --zstd -xf "$SDK_TARBALL" -C "$SDK_ROOT"
SDK_DIR=$(find "$SDK_ROOT" -mindepth 1 -maxdepth 1 -type d -name 'openwrt-sdk-*' -print)
[[ -n "$SDK_DIR" && "$SDK_DIR" != *$'\n'* ]]
echo "SDK_DIR=$SDK_DIR" >> "$GITHUB_ENV"
RELEASE="${LATEST_TAG#v}"
echo "检测到 25.12 系列最新版本: ${RELEASE}"
echo "📥 下载 SDK..."
BASE="https://downloads.openwrt.org/releases/${RELEASE}/targets/${TARGET}/${SUBTARGET}/"
SDK_TARBALL=$(curl -fsSL "$BASE" | grep -o 'openwrt-sdk-[^"]*\.tar\.zst' | head -n1)
mkdir -p _sdk
wget -q "${BASE}${SDK_TARBALL}" -O _sdk/sdk.tar.zst
tar --zstd -xf _sdk/sdk.tar.zst -C _sdk
SDK_DIR="$(find "$PWD/_sdk" -maxdepth 1 -type d -name 'openwrt-sdk-*' -print -quit)"
echo "SDK_DIR=${SDK_DIR}" >> "$GITHUB_ENV"
echo "✅ SDK 已解压到: ${SDK_DIR}"
- name: 缓存依赖源码下载
uses: actions/cache@v5
with:
path: ${{ env.SDK_DIR }}/dl
key: adguardhome-dl-v1-${{ runner.os }}-${{ steps.sdk.outputs.sha256 }}-${{ hashFiles('Makefile', '.github/workflows/build-apk.yaml') }}
restore-keys: |
adguardhome-dl-v1-${{ runner.os }}-${{ steps.sdk.outputs.sha256 }}-
- name: 构建包
run: |
set -euo pipefail
cd "$SDK_DIR"
mkdir -p package/${PKG_DIR_NAME}
rsync -a --delete "$GITHUB_WORKSPACE/" "package/${PKG_DIR_NAME}/" \
--exclude '.git*' --exclude '_sdk'
--exclude '.git*' --exclude '.local' --exclude '_sdk' --exclude 'dist'
./scripts/feeds update -a
./scripts/feeds install luci-base tar
@@ -91,17 +128,30 @@ jobs:
make package/compile -j"$(nproc)" V=sc
- name: 上传产物
uses: actions/upload-artifact@v4
- name: 整理 APK 产物
run: |
set -euo pipefail
mkdir -p "$GITHUB_WORKSPACE/dist"
mapfile -t packages < <(find "$SDK_DIR/bin/packages" -type f -name "${PKG_DIR_NAME}-*.apk")
if (( ${#packages[@]} == 0 )); then
echo '::error::未找到 AdGuardHome APK'
exit 1
fi
cp "${packages[@]}" "$GITHUB_WORKSPACE/dist/"
- name: 上传独立 APK
uses: actions/upload-artifact@v7
with:
name: pkg-${{ github.ref_name }}
path: _sdk/**/bin/packages/**/${{ env.PKG_DIR_NAME }}*
path: dist/*.apk
archive: false
if-no-files-found: error
- name: 发布到 Releases
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v3
with:
tag_name: ${{ github.ref_name }}
prerelease: ${{ startsWith(github.ref_name, 'dev-') }}
make_latest: ${{ startsWith(github.ref_name, 'dev-') && 'false' || 'true' }}
files: _sdk/**/bin/packages/**/${{ env.PKG_DIR_NAME }}*
fail_on_unmatched_files: true
files: dist/*.apk