一元网络论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 106|回复: 0

利用 GitHub Actions 自动同步 Sing-Box 规则。

[复制链接]

3万

主题

3万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
95895
发表于 2024-10-10 06:15:57 | 显示全部楼层 |阅读模式
## 从 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[bot]"
        git config user.email "github-actions[bot]@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 解决方案。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|一元网络论坛

GMT+8, 2024-11-25 21:21 , Processed in 0.300307 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表