repostack run <script>
执行 repostack.yaml 中定义的命名脚本。
repostack run <script>
脚本定义
脚本在 repostack.yaml 的 scripts 字段中声明:
scripts:
# 无范围:在 stack root 执行一次
deploy:
command: pnpm changeset publish
# 指定 views:切进每个匹配 repo 执行
build:
command: pnpm build
views: [runtime]
# 指定多个 views(取并集)
test:
command: pnpm test
views: [runtime, tools]
# 指定 repos
lint:
command: pnpm lint
repos: [foo, bar]
# 指定 tags
check:
command: pnpm typecheck
tags: [publishable]
执行模式由脚本定义决定:
- 脚本未指定任何范围(
repos/views/tags)→ 在 stack root 执行一次 - 脚本指定了范围 → 切进每个匹配 repo 的目录并发执行
执行流程
加载配置- 读取
repostack.yaml 和 .repostackrc(如果启用了用户配置)。
repostack.yaml 和 .repostackrc(如果启用了用户配置)。查找脚本- 在
config.scripts 中查找 <script>,未找到时报错并列出可用脚本。
config.scripts 中查找 <script>,未找到时报错并列出可用脚本。确定执行模式- 若脚本有
repos/views/tags:解析目标 repo 列表后逐 repo 执行。
- 多个
views 先各自解析再取并集,再按 repos/tags 过滤(取交集)。 - 若
views 中存在未知视图名,抛出 Unknown view: <name>。
- 若脚本无任何范围:在 stack root 目录执行一次。
repos/views/tags:解析目标 repo 列表后逐 repo 执行。
- 多个
views先各自解析再取并集,再按repos/tags过滤(取交集)。 - 若
views中存在未知视图名,抛出Unknown view: <name>。
确定 Shell- 从
config.settings.shell 获取,未配置时回退到 $SHELL,再回退到系统默认。
config.settings.shell 获取,未配置时回退到 $SHELL,再回退到系统默认。执行命令- 跨 repo 模式:并发数 =
min(config.settings.concurrency, 目标 repo 数量),默认 4。 - TTY 进度提示:跨 repo 模式下显示 spinner,实时展示执行状态。
min(config.settings.concurrency, 目标 repo 数量),默认 4。结果输出- 跨 repo 模式:每个 repo 结果前打印
== <repo> == 分隔符。 - 若
settings.continueOnError 为 false(默认),任一 repo 失败后停止调度新任务。
== <repo> == 分隔符。settings.continueOnError 为 false(默认),任一 repo 失败后停止调度新任务。涉及文件
| 文件 | 操作 |
|---|---|
repostack.yaml | 读取 |
.repostackrc | 读取 |
错误信息
| 场景 | 错误信息 |
|---|---|
| 未指定脚本名 | 列出 config.scripts 中所有可用脚本 |
| 未知脚本名 | Unknown script: "<script>". Available: <list> |
| 未知视图名 | Unknown view: <name> |
| 命令执行失败 | 输出 stderr,并返回该命令的 exit code |
示例
# 在 stack root 执行一次(无范围脚本)
repostack run deploy
# 在脚本指定的 repos/views/tags 范围内执行
repostack run build
repostack run test
repostack run lint
# 查看可用脚本列表(不带脚本名)
repostack run