#submodule #repository #github #service #hook #sha #webhook

app github_submodule_hook

一个同步子模块与其源代码库的服务

1 个不稳定版本

0.1.1 2022年11月7日

#559配置

自定义许可

39KB
910

GitHub Submodule Hook

此服务提供API以将子模块更新到仓库中特定SHA。可以通过以下方式触发:

  • 手动请求(例如,使用curl
  • GitHub webhooks
    • 推送
    • PR验证
  • Gitlab webhooks
    • 推送
    • PR验证

配置

整个配置定义在配置文件中。文件为JSON格式。

可以使用-c选项将其传递给程序,否则,它将检查以下位置:

  • 本地文件名为config.json
  • 环境变量GITHUB_SUBMODULE_HOOK_CONFIG
  • ~/.github_submodule_hook/config.json
  • /etc/github_submodule_hook
  • 与可执行文件在同一目录下的文件config.json

config.json

{
    "user_file": "users.txt",   // Optional: The file that contains the mapping "user = token"
    "token": "mytoken",         // The token to access the github API (need enough permission)
    "permissions": {            // Permisson tree: you give, for each user, access to different repository
        "<user1>": {
            "<owner>": {
                "<repo>": {
                    "<branch>": [
                        "<submodule1>"
                    ]
                }
            }
        }
    },
    // Define the hooks and which repository to update
    "hooks": {
        "<owner>": {              // owner that triggered the hook
            "<repo>": {           // repository that triggered the hook
                "<branch>": [     // branch that triggered the hook
                    // List of repository + branch + submodule to update
                    {
                        "owner": "<owner-to-update>",
                        "repo": "<repo-to-update>",
                        "branch": "<branch-to-update>",
                        "submodule": "<submodule-to-update>"
                    }
                ]
            }
        }
    }
}

我选择使用树形结构owner -> repo -> branch -> submodule简化配置,例如,我们只有一个所有者但多个仓库。我还想有一个可以手动编辑的文件

users.txt(或你选择的名称)

使用CLI添加它们

github_submodule_hook config user add user1

注意:该文件按行包含一个条目,格式如下

{username} = {base64(sha512(token))}

如果你想要生成自己的令牌,你可以这样做,但强烈建议不要这样做。

用法

user1现在可以执行以下查询

curl -X POST localhost:8000/update/<owner>/<repo>/<branch>/<submodule>/<hash>?token?abcd

构建

cargo build --release --target=x86_64-unknown-linux-gnu

使用Cross

这简化了交叉构建

安装Cross

cargo install cross

使用它进行构建

cross build --target x86_64-unknown-linux-gnu --release

选择

令牌

  • UUID4:这是随机的且非确定的,大小也很大。
  • SHA512:我们不需要任何密码专用哈希算法
    • 令牌的熵很好(这对于人类密码不是这样),我们不需要盐
    • 由于可能的值数量,我们不需要慢速设计的算法。

其他

对于命令行界面(CLI),我使用了带有声明的 clap。我需要配置 cargo。

cargo add clap --features derive

开发

  • 使用 ngrok 暴露 webhook

    ngrok http 8000
    

依赖

~35–69MB
~1.5M SLoC