Skip to content

[Feature Request] 为 dry-run 模式增加 --json 参数,输出结构化数据 #360

Description

@flw-cn

背景与动机

chsrc-dry 模式非常实用,可以模拟换源过程并打印将要执行的命令。但目前输出内容为纯文本,其中混有提示信息、换源命令、额外说明等,不利于自动化工具(如 Dockerfile 生成、CI 脚本、配置管理工具)直接解析。

例如,执行 chsrc set -dry alpine 会输出:

chsrc: 开启Dry Run模式,模拟换源过程(跳过测速),命令仅打印并不运行

选中镜像站: TUNA (tuna)
--------------------------------
[chsrc 运行] sed -i 's#https\?://dl-cdn.alpinelinux.org/alpine#https://mirrors.tuna.tsinghua.edu.cn/alpine#g' /etc/apk/repositories
[chsrc 运行] apk update
--------------------------------
感谢镜像提供方: 清华大学开源软件镜像站
...

对于自动化场景,我希望能够直接获得一个 干净的、可编程处理的命令列表,而不必用正则表达式去猜测哪些行是真正的命令。

期望功能

chsrc set 命令增加一个 --json 参数,当与 -dry 一起使用时,只输出一个 JSON 对象(不输出其它任何人类可读的提示信息),其中包含:

  • 本次操作的基本信息(目标、选择的镜像源等)
  • 需要执行的命令数组(每条命令可附带描述)

使用示例

chsrc set -dry alpine --json

期望输出(缩进仅用于阅读,实际可压缩为一行):

{
  "version": "1.0",
  "dry_run": true,
  "target": "alpine",
  "selected_mirror": {
    "name": "TUNA",
    "url": "https://mirrors.tuna.tsinghua.edu.cn/alpine"
  },
  "commands": [
    {
      "command": "sed -i 's#https\\?://dl-cdn.alpinelinux.org/alpine#https://mirrors.tuna.tsinghua.edu.cn/alpine#g' /etc/apk/repositories",
      "description": "替换 Alpine apk 软件源为 TUNA 镜像站"
    },
    {
      "command": "apk update",
      "description": "更新软件包索引"
    }
  ]
}

应用场景

  1. 生成 Dockerfile
    直接解析 commands 数组,将其转换为 RUN 指令,无需手工提取命令。

  2. 配置管理(Ansible / Puppet 等)
    将换源操作作为幂等任务集成到自动化工具中。

  3. 构建自定义镜像脚本
    在脚本中动态获取换源命令,应对不同发行版或软件源。

实现建议(供开发者参考)

  • 仅在同时指定 -dry--json 时启用 JSON 输出模式。
  • 关闭所有人类可读的输出(包括 chsrc: 开头的提示、分隔线、感谢信息等),只打印一个 JSON 对象。
  • 可以考虑将 commands 数组中的 command 字段保持为 原始字符串(不转义额外的 shell 元字符),以便直接复制或执行。
  • 若未来支持多个镜像站备选或测速结果,可预留 mirrors_candidate 字段。

附加说明

  • 如果该项目已有类似的输出控制参数(如 --quiet--plain),我愿意与之保持一致。
  • 如果需要我帮助测试或提供更多样本输出,请告知。

感谢维护者的辛勤工作!chsrc 是一个非常实用的工具,如果能增加 --json 支持,将极大扩展它在自动化生态中的价值。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions