repostack run <script>

执行 repostack.yaml 中定义的命名脚本。

repostack run <script>

脚本定义

脚本在 repostack.yamlscripts 字段中声明:

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(如果启用了用户配置)。

查找脚本
  • config.scripts 中查找 <script>,未找到时报错并列出可用脚本。

确定执行模式
  • 若脚本有 repos/views/tags:解析目标 repo 列表后逐 repo 执行。
    • 多个 views 先各自解析再取并集,再按 repos/tags 过滤(取交集)。
    • views 中存在未知视图名,抛出 Unknown view: <name>
  • 若脚本无任何范围:在 stack root 目录执行一次。

确定 Shell
  • config.settings.shell 获取,未配置时回退到 $SHELL,再回退到系统默认。

执行命令
  • 跨 repo 模式:并发数 = min(config.settings.concurrency, 目标 repo 数量),默认 4
  • TTY 进度提示:跨 repo 模式下显示 spinner,实时展示执行状态。

结果输出
  • 跨 repo 模式:每个 repo 结果前打印 == <repo> == 分隔符。
  • settings.continueOnErrorfalse(默认),任一 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