项目通常会有很多操作,比如编译,测试,代码检查,代码格式规整,打包发布等。
操作还有很多细分项,比如编译分调试版,发布版;测试包含单元测试,集成测试,覆盖率测试等。
这种种情况造成了我们需要记忆并调用大量的命令,通过一个文件把这些命令记录下来,并分类标注,能减少重复输入,节省调用时间,避免输入错误,方便新人上手...
Argc 即是一个用注释写 shell
命令行应用的框架,也是一款任务执行器。
你如果你不通过--argc-*
选项激活它的其他模式,Argc 启动后会进入任务执行器模式。
在该模式下,Argc 会先定位 bash
, 然后在当前项目及其父目录中搜索 argcfile
文件,最后调用 bash
执行 argcfile
。
Argc 采用 rust 编写,跨平台,不到 1M 的单可执行文件,无任何依赖,下载下来放到 $PATH 目录下就可以使用
windows 下 argc 自动定位并使用 git 内置的 bash 。
argcfile
就是一个普通的 shell
脚本。
与其他方案 make/makefile
, just/Justfile
, task/taskfile.yaml
比,你不需要再学一门语言、语法。
你还能自由地使用 ls
, rm
, grep
, find
, sed
, awk
等 GNU 工具。不用担心 windows 不兼容。
shell
出现了这么多年,为什么没多少人用它做任务管理? 因为 shell
的参数处理太繁琐了。
Argc 独创地引入了注释标签机制,解决了这个问题。
你只需要编写一个普通的函数,在这个函数上面添加注释 # @cmd [可选帮助信息]
,就定义了一个任务(子命令)。
# @cmd Build project
build() {
echo Build...
}
# @cmd Run tests
# @alias t
test() {
cargo test $@
}
# @cmd Run app
# @arg mode[=dev|prod] Run mode
run() {
if [[ "$argc_mode" = "prod" ]]; then
echo "prod mode"
else
echo "dev mode"
fi
}
# @cmd Start server
# @option --port=5000 Listening port
start() {
PORT=$argc_prot node server.js
}
Argc 提供了 bash
、zsh
、powershell
补全脚本来提示 argcfile
中任务和选项。
有时候任务名太长,输入麻烦,你可以定义任务别名。
# @cmd Run tests
# @alias t,tst
test() {
}
可以使用符号对任务进行分组,例如 foo:bar
foo.bar
foo@bar
。
基于执行顺序
# @cmd
build() { :; }
# @cmd
build:pre() { :; }
# @cmd
build:post() { :; }
基于类别、分组
# @cmd
build@all() { :? }
# @cmd
build@backend() { :? }
# @cmd
build@frontend() { :? }
基于名称空间、范围
# @cmd
app.test() { :? }
# @cmd
app.build() { :? }
比如我们希望在执行 run
之前先执行 install
,之后再执行 clean
,可以这样实现:
# @cmd
install() {
echo "install deps"
}
# @cmd
run() { install;
echo "run app"
clean; }
# @cmd
clean() {
echo "clean build"
}
argc 会自动生成完善的帮助信息
$ argc -h
argcfile
USAGE:
argcfile <SUBCOMMAND>
OPTIONS:
-h, --help Print help information
SUBCOMMANDS:
run Run app
start Start server
test Run tests [aliases: t]
你还可以查看单个任务的帮助信息
$ argc run -h
argcfile-run
Run app
USAGE:
argcfile run [MODE]
ARGS:
<MODE> Run mode [default: dev] [possible values: dev, prod]
OPTIONS:
-h, --help Print help information
1
Aumujun 2022-08-01 08:54:37 +08:00 via Android
jenkins 好像有这些功能[手动狗头
|
2
sigoden OP @Aumujun jenkins 是 CI ,我这个类似 make 或 npm scripts ,平时开发项目中用,当然 CI 中也是可以使用的。
|
3
weimo383 2022-08-01 09:55:22 +08:00
我觉得换个名字更好,让人一下子就能联想到 npm scripts 的那种
|
4
agagega 2022-08-04 01:08:25 +08:00 via iPhone
这种需求我常写一个 Makefile 解决..
|
5
sigoden OP @agagega
1. makefile 的学习新语法(多少人隔段时间还记得 makefile 强制 tab 缩进) 2. make 在 windows 下并不好用 3. make 任务传参不灵活 4. make 不带补全和打印任务列表,你需要自己额外处理 argc 为那些不喜欢 make/makefile 人送去了一个新的选项。 |
6
ihwbunny 345 天前
这个的确不错的想法,赞一个
|
7
fz420 282 天前
看有人写了个 just
|