利用 GitHub Actions 自动同步 Sing-Box 规则。
## 从 Sukka 到 Sing-Box:规则集的自动同步与编译最近换用 Sing-Box,但 Sukka 规则集只有 JSON 文件,没有 Sing-Box 需要的二进制文件 (.srs),因此需要一些操作来解决。
**项目地址:** sing-box-ruleset
**问题核心:**
1. 定时同步 Sukka 规则集更新
2. 将更新后的 JSON 文件转换为 Sing-Box 二进制文件
使用 GitHub Action 是最方便的解决方案。以下是完整的 workflow 代码:
```
name: Sync and Compile Sing-Box Rules
on:
schedule:
- cron: "0 2 * * *"
workflow_dispatch:
permissions:
contents: write
jobs:
sync_and_compile:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3
- name: Set up Git user
run: |
git config user.name "github-actions"
git config user.email "github-actions@users.noreply.github.com"
- name: Install sing-box
run: |
curl -Lo sing-box.tar.gz https://github.com/SagerNet/sing-box/releases/download/v1.10.0-alpha.29/sing-box-1.10.0-alpha.29-linux-amd64.tar.gz
tar -xzf sing-box.tar.gz
chmod +x sing-box-1.10.0-alpha.29-linux-amd64/sing-box
sudo mv sing-box-1.10.0-alpha.29-linux-amd64/sing-box /usr/local/bin/sing-box
sing-box version
- name: Fetch and Compile Sing-Box Rules from ruleset
run: |
git remote add ruleset https://github.com/SukkaLab/ruleset.skk.moe.git
git fetch ruleset
git checkout ruleset/master -- sing-box
rm -rf domainset ip non_ip
mv sing-box/* ./
rm -rf sing-box sing-box-1.10.0-alpha.29-linux-amd64 sing-box.tar.gz
find . -type f -name "*.srs" -exec rm -f {} \;
find . -type f -name "*.json" -exec bash -c '
echo "Compiling: $1"
if ! sing-box rule-set compile "$1"; then
echo "Error compiling $1"
exit 1
fi
' _ {} \;
git add .
if git diff-index --quiet HEAD --; then
echo "No changes to commit"
echo "No updates needed"
else
git commit -m "Merged sing-box directory from ruleset.skk.moe repository"
git push
fi
```
**Workflow 解释:**
* `name`: 声明 Action 名称
* `on`: 定时运行 (UTC 时间,比中国时间早 8 小时),以及手动运行
* `jobs`: 定义工作流流程
* `runs-on`: 指定运行系统 (Ubuntu 最新版本)
* `steps`: 工作流步骤,包括:
* Checkout 仓库文件
* 设置 Git 用户信息
* 安装 Sing-Box
* 从 Sukka 规则集仓库同步 Sing-Box 规则文件,并编译成二进制文件
* 提交更新至仓库
**总结:**
本文介绍了如何使用 GitHub Action 自动同步 Sukka 规则集并编译成 Sing-Box 二进制文件,并提供完整的 workflow 代码和解释。欢迎交流更优雅的 workflow 解决方案。
页:
[1]