admin 发表于 2024-10-10 06:15:57

利用 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]
查看完整版本: 利用 GitHub Actions 自动同步 Sing-Box 规则。