8个版本
0.0.8 | 2024年4月5日 |
---|---|
0.0.7 | 2021年8月7日 |
0.0.6 | 2020年5月18日 |
0.0.5 | 2020年2月11日 |
0.0.2 | 2019年8月15日 |
#619 in 命令行工具
69KB
1.5K SLoC
万金油工具 - JOAT
Joat旨在简化REST API的自定义命令行界面的创建,并允许对这些REST API进行自动化。该程序用Rust编写,基本上是一个正在进行中的项目,请期待错误和破坏性更改。Joat深受go-jira的启发,并使用了许多强大的Rust库。
Joat使用YAML文件来定义子命令,这些子命令可以是两种类型:请求和脚本。请求子命令简化了与REST API的交互,而脚本则是将多个命令组合成一个更方便的命令的方法。例如,假设你有一个开发团队使用trello.com作为他们的看板。请求命令可能是这样的:trello get <card_id>
,trello move <card_id> <column_id>
,trello assign <card_id> <user>
。现在假设一个开发者需要执行这三个操作来开始处理一张卡片。可以创建一个脚本命令,例如:trello start <card_id>
,这个命令总是将卡片分配给自己并将其移动到“进行中”列。所有这些都可以在一个YAML文件中进行配置,该文件可以由所有开发者共享,以创建一个有用且定制的CLI。Joat还可以将本地文件夹中的YAML文件与主文件夹中的文件合并,因此可以重用社区定义的命令,然后在这些命令之上创建自己的特定命令(有一个TODO项来实现配置文件的递归搜索)。
此YAML文件的一些关键属性被视为模板,因此可以使用环境变量、参数等中定义的值来定义应发送到请求或处理在脚本中的内容。模板的语法是Jinja2,你可以阅读更多关于它的Tera的文档(用于此目的的Rust库)。
有关trello示例的更多信息,请参阅此视频
安装
由于这是正在进行中的工作,所以二进制文件没有打包,需要编译Rust源代码。为此,您需要Rust的工具并执行以下命令:
cargo install joat
Joat默认使用一些库的alpha版本和cargo,有时这会导致编译错误,因为这些依赖项可能会更改其API。在这种情况下,请使用以下命令:cargo install --locked joat
。
Joat本身并不很有用,所以您需要创建一个扩展。
创建扩展
只需执行
# Create an yaml file with the name of your cli
joat init <name_of_your_cli>
# symlink joat binaries to your cli name (it has to be the same name as the yaml)
ln -s target/release/joat /usr/local/bin/<name_of_your_cli>
# optionally define templates
mkdir templates && touch templates/sample.j2
# Test if it works
<name_of_your_cli> --help
安装现有扩展
长版本
# Say the extension github page lives in https://github.com/sennav/.gitlab.joat
cd $HOME && git clone https://github.com/sennav/.gitlab.joat
JOAT_PATH=$(which joat)
BIN_PATH=$(which joat | sed 's/joat$//')
ln -s "$JOAT_BIN_PATH" "${BIN_PATH}gitlab"
gitlab --help # Test if it works
或者使用安装命令,基本上做的是同样的事情
# Say the extension github page lives in https://github.com/sennav/.gitlab.joat
joat install sennav/.gitlab.joat
gitlab --help # Test if it works
示例扩展
配置yaml
示例yaml文件
name: gitlab-cli
version: "0.0.1"
author: Vinicius <senna.vmd@gmail.com>
about: Cli to interface with Gitlab's REST API
base_endpoint: https://gitlab.com/api/v4
vars:
gitlab_project_id: "123"
headers:
Private-Token: "{{env.GITLAB_TOKEN}}"
args:
- config:
short: c
long: config
value_name: FILE
help: Sets a custom config file
takes_value: true
- verbose:
short: v
multiple: true
help: Sets the level of verbosity
subcommands:
- show:
about: show issue data
path: /projects/{{env.gitlab_project_id}}/issues/{{args.ISSUE_ID}}
args:
- ISSUE_ID:
help: Id of the issue to show
required: true
index: 1
- template:
short: t
long: template
help: Use a different template
required: false
takes_value: true
response_template: issue.j2
- show_script:
about: Sample of a script subcommand
args:
- ISSUE_ID:
help: Id of the issue
required: true
index: 1
script: |
gitlab show {{args.ISSUE_ID}}
Joat子命令
joat 0.0.2
Vinicius <senna.vmd@gmail.com>
Jack of all trades - CLI tools for REST APIs
USAGE:
joat [SUBCOMMAND]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
auto_complete Create auto complete script
help Prints this message or the help of the given subcommand(s)
init create a yaml config file to bootstrap your extension
install install a joat project
uninstall uninstall a joat project from the home folder
依赖关系
~27–39MB
~701K SLoC