Files
ShellCrash/.github/workflows/bin_update.yml
2025-12-12 18:21:29 +08:00

159 lines
6.8 KiB
YAML
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.
name: bin_update
on:
schedule:
- cron: "0 18 * * *" # UTC 18 = 北京时间次日凌晨 2 点
workflow_dispatch:
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Checkout update branch (ignore if missing)
uses: actions/checkout@v5
with:
ref: update
fetch-depth: 1
persist-credentials: false # 禁用默认凭据(我们用 token push
- name: Apt Update & Update CA
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
sudo apt-get -y install unzip curl git tar ca-certificates
sudo update-ca-certificates
cp -f /etc/ssl/certs/ca-certificates.crt bin/fix/ca-certificates.crt
- name: Update Dashboard
run: |
DASH="$GITHUB_WORKSPACE/bin/dashboard"
TEMP="$DASH/.tmp" # 临时目录
mkdir -p "$TEMP"
echo "下载面板..."
# 下载文件到临时目录
curl -kfSL -o "$TEMP/meta_yacd.zip" https://github.com/MetaCubeX/Yacd-meta/archive/gh-pages.zip
curl -kfSL -o "$TEMP/meta_xd.zip" https://github.com/MetaCubeX/metacubexd/archive/gh-pages.zip
curl -kfSL -o "$TEMP/zashboard.zip" https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip
########################################
# Yacd-meta
########################################
unzip -o "$TEMP/meta_yacd.zip" -d "$TEMP/yacd" > /dev/null
# 删除字体文件
find "$TEMP/yacd" \( -name "*.ttf" -o -name "*.woff" -o -name "*.woff2" \) -delete
# 确认子目录名称
subdir=$(find "$TEMP/yacd" -maxdepth 1 -type d ! -path "$TEMP/yacd" | head -n1)
# 打包
tar -zcvf "$DASH/meta_yacd.tar.gz" -C "$subdir" . > /dev/null
########################################
# metacubexd
########################################
unzip -o "$TEMP/meta_xd.zip" -d "$TEMP/xd" > /dev/null
# 删除字体文件
find "$TEMP/xd" \( -name "*.ttf" -o -name "*.woff" -o -name "*.woff2" \) -delete
# 确认子目录名称
subdir=$(find "$TEMP/xd" -maxdepth 1 -type d ! -path "$TEMP/xd" | head -n1)
# 打包
tar -zcvf "$DASH/meta_xd.tar.gz" -C "$subdir" . > /dev/null
########################################
# zashboard
########################################
unzip -o "$TEMP/zashboard.zip" -d "$TEMP/zash" > /dev/null
if [ -d "$TEMP/zash/dist" ]; then
ZDIR="$TEMP/zash/dist"
elif [ -d "$TEMP/zash/dist-cdn-fonts/dist" ]; then
ZDIR="$TEMP/zash/dist-cdn-fonts/dist"
else
echo "未找到 dist 目录"
exit 1
fi
# 删除字体文件
find "$ZDIR" \( -name "*.ttf" -o -name "*.woff" -o -name "*.woff2" \) -delete
echo 'board.zash.run.place' > "$ZDIR/CNAME"
tar -zcvf "$DASH/zashboard.tar.gz" -C "$ZDIR" . > /dev/null
########################################
# 一步清理所有临时文件(核心)
########################################
rm -rf "$TEMP"
echo "面板更新完成!"
- name: Update Geodata
run: |
cd bin
curl -kfSL -o geodata/cn_mini.mmdb https://raw.githubusercontent.com/Hackl0us/GeoIP2-CN/release/Country.mmdb
curl -kfSL -o geodata/china_ip_list.txt https://raw.githubusercontent.com/ChanthMiao/China-IPv4-List/release/cn.txt
curl -kfSL -o geodata/china_ipv6_list.txt https://raw.githubusercontent.com/ChanthMiao/China-IPv6-List/release/cn6.txt
curl -kfSL -o geodata/geosite.dat https://github.com/DustinWin/ruleset_geodata/releases/download/mihomo-geodata/geosite-all.dat
curl -kfSL -o geodata/srs_geoip_cn.srs https://github.com/DustinWin/ruleset_geodata/releases/download/sing-box-ruleset/cnip.srs
curl -kfSL -o geodata/srs_geosite_cn.srs https://github.com/DustinWin/ruleset_geodata/releases/download/sing-box-ruleset/cn.srs
curl -kfSL -o geodata/mrs_geosite_cn.mrs https://github.com/DustinWin/ruleset_geodata/releases/download/mihomo-ruleset/cn.mrs
# 下载规则集
curl -kfSL -o mihomo-ruleset.zip https://github.com/DustinWin/ruleset_geodata/archive/refs/heads/mihomo-ruleset.zip
curl -kfSL -o sing-box-ruleset.zip https://github.com/DustinWin/ruleset_geodata/archive/refs/heads/sing-box-ruleset.zip
##########################################
# 解压
unzip -o mihomo-ruleset.zip > /dev/null
unzip -o sing-box-ruleset.zip > /dev/null
##########################################
# 处理 mihomo 规则 (mrs)
if [ -d ruleset_geodata-mihomo-ruleset ]; then
cd ruleset_geodata-mihomo-ruleset
# 删除不需要的 .list和ads
find . -type f -name "*.list" -delete
find . -type f -name "ads.mrs" -delete
# 输出文件放到上级目录,避免 tar 自己包含自己
tar -zcvf ../mrs.tar.gz . > /dev/null
cd ..
else
echo "错误:未找到 ruleset_geodata-mihomo-ruleset"
fi
##########################################
# 处理 sing-box 规则 (srs)
if [ -d ruleset_geodata-sing-box-ruleset ]; then
cd ruleset_geodata-sing-box-ruleset
# 删除 .json和ads.srs
find . -type f -name "*.json" -delete
find . -type f -name "ads.srs" -delete
# 同样避免目录内生成 tar 导致 file-changed 错误
tar -zcvf ../srs.tar.gz . > /dev/null
cd ..
else
echo "错误:未找到 ruleset_geodata-sing-box-ruleset"
fi
##########################################
# 移动到 geodata
mv -f mrs.tar.gz geodata/
mv -f srs.tar.gz geodata/
# 删除目录
rm -rf ruleset_geodata-mihomo-ruleset
rm -rf ruleset_geodata-sing-box-ruleset
rm -rf mihomo-ruleset.zip
rm -rf sing-box-ruleset.zip
sed -i "s/GeoIP_v=.*/GeoIP_v=$(date '+%Y%m%d')/" version
echo 数据库及根证书文件更新完成!
- name: Rebuild update branch with no history
run: |
# 彻底删除历史记录
rm -rf .git
# 重新初始化仓库
git init
git config user.email "github-actions[bot]@users.noreply.github.com"
git config user.name "github-actions[bot]"
git add .
git commit -m "自动更新最新Dashboard、Geodata数据库及根证书"
# 强制推送覆盖 update 分支
git branch -M update
git remote add origin "https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git"
git push -f origin update
- name: Cleanup Workflow
uses: Mattraks/delete-workflow-runs@main
with:
retain_days: 0
keep_minimum_runs: 1