Files
openwrt-ci-ipq60xx/Scripts/Packages.sh
lingyuzeng 2521377f1f
Some checks failed
ci/woodpecker/manual/ipq60xx Pipeline failed
fix: add bash safety headers, ignore GENERAL.upstream.txt, pass UPSTREAM_GENERAL_REF
2026-03-01 14:49:39 +08:00

123 lines
5.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
#安装和更新软件包
set -euo pipefail
UPDATE_PACKAGE() {
local PKG_NAME=$1
local PKG_REPO=$2
local PKG_BRANCH=$3
local PKG_SPECIAL=${4:-}
local PKG_LIST=("$PKG_NAME" $5) # 第5个参数为自定义名称列表
local REPO_NAME=${PKG_REPO#*/}
echo " "
# 删除本地可能存在的不同名称的软件包
for NAME in "${PKG_LIST[@]}"; do
# 查找匹配的目录
echo "Search directory: $NAME"
local FOUND_DIRS=$(find ../feeds/luci/ ../feeds/packages/ -maxdepth 3 -type d -iname "*$NAME*" 2>/dev/null)
# 删除找到的目录
if [ -n "$FOUND_DIRS" ]; then
while read -r DIR; do
rm -rf "$DIR"
echo "Delete directory: $DIR"
done <<< "$FOUND_DIRS"
else
echo "Not fonud directory: $NAME"
fi
done
# 克隆 GitHub 仓库
git clone --depth=1 --single-branch --branch $PKG_BRANCH "https://github.com/$PKG_REPO.git"
# 处理克隆的仓库
if [[ "$PKG_SPECIAL" == "pkg" ]]; then
find ./$REPO_NAME/*/ -maxdepth 3 -type d -iname "*$PKG_NAME*" -prune -exec cp -rf {} ./ \;
rm -rf ./$REPO_NAME/
elif [[ "$PKG_SPECIAL" == "name" ]]; then
mv -f $REPO_NAME $PKG_NAME
fi
}
# 调用示例
# UPDATE_PACKAGE "OpenAppFilter" "destan19/OpenAppFilter" "master" "" "custom_name1 custom_name2"
# UPDATE_PACKAGE "open-app-filter" "destan19/OpenAppFilter" "master" "" "luci-app-appfilter oaf" 这样会把原有的open-app-filterluci-app-appfilteroaf相关组件删除不会出现coremark错误。
# UPDATE_PACKAGE "包名" "项目地址" "项目分支" "pkg/name可选pkg为从大杂烩中单独提取包名插件name为重命名为包名"
UPDATE_PACKAGE "argon" "sbwml/luci-theme-argon" "openwrt-25.12"
UPDATE_PACKAGE "aurora" "eamonxg/luci-theme-aurora" "master"
UPDATE_PACKAGE "aurora-config" "eamonxg/luci-app-aurora-config" "master"
UPDATE_PACKAGE "kucat" "sirpdboy/luci-theme-kucat" "master"
UPDATE_PACKAGE "kucat-config" "sirpdboy/luci-app-kucat-config" "master"
UPDATE_PACKAGE "homeproxy" "VIKINGYFY/homeproxy" "main"
UPDATE_PACKAGE "momo" "nikkinikki-org/OpenWrt-momo" "main"
UPDATE_PACKAGE "nikki" "nikkinikki-org/OpenWrt-nikki" "main"
UPDATE_PACKAGE "openclash" "vernesong/OpenClash" "dev" "pkg"
UPDATE_PACKAGE "passwall" "Openwrt-Passwall/openwrt-passwall" "main" "pkg"
UPDATE_PACKAGE "passwall2" "Openwrt-Passwall/openwrt-passwall2" "main" "pkg"
UPDATE_PACKAGE "luci-app-tailscale" "asvow/luci-app-tailscale" "main"
UPDATE_PACKAGE "ddns-go" "sirpdboy/luci-app-ddns-go" "main"
UPDATE_PACKAGE "diskman" "lisaac/luci-app-diskman" "master"
UPDATE_PACKAGE "easytier" "EasyTier/luci-app-easytier" "main"
UPDATE_PACKAGE "fancontrol" "rockjake/luci-app-fancontrol" "main"
UPDATE_PACKAGE "gecoosac" "lwb1978/openwrt-gecoosac" "main"
UPDATE_PACKAGE "mosdns" "sbwml/luci-app-mosdns" "v5" "" "v2dat"
UPDATE_PACKAGE "netspeedtest" "sirpdboy/luci-app-netspeedtest" "master" "" "homebox speedtest"
UPDATE_PACKAGE "openlist2" "sbwml/luci-app-openlist2" "main"
UPDATE_PACKAGE "partexp" "sirpdboy/luci-app-partexp" "main"
UPDATE_PACKAGE "qbittorrent" "sbwml/luci-app-qbittorrent" "master" "" "qt6base qt6tools rblibtorrent"
UPDATE_PACKAGE "qmodem" "FUjr/QModem" "main"
UPDATE_PACKAGE "quickfile" "sbwml/luci-app-quickfile" "main"
UPDATE_PACKAGE "viking" "VIKINGYFY/packages" "main" "" "luci-app-timewol luci-app-wolplus"
UPDATE_PACKAGE "vnt" "lmq8267/luci-app-vnt" "main"
#更新软件包版本
UPDATE_VERSION() {
local PKG_NAME=$1
local PKG_MARK=${2:-false}
local PKG_FILES=$(find ./ ../feeds/packages/ -maxdepth 3 -type f -wholename "*/$PKG_NAME/Makefile")
if [ -z "$PKG_FILES" ]; then
echo "$PKG_NAME not found!"
return
fi
echo -e "\n$PKG_NAME version update has started!"
for PKG_FILE in $PKG_FILES; do
local PKG_REPO=$(grep -Po "PKG_SOURCE_URL:=https://.*github.com/\K[^/]+/[^/]+(?=.*)" $PKG_FILE)
local PKG_TAG=$(curl -sL "https://api.github.com/repos/$PKG_REPO/releases" | jq -r "map(select(.prerelease == $PKG_MARK)) | first | .tag_name")
local OLD_VER=$(grep -Po "PKG_VERSION:=\K.*" "$PKG_FILE")
local OLD_URL=$(grep -Po "PKG_SOURCE_URL:=\K.*" "$PKG_FILE")
local OLD_FILE=$(grep -Po "PKG_SOURCE:=\K.*" "$PKG_FILE")
local OLD_HASH=$(grep -Po "PKG_HASH:=\K.*" "$PKG_FILE")
local PKG_URL=$([[ "$OLD_URL" == *"releases"* ]] && echo "${OLD_URL%/}/$OLD_FILE" || echo "${OLD_URL%/}")
local NEW_VER=$(echo $PKG_TAG | sed -E 's/[^0-9]+/\./g; s/^\.|\.$//g')
local NEW_URL=$(echo $PKG_URL | sed "s/\$(PKG_VERSION)/$NEW_VER/g; s/\$(PKG_NAME)/$PKG_NAME/g")
local NEW_HASH=$(curl -sL "$NEW_URL" | sha256sum | cut -d ' ' -f 1)
echo "old version: $OLD_VER $OLD_HASH"
echo "new version: $NEW_VER $NEW_HASH"
if [[ "$NEW_VER" =~ ^[0-9].* ]] && dpkg --compare-versions "$OLD_VER" lt "$NEW_VER"; then
sed -i "s/PKG_VERSION:=.*/PKG_VERSION:=$NEW_VER/g" "$PKG_FILE"
sed -i "s/PKG_HASH:=.*/PKG_HASH:=$NEW_HASH/g" "$PKG_FILE"
echo "$PKG_FILE version has been updated!"
else
echo "$PKG_FILE version is already the latest!"
fi
done
}
#UPDATE_VERSION "软件包名" "测试版true可选默认为否"
UPDATE_VERSION "sing-box"
#UPDATE_VERSION "tailscale"