1 个不稳定版本
0.1.0 | 2022年5月28日 |
---|
#544 在 构建工具
84KB
2K SLoC
Instruct
一种用于编写通用“makefile-like”任务的通用语言,功能强大且可重用。
状态
该项目基本可用!
- 解析
- []
- 静态分析
- 解释器
- 任务项目定义和配置文件
- [] 依赖系统
- [] 运行系统
- 命令行
- [] ssh
- [] docker
- [] python
- [] 测试系统
目标
我的目标是为此项目提供一个替代 makefile/bash 脚本的选择,尤其是针对 devops 世界。
大多数情况下,自动化代码只是简单地放入几个 bash 脚本或直接放入管道配置文件中,这使得它们难以维护/重用。
因此,这种语言致力于实现以下目标:
- 易于阅读和理解的干净语法
- 任务的可重用性
- 简单的包/依赖系统
- 对多个执行器的原生支持
- 简单的shell
- Docker
- Python
示例
一个目前完全工作的小型示例。
module as variables;
collection as interpolate: {
let (final_stdout: stdout) from task as stdout: {
let (pre_var: var) from block as pre: {
let (var: stdout) from run with (trim_stdout): echo pre;
run: echo dyn_${var};
};
let (stdout) from run with (trim_stdout) as main: echo interpolated '${pre_var}' used in main;
block as post: {
let (stdout) from run with (stdin: stdout): sed s/main/post/g;
run: echo ${stdout};
};
};
task as call: {
let (final_stdout) from call as main: variables.interpolate.stdout;
run as post: echo ${final_stdout} used after call;
};
task as exit-code: {
let (status1: status) from run as pre: cat Cargo.toml;
let (status2: status) from run as main: cat random_file.json;
run as post: echo "cat Cargo.toml: $${status1}, cat random_file.json: $${status2}";
};
};
可以使用 cargo 执行
cargo run variables.interpolate.stdout
cargo run variables.interpolate.exit-code
依赖项
~6–15MB
~171K SLoC