packmgr

module
v0.2.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 15, 2026 License: MIT

README

packmgr

packmgr 是一个用 Go 编写的轻量包管理工具,既可以维护 packages.json,也可以按当前机器的系统平台和 CPU 架构自动选择 release bundle,下载、校验并安装到指定目录。

当前版本只支持 GitHub public release 的 release 模式 manifest,不支持 smoke 模式。

安装

从 release 下载当前平台对应的 zip,解压后直接执行:

./packmgr version

如果你想自己本地构建:

make build
./bin/packmgr version

如果你想把 packmgr 安装到 Go 的 bin 目录,并加入当前用户 shell 的 PATH:

make install VERSION=v0.1.0

这个命令会把二进制安装到 $(go env GOPATH)/bin,并把这个目录写入你的 shell 启动文件。 安装完成后,重新打开一个终端,或者执行 source ~/.zshrc,就可以直接调用:

packmgr version

使用方法

packmgr install --dir ./vendor

默认会读取当前目录下的 ./packages.json,也可以通过 --packages 指定其他路径:

packmgr install --packages ./examples/packages.json --dir ./vendor
配置维护命令
packmgr packages list
packmgr packages get server
packmgr packages add server --repo CDRlease/tgr_server --tag latest --check-release
packmgr packages update server --tag latest --check-release
packmgr packages remove server
  • 所有 packmgr packages ... 命令默认读取 ./packages.json
  • add 在文件不存在时会自动创建新的 packages.json
  • listget 支持 --json
  • addupdate 支持 --check-release,会在写文件前检查 GitHub release 是否存在
  • tag: "latest" 表示 GitHub 官方 latest release,会在安装或 --check-release 时动态解析
查询输出示例
packmgr packages list
codegen repo=CDRlease/tgr_codegen tag=v0.4.4
config repo=CDRlease/tgr_config tag=v0.1.1
engine repo=CDRlease/tgr_engine tag=v0.1.1
server repo=CDRlease/tgr_server tag=v0.2.2
packmgr packages get server
name: server
repo: CDRlease/tgr_server
tag: v0.2.2
packages.json 示例
{
  "schemaVersion": 1,
  "components": {
    "server": {
      "repo": "CDRlease/tgr_server",
      "tag": "v0.2.2"
    },
    "engine": {
      "repo": "CDRlease/tgr_engine",
      "tag": "v0.1.1"
    },
    "config": {
      "repo": "CDRlease/tgr_config",
      "tag": "v0.1.1"
    },
    "codegen": {
      "repo": "CDRlease/tgr_codegen",
      "tag": "v0.4.4"
    }
  }
}

也支持在配置里直接写 latest

{
  "schemaVersion": 1,
  "components": {
    "server": {
      "repo": "CDRlease/tgr_server",
      "tag": "latest"
    }
  }
}

安装结果

安装结果是“扁平组件目录”:

  • 不保留版本号目录
  • 不保留 os-arch 目录
  • 不保留 zip 的最外层包装目录,例如 bin/codegen-osx-arm64/
  • 组件根目录直接保留 payload 文件,以及上游原始 manifest.jsonSHA256SUMS.txt
  • 当组件配置为 tag: "latest" 时,安装日志会显示原始值 latest,以及本次实际解析到的 resolved tag

例如:

vendor/
├── server/
│   ├── manifest.json
│   ├── SHA256SUMS.txt
│   ├── run.sh
│   └── mesh/mesh
├── engine/
│   ├── manifest.json
│   ├── SHA256SUMS.txt
│   └── lockstep.engine.dll
├── config/
│   ├── manifest.json
│   ├── SHA256SUMS.txt
│   ├── Luban.dll
│   └── gen.sh
└── codegen/
    ├── manifest.json
    ├── SHA256SUMS.txt
    ├── lockstep.ecs.generator.dll
    ├── Config/HashPrimes.json
    └── scripts/gen.sh

环境变量

  • PACKMGR_GITHUB_TOKEN
  • GH_TOKEN
  • GITHUB_TOKEN

优先级从上到下。未设置时将匿名访问 GitHub public releases。

常见错误

  • schemaVersion must be 1packages.json 结构不符合 v0.1.0 协议。
  • component <name> already exists:新增组件时发现重名。
  • component <name> not found:查询、更新或删除时找不到指定组件。
  • fetch latest release <repo>:指定了 latest,但该仓库没有可用的 GitHub latest release。
  • no compatible bundle found:上游 release 没有当前平台可用的 bundle,也没有 any-any 兜底包。
  • checksum entry not foundSHA256SUMS.txt 缺少选中 zip 或 manifest.json 的校验项。
  • unsafe zip entry path:zip 内包含绝对路径或路径穿越条目,安装被阻止。

Directories

Path Synopsis
cmd
packmgr command
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL