此翻译可能已过时。

Docker 实用方案

官方容器镜像基于 scratch 构建,使用静态链接的二进制,因此镜像很小(约 26 MB)且不包含任何操作系统。

镜像

镜像位于 GitHub Container Registry 上的 ghcr.io/carthage-software/mago

Tag

每次发布会发布多个 tag,你可以按所需精度进行锁定:

Tag示例说明
latestghcr.io/carthage-software/mago:latest始终指向最新发布。
<version>ghcr.io/carthage-software/mago:1.25.2锁定到精确版本。
<major>.<minor>ghcr.io/carthage-software/mago:1.25跟随某个次版本下的最新补丁。
<major>ghcr.io/carthage-software/mago:1跟随某个主版本下的最新发布。

镜像支持 linux/amd64linux/arm64。Docker 会为你的宿主机拉取对应变体。

快速开始

挂载你的项目目录,运行任意命令:

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

示例

Lint:

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

只检查格式不写入:

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

应用格式化:

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

运行静态分析:

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

打印版本:

docker run --rm ghcr.io/carthage-software/mago --version

CI 集成

GitHub Actions

name: Mago Code Quality

on:
  push:
  pull_request:

jobs:
  mago:
    name: Run Mago Checks
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/carthage-software/mago:1
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Check formatting
        run: mago fmt --check

      - name: Lint
        run: mago lint --reporting-format=github

      - name: Analyze
        run: mago analyze --reporting-format=github

镜像不包含 PHP 或 Composer。这对格式化器和 linter 来说没有问题。分析器需要安装项目的 Composer 依赖才能正确解析符号;否则会对未定义符号产生误报。如果你的项目依赖第三方包并打算运行分析器,优先选择 原生安装 并安装好 Composer 依赖。

GitLab CI

mago:
  image: ghcr.io/carthage-software/mago:1
  script:
    - mago fmt --check
    - mago lint
    - mago analyze

Bitbucket Pipelines

pipelines:
  default:
    - step:
        name: Mago Code Quality
        image: ghcr.io/carthage-software/mago:1
        script:
          - mago fmt --check
          - mago lint
          - mago analyze

Shell 别名

把镜像当作本地二进制来用:

alias mago='docker run --rm -v $(pwd):/app -w /app ghcr.io/carthage-software/mago:1'

把这一行加入 shell 初始化文件,重新加载 shell,然后就可以像往常一样运行 mago lint(或任何其他子命令)。

↳ 编辑此页 →