# rnx
**Repository Path**: MM-Q/rnx
## Basic Information
- **Project Name**: rnx
- **Description**: 简单高效的跨平台任务编排工具
- **Primary Language**: Go
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-01-27
- **Last Updated**: 2026-06-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 任务编排, 运行器
## README
# Rnx
[](https://golang.org) [](LICENSE) [](https://gitee.com/MM-Q/rnx)
*简单高效的跨平台任务编排工具*
## 📖 简介
rnx 是一个 TOML 驱动的任务编排工具,通过配置文件定义、管理和执行任务,支持依赖管理、变量替换、平台感知等特性。定位类似 `make`/`just`/`task`,但提供更丰富的内置功能。
## ✨ 特性
- **TOML 即代码** — 用纯配置文件定义任务,无需学习 DSL
- **依赖管理** — 自动拓扑排序,`depends_on` 声明依赖(执行前),`run_after` 声明后继(执行后)
- **变量系统** — 全局/任务两级变量空间,`{{var}}` 引用,`@command` 动态取值,循环依赖检测
- **跨平台** — Windows/Linux/macOS,可按任务指定运行平台
- **并/串行双模式** — 依赖驱动的串行执行 + 独立配置的并行执行(信号量限流)
- **环境变量** — 全局和任务级环境变量,支持变量引用
- **严格校验** — 运行前校验所有配置(变量引用、命令安全、Shell 语法、依赖完整性)
- **模板初始化** — `rnx init` 快速生成配置模板
## 📦 安装
```bash
# 方式一:Go 安装
go install gitee.com/MM-Q/rnx/cmd/rnx@latest
# 方式二:源码构建
git clone https://gitee.com/MM-Q/rnx.git
cd rnx
python3 build.py # 构建
python3 build.py -s -ai -f # 安装到系统路径
```
## 🚀 快速开始
### 1. 初始化
```bash
rnx init # 默认模板(def)
rnx init --type dev # 开发模板
rnx init --list # 列出所有模板
rnx init -s <文件> # 安装为用户自定义模板
rnx init -d <模板名> # 删除已安装的用户模板
```
### 2. 配置
创建 `Rnx.toml`:
```toml
[global]
work_dir = "."
timeout = "30s"
[task.build]
desc = "构建程序"
cmds = ["go build -o app main.go"]
[task.test]
desc = "运行测试"
cmds = ["go test ./..."]
depends_on = ["build"]
[task.deploy]
desc = "部署"
cmds = ["./deploy.sh"]
depends_on = ["test"]
platform = ["linux"]
```
### 3. 执行
```bash
rnx -l # 列出所有任务
rnx -r build # 执行构建
rnx -r test # 自动先执行 build,再执行 test
rnx check # 校验配置文件
rnx fmt # 格式化配置文件
```
## 📚 核心概念
### 变量替换
支持 `{{变量名}}` 语法,在命令和环境变量中引用:
```toml
[global.vars]
app_name = "myapp"
version = "1.0.0"
[task.build]
cmds = ['echo "构建 {{app_name}} v{{version}}"']
```
**变量优先级**:任务变量 > 全局变量(同名覆盖)。
**动态变量**:`@` 开头的值会作为命令执行,输出作为变量值:
```toml
[global.vars]
git_commit = "@git rev-parse --short HEAD"
build_time = "@date +%Y%m%d%H%M%S"
```
### 环境变量
环境变量值中可引用变量,实现动态配置:
```toml
[global.vars]
version = "1.0.0"
[global.envs]
APP_VER = "版本: {{version}}"
[task.build]
envs = { "BUILD_DIR" = "build-{{version}}" }
cmds = ['echo "$BUILD_DIR"']
```
> 环境变量**不支持**引用自己或其他环境变量,只能引用变量。
### 依赖管理
通过 `depends_on` 声明依赖(执行前),通过 `run_after` 声明后继(执行后),自动拓扑排序:
```toml
[task.setup]
cmds = ["echo 初始化"]
[task.build]
desc = "主任务"
depends_on = ["setup"] # setup 先执行
run_after = ["notify"] # notify 后执行
[task.notify]
cmds = ["echo 构建完成,发送通知"]
[task.test]
depends_on = ["init"] # 与 build 并行
```
### 平台控制
```toml
[task.build_linux]
cmds = ["go build -o app"]
platform = ["linux"] # 仅在 Linux 上执行
```
不设置 `platform` 则默认支持所有平台。
### 并行执行
在 `[global]` 中配置并行任务列表,使用 `-P` 执行:
```toml
[global]
parallel_tasks = ["build_frontend", "build_backend"]
```
```bash
rnx -P # 并行执行所有配置的并行任务
```
## 🛠️ 配置文件名
查找优先级:`Rnx.toml` > `rnx.toml` > `task.toml` > `Task.toml`
## 📖 任务文件规范
详细的配置规范请参考 [docs/任务文件规范.md](docs/任务文件规范.md)。
## 📄 许可证
MIT — 详见 [LICENSE](LICENSE)。
---