# rnx **Repository Path**: MM-Q/rnx ## Basic Information - **Project Name**: rnx - **Description**: rnx 是一个强大的任务编排工具,通过直观的配置文件和内置命令集,让您轻松定义、管理和执行各种任务,支持依赖关系、环境变量、平台特定执行等高级功能。 - **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-02-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: 任务编排, 运行器 ## README # rnx - 强大的任务编排工具 [](https://golang.org) [](LICENSE) [](https://gitee.com/MM-Q/rnx) [](https://gitee.com/MM-Q/rnx) ## 📖 项目简介 rnx 是一个强大的任务编排工具,通过直观的配置文件和内置命令集,让您轻松定义、管理和执行各种任务,支持依赖关系、环境变量、平台特定执行等高级功能。 ## ✨ 核心特性 - 🚀 **简单易用** - 通过直观的 TOML 配置文件定义任务 - 🔗 **依赖管理** - 支持任务间复杂依赖关系,自动解析执行顺序 - 🌍 **跨平台** - 支持 Windows、Linux 和 macOS 平台 - 🎯 **平台特定执行** - 可以为任务指定特定运行平台 - 🌳 **环境变量** - 支持全局和任务级环境变量配置 - 🔄 **变量替换** - 支持全局变量和任务变量的动态替换 - ⏱️ **超时控制** - 为任务设置执行超时时间 - 📝 **详细日志** - 提供清晰的执行日志和错误信息 - 🛡️ **错误处理** - 灵活的错误处理策略,可选择失败时退出或继续 - 🎨 **模板支持** - 提供多种任务模板,快速开始项目 - 🛠️ **内置命令** - 提供丰富的内置命令集,支持常见的文件和目录操作,无需依赖外部工具 ## 📦 安装指南 ### 从源码构建安装 ```bash # 克隆仓库 git clone https://gitee.com/MM-Q/rnx.git cd rnx # 构建应用 python3 build.py # 安装到系统路径 (可选) python3 build.py -s -ai -f ``` ### 使用 Go 安装 ```bash go install gitee.com/MM-Q/rnx@latest ``` ### 验证安装 ```bash rnx --help ``` ## 🚀 快速开始 ### 1. 初始化配置文件 ```bash # 创建默认配置文件 rnx --init # 创建开发环境配置文件 rnx --init --type dev ``` ### 2. 基础配置示例 创建 `Rnx.toml` 配置文件: ```toml # rnx 任务编排文件 # 项目地址: https://gitee.com/MM-Q/rnx.git # 使用方法: rnx --run <任务名> # ==================== 全局配置 ==================== [global] # 工作目录 (默认: .) work_dir = '.' # 超时时间 (默认: 30s) timeout = '30s' # 是否显示输出 (默认: true) show_output = true # 任务执行失败时是否退出程序 (默认: true) exit_on_error = true # 是否显示执行的命令 (默认: false) show_cmd = false # 全局环境变量 (可选) [global.envs] GOOS = "linux" GOARCH = "amd64" # 全局变量 (可选) [global.vars] app_name = "myapp" version = "1.0.0" # ==================== 任务定义 ==================== # 构建任务 [task.build] desc = '构建应用程序' cmds = [ 'echo "开始构建 {{app_name}} v{{version}}..."', 'go build -o {{app_name}} main.go', 'echo "构建完成"' ] platform = ["linux", "darwin"] # 仅在 Linux 和 macOS 上执行 # 测试任务 [task.test] desc = '运行测试套件' cmds = [ 'echo "运行单元测试..."', 'go test ./...', 'echo "测试通过"' ] depends_on = ["build"] # 依赖构建任务 # 部署任务 [task.deploy] desc = '部署应用程序' cmds = [ 'echo "部署到生产环境..."', './deploy.sh', 'echo "部署完成"' ] depends_on = ["test"] # 依赖测试任务 platform = ["linux"] # 仅在 Linux 上执行 # 完整流程 [task.all] desc = '执行完整构建流程' cmds = [ 'echo "执行完整流程..."' ] depends_on = ["build", "test", "deploy"] ``` ### 3. 执行任务 ```bash # 执行单个任务 rnx --run build # 执行带依赖的任务(会自动先执行 build) rnx --run test # 执行完整流程 rnx --run all # 列出所有可用任务 rnx --list # 检查配置文件 rnx --check ``` ## 📚 高级用法 ### 变量替换 rnx 支持在命令中使用变量,变量会在执行前被替换: ```toml [global.vars] app_name = "myapp" version = "1.0.0" [task.build] cmds = [ 'echo "构建 {{app_name}} 版本 {{version}}"', 'go build -o {{app_name}}-{{version}} .' ] [task.deploy] vars = { deploy_path = "/opt/apps" } cmds = [ 'echo "部署到 {{deploy_path}}"', 'cp {{app_name}} {{deploy_path}}/' ] ``` #### 变量优先级 当任务变量和全局变量同名时,优先使用任务变量: ```toml [global.vars] version = "1.0.0" [task.release] vars = { version = "2.0.0" } # 覆盖全局变量 cmds = [ 'echo "发布版本: {{version}}"', # 输出 2.0.0 (任务变量) 'echo "应用名称: {{app_name}}"' # 输出 myapp (全局变量) ] ``` ### 动态变量获取 支持通过命令动态获取变量值: ```toml [global.vars] # 使用命令获取动态值 git_commit = "@git rev-parse --short HEAD" build_time = "@date +%Y%m%d%H%M%S" [task.build] cmds = [ 'echo "构建版本: {{git_commit}}"', 'echo "构建时间: {{build_time}}"' ] ``` ## 🌍 平台支持 rnx 支持为任务指定特定运行平台,实现跨平台的任务管理。 ### 支持的平台 - `windows` - Windows 系统 - `linux` - Linux 系统 - `darwin` - macOS 系统 ### 平台配置 在任务的 `platform` 配置项中指定支持的平台: ```toml [task.build_windows] desc = 'Windows 平台构建' cmds = [ 'go build -o app.exe main.go', 'echo Windows 构建完成' ] platform = ["windows"] [task.build_linux] desc = 'Linux 平台构建' cmds = [ 'go build -o app main.go', 'echo Linux 构建完成' ] platform = ["linux"] [task.build_all] desc = '构建所有平台' cmds = ['echo 所有平台构建完成'] depends_on = ["build_windows", "build_linux"] ``` ### 平台检测 rnx 自动检测当前运行平台,只执行支持当前平台的任务。如果任务没有指定平台,则默认支持所有平台。 ## 🖥️ 执行环境 rnx 使用 `gitee.com/MM-Q/shellx` 库的 `shx` 子包执行 Shell 命令,该子包基于 `mvdan.cc/sh/v3`(mvdan/sh)实现。mvdan/sh 是用 Go 语言编写的 Shell 解析器和解释器,不依赖系统级 Shell 程序,因此在 Windows、Linux 和 macOS 上具有一致的执行行为。 ### 技术实现 - **命令解析**:使用 `mvdan.cc/sh/v3/syntax` 进行命令语法解析 - **环境变量**:使用 `mvdan.cc/sh/v3/expand` 处理环境变量展开 - **执行引擎**:纯 Go 实现,无需外部 Shell 依赖 ### 主要特性 - **跨平台一致性**:相同的命令在不同操作系统上表现一致 - **链式 API**:支持流畅的配置方法链 - **超时控制**:支持上下文超时和执行超时 - **环境隔离**:支持独立的工作目录和环境变量配置 ### 使用示例 ```toml # 标准命令语法(跨平台一致) [task.example] cmds = [ "echo 'Hello World'", "ls -la | grep .toml", "cat config.toml | grep desc", ] # 支持管道和重定向 [task.process] cmds = [ "echo 'log entry' >> output.log", "cat output.log | tail -n 10", ] ``` ### 环境变量配置 支持全局和任务级环境变量: ```toml [global.envs] GOOS = "linux" GOARCH = "amd64" CGO_ENABLED = "0" [task.build] envs = { "LDFLAGS": "-s -w", "OUTPUT_NAME": "myapp" } cmds = [ 'go build -ldflags="$LDFLAGS" -o "$OUTPUT_NAME" .' ] ``` ## 📋 API 文档概述 ### 命令行参数 | 参数 | 描述 | 示例 | |------|------|------| | `--run` | 执行指定任务 | `rnx --run build` | | `--list` | 列出所有任务 | `rnx --list` | | `--init` | 初始化配置文件 | `rnx --init` | | `--check` | 检查配置文件 | `rnx --check` | ### 配置文件结构 rnx 使用 TOML 格式的配置文件,支持以下主要部分: - `[global]` - 全局配置 - `[global.envs]` - 全局环境变量 - `[global.vars]` - 全局变量 - `[task.task_name]` - 任务定义 - `[task.task_name.envs]` - 任务环境变量 - `[task.task_name.vars]` - 任务变量 ### 核心数据结构 ```go // 全局配置 type GlobalConfig struct { Envs map[string]string // 全局环境变量 Vars map[string]string // 全局变量 WorkDir string // 工作目录 Timeout string // 超时时间 ShowOutput bool // 是否显示输出 ExitOnError bool // 任务执行失败时是否退出程序 ShowCmd bool // 是否显示执行的命令 Blacklist []string // 命令黑名单 } // 任务配置 type TaskConfig struct { Desc string // 任务描述 Cmds []string // 命令列表 Envs map[string]string // 任务环境变量 Vars map[string]string // 任务变量 WorkDir string // 任务工作目录 DependsOn []string // 依赖任务列表 Platform []string // 支持的平台列表 } ``` ## 🛠️ 支持的功能/格式 ### 配置文件格式 - **主配置文件**: `Rnx.toml` (推荐) - **备选配置文件**: `rnx.toml` - **兼容旧版**: `task.toml`, `Task.toml` ### 支持的平台 - Windows - Linux - Darwin (macOS) ### 变量引用格式 - 全局变量: `{{变量名}}` - 任务变量: `{{变量名}}` ### 变量优先级 1. 优先在当前任务变量中查找 2. 如果任务变量中不存在,则在全局变量中查找 3. 如果都不存在,则保持原样不替换 ### 变量引用限制 - **任务变量**:可以引用全局变量,但不能引用其他任务变量 - **全局变量**:不能引用任何变量(避免循环依赖) ## 🧪 测试说明 ### 运行测试 ```bash # 运行所有测试 go test ./... # 运行特定包的测试 go test ./internal/utils # 运行测试并显示覆盖率 go test -cover ./... # 生成覆盖率报告 go test -coverprofile=coverage.out ./... go tool cover -html=coverage.out ``` ### 测试配置 可以使用提供的示例配置文件进行测试: ```bash # 检查示例配置 rnx --check --config example/task.toml # 列出示例任务 rnx --list --config example/task.toml # 运行示例任务 rnx --run clean --config example/task.toml ``` ## 📄 许可证和贡献指南 ### 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ### 贡献指南 我们欢迎各种形式的贡献!如果您想为 rnx 项目做出贡献,请遵循以下步骤: 1. Fork 本仓库 2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 打开一个 Pull Request ### 开发环境设置 ```bash # 克隆仓库 git clone https://gitee.com/MM-Q/rnx.git cd rnx # 安装依赖 go mod tidy # 运行测试 go test ./... # 构建项目 go build -o rnx main.go ``` ## 📞 联系方式和相关链接 - **项目仓库**: [https://gitee.com/MM-Q/rnx](https://gitee.com/MM-Q/rnx) - **问题反馈**: [Issues](https://gitee.com/MM-Q/rnx/issues) - **功能请求**: [Issues](https://gitee.com/MM-Q/rnx/issues) ## 🙏 致谢 感谢所有为 rnx 项目做出贡献的开发者和用户! ---
如果 rnx 对您有帮助,请给我们一个 ⭐️
返回顶部: rnx - 强大的任务编排工具