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 命令行工具

MIT 许可证

69KB
1.5K SLoC

万金油工具 - JOAT

Build Status

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示例的更多信息,请参阅此视频

Introducing Joat

安装

由于这是正在进行中的工作,所以二进制文件没有打包,需要编译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