mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-11-07 12:44:15 +08:00
update 2026-10-25 16:53:21
This commit is contained in:
1 parent
91f217be10
commit
7fca8e9a3a
74 files changed
+1429
-918
No files matched your search
+83
-33
@@ -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
|
||||
Reference in new issue
Block a user