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