Skip to content

文件型任务

当你的自动化脚本逻辑逐渐变得庞大(包含复杂的 if/else、循环或错误处理)时,继续把它们塞在 .unirtm.toml 中会导致配置文件变得难以维护。

为此,UniRTM 原生支持文件型任务 (File Tasks)

工作机制

UniRTM 会自动扫描项目根目录下的 .unirtm/tasks/ 文件夹(或者直接名为 .unirtm-tasks/ 的文件夹)。它会将该目录下的每一个可执行脚本文件直接映射为一个 UniRTM 任务。

文件的主名即为任务名。例如,文件名为 build,则你可以通过 unirtm run build 执行它。

目录结构示例

text
my-project/
├── .unirtm.toml
├── .unirtm/
│   └── tasks/
│       ├── build         <-- "unirtm run build"
│       ├── test          <-- "unirtm run test"
│       └── deploy.py     <-- "unirtm run deploy.py"

TIP

如果你的文件没有执行权限(如 chmod +x),UniRTM 会在扫描时忽略它,或者在运行时提示拒绝访问。请确保你的脚本带有执行权限:chmod +x .unirtm/tasks/build

编写脚本与 Shebang

UniRTM 对文件使用的语言没有任何限制!只要脚本的第一行包含合法的 Shebang(即 #! 开头),UniRTM 就可以执行它。

你可以用 Bash、Python、Node.js 甚至 Go (使用 gorun) 来编写任务:

python
#!/usr/bin/env python3

import os
import sys

print("Deploying...")
if "PROD" in os.environ:
    print("Production deployment")

最美妙的是:如果你的 Shebang 使用了受 UniRTM 环境管理的工具(如 Python 3.12),任务执行时将自动且绝对地使用该隔离环境下的解析器,而不是系统全局解析器!

内联元数据 (Frontmatter)

你可以像在 Markdown 文件中写 Frontmatter 一样,在你的脚本文件头部声明元数据。UniRTM 的解析器会读取特定的注释,将其转化为任务配置。

Bash 脚本示例:

bash
#!/usr/bin/env bash

# unirtm-description: 部署系统到 AWS
# unirtm-depends-on: build, lint
# unirtm-env: AWS_REGION=us-east-1
# unirtm-hide: false

echo "Deploying to AWS in $AWS_REGION..."

Python 脚本示例:

python
#!/usr/bin/env python3

# unirtm-description: 运行数据清洗分析
# unirtm-depends-on: fetch-data

import pandas as pd
print("Data analysis started")

借助内联元数据,你的文件型脚本完全拥有了与 TOML 任务同等的依赖图并行编排能力!

基于 MIT 许可发布。