此翻译可能已过时。

安装

Mago 以单一静态二进制的形式发布。挑一种适合你环境的安装方式即可。

Shell 安装脚本(macOS、Linux)

macOS 和 Linux 上的推荐方式。脚本会探测你的平台、获取匹配的发行归档,并把二进制放到你的 PATH 上。

使用 curl:

curl --proto '=https' --tlsv1.2 -sSf https://carthage.software/mago.sh | bash

使用 wget:

wget -qO- https://carthage.software/mago.sh | bash

锁定特定版本

curl --proto '=https' --tlsv1.2 -sSf https://carthage.software/mago.sh | bash -s -- --version=1.25.2

wget 也支持同样的语法。

校验下载

如果 GitHub CLI 在你的 PATH 上,安装脚本会在解压前根据 Mago 的 GitHub 构建证明(build attestation)校验归档。无需任何参数。如果 gh 缺失或版本太旧,脚本会打印提示并继续运行而不进行校验。

要让校验成为强制项,请传 --always-verify。如果 gh 不可用、版本太旧,或证明不匹配,安装脚本会在动到 PATH 之前中止。

curl --proto '=https' --tlsv1.2 -sSf https://carthage.software/mago.sh | bash -s -- --always-verify

要完全跳过校验,请传 --no-verify。这两个参数互斥。

手动下载

Windows 上的推荐方式,也是任何没有 bash 的系统上的不错备选。

  1. 打开 发布页面
  2. 下载对应你操作系统的归档。命名遵循 mago-<version>-<target>.tar.gz(Windows 上是 .zip)。
  3. 解压归档,把二进制放到 PATH 上的某个位置。

如果你保留了归档文件,可以在解压前自行校验。

VERSION=1.25.2
TARGET=x86_64-unknown-linux-gnu  # adjust for your platform
ASSET=mago-${VERSION}-${TARGET}.tar.gz

gh release download "$VERSION" --repo carthage-software/mago --pattern "$ASSET"
gh attestation verify "$ASSET" \
  --repo carthage-software/mago \
  --signer-workflow carthage-software/mago/.github/workflows/cd.yml

tar -xzf "$ASSET"
sudo mv "mago-${VERSION}-${TARGET}/mago" /usr/local/bin/

校验成功时会打印 Verification succeeded! 以及生成该归档的工作流运行记录。

证明绑定到归档,而非解压后的二进制。如果你只保留了二进制,就无法直接校验。请重新下载归档,完成校验,再用其中的二进制的 sha256sum 与系统上已有的二进制做对比。

Docker

官方镜像基于 scratch 构建,大约 26 MB,可在任何运行 Docker 的地方使用,支持 linux/amd64linux/arm64,无需宿主机的 PHP 运行时。

docker run --rm -v $(pwd):/app -w /app ghcr.io/carthage-software/mago lint

可用的 tag 包括 latest、确切版本号,以及逐级放宽的版本前缀(例如 1.25.21.251)。Docker 实用方案 给出了 CI 示例和需要注意的限制。

包管理器

这些方式很方便,但依赖外部的发布节奏,通常会落后于 GitHub 发布。通过其中任何一种安装后,可运行 mago self-update 获取最新的官方二进制。

Composer

适用于 PHP 项目:

composer require --dev "carthage-software/mago:^1.25.2"

Composer 包是一个轻量封装。第一次调用 vendor/bin/mago 会从 GitHub 发布下载对应的预构建二进制并缓存。后续调用复用缓存,不再发起任何网络请求。

如果 GitHub 的匿名速率限制阻止了首次下载(在共享 CI runner 上很常见),为该次调用设置 GITHUB_TOKENGH_TOKEN 即可。在 GitHub Actions 中 token 不会自动导出,需要显式传入:

- run: vendor/bin/mago lint
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Homebrew

社区维护的 formula 通常会落后于官方发布。安装后请立即运行 mago self-update

brew install mago
mago self-update

Cargo

Crates.io 的发布可能比正式发布晚几个小时。和 Homebrew 一样的做法。

cargo install mago
mago self-update

校验发布的细节

每一份发行归档(各平台的 tarball、源码 tarball、源码 zip,以及 WASM 包)都在构建时通过 actions/attest-build-provenance 进行签名。签名是一份存储在 GitHub 上的 in-toto 证明,绑定到生成该工件的工作流运行,因此校验通过的下载,可证明与 Mago 发布流水线产出的字节完全一致。

shell 安装脚本会根据你传入的参数,在三种模式之间选择。

模式参数行为
auto如果 gh 可用就校验;否则跳过校验直接安装。
always--always-verify强制校验。gh 缺失、版本太旧或匹配失败都会中止安装。
never--no-verify即便 gh 可用也跳过校验。

校验执行的是:

gh attestation verify <archive> \
  --repo carthage-software/mago \
  --signer-workflow carthage-software/mago/.github/workflows/cd.yml

--signer-workflow 这一项很关键。它把证明绑定到具体的发布工作流文件。即便有人通过泄露的 GitHub Actions token 在同一仓库内触发了另一个工作流,校验也会失败。

如果校验失败,脚本会把未经校验的归档复制到当前工作目录,命名为 <file>.unverified.tar.gz(这样它能在临时目录清理后留存,便于你做事后取证),打印一条红色错误信息,然后在解压之前退出。任何东西都不会进入你的 PATH。

校验调用读取的是公开的证明 API,因此无需 gh auth。你只需要一个包含 gh attestation 子命令的较新版本 gh

锁定安装脚本

https://carthage.software/mago.sh 会重定向到 main 分支上的 scripts/install.sh。未来的修订会被自动采用,这很方便,但也意味着将来对安装脚本的改动会在没有预警的情况下生效。

为了更严格的供应链卫生,可以把脚本锁定到你审阅过的某个提交:

COMMIT=cd4cf4dfdbc72bd028ad26d11bcc815a49e27e9a  # replace with a commit you have read
curl --proto '=https' --tlsv1.2 -sSf \
  "https://raw.githubusercontent.com/carthage-software/mago/${COMMIT}/scripts/install.sh" \
  | bash -s -- --always-verify

GitHub 不会重写某一 SHA 上的文件,所以你审阅过的字节就是你运行的字节。更新这个锁定值是一个有意识的动作:先读懂新提交,再调整 COMMIT

校验安装

mago --version

如果它打印出版本号,你就可以 开始用 Mago 处理代码 了。

↳ 编辑此页 →