跳到内容

集成

GitHub Actions

GitHub Actions 具备开箱即用地运行 Ruff 的所有必要条件

name: CI
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install ruff
      # Update output format to enable automatic inline annotations.
      - name: Run Ruff
        run: ruff check --output-format=github .

Ruff 也可以通过 ruff-action 作为 GitHub Action 使用。

默认情况下,ruff-action 作为通过/失败测试运行,以确保给定的存储库不包含任何违反 lint 规则的内容,如其配置所示。但是,在底层,ruff-action 直接安装并运行 ruff,因此它可以用于执行任何受支持的 ruff 命令(例如,ruff check --fix)。

ruff-action 支持所有 GitHub 托管的 runners,并且可以与任何已发布的 Ruff 版本(即,PyPI 上提供的任何版本)一起使用。

要使用 ruff-action,请在您的存储库中创建一个文件(例如,.github/workflows/ruff.yml),其中包含

name: Ruff
on: [ push, pull_request ]
jobs:
  ruff:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/ruff-action@v3

或者,您可以将 ruff-action 作为步骤包含在任何其他 workflow 文件中

      - uses: astral-sh/ruff-action@v3

ruff-action 通过 with: 接受可选的配置参数,包括

  • version: 要安装的 Ruff 版本(默认值:latest)。
  • args: 传递给 Ruff 的命令行参数(默认值:"check")。
  • src: 传递给 Ruff 的源路径(默认值:[".", "src"])。

例如,要使用 Ruff 版本 0.8.0 运行 ruff check --select B ./src

- uses: astral-sh/ruff-action@v3
  with:
    version: 0.8.0
    args: check --select B
    src: "./src"

GitLab CI/CD

您可以将以下配置添加到 .gitlab-ci.yml,以与兼容 GitLab 代码质量报告的 ruff check 并行运行 ruff format

.base_ruff:
  stage: build
  interruptible: true
  image:
    name: ghcr.io/astral-sh/ruff:0.12.4-alpine
  before_script:
    - cd $CI_PROJECT_DIR
    - ruff --version

Ruff Check:
  extends: .base_ruff
  script:
    - ruff check --output-format=gitlab > code-quality-report.json
  artifacts:
    reports:
      codequality: $CI_PROJECT_DIR/code-quality-report.json

Ruff Format:
  extends: .base_ruff
  script:
    - ruff format --diff

pre-commit

Ruff 可以通过 ruff-pre-commit 用作 pre-commit hook

- repo: https://github.com/astral-sh/ruff-pre-commit
  # Ruff version.
  rev: v0.12.4
  hooks:
    # Run the linter.
    - id: ruff
    # Run the formatter.
    - id: ruff-format

要启用 lint 修复,请将 --fix 参数添加到 lint hook

- repo: https://github.com/astral-sh/ruff-pre-commit
  # Ruff version.
  rev: v0.12.4
  hooks:
    # Run the linter.
    - id: ruff
      args: [ --fix ]
    # Run the formatter.
    - id: ruff-format

要避免在 Jupyter Notebook 上运行,请从允许的文件类型列表中删除 jupyter

- repo: https://github.com/astral-sh/ruff-pre-commit
  # Ruff version.
  rev: v0.12.4
  hooks:
    # Run the linter.
    - id: ruff
      types_or: [ python, pyi ]
      args: [ --fix ]
    # Run the formatter.
    - id: ruff-format
      types_or: [ python, pyi ]

使用 --fix 运行时,Ruff 的 lint hook 应放置在 Ruff 的格式化 hook 之前,以及 Black、isort 和其他格式化工具之前,因为 Ruff 的修复行为可能会输出需要重新格式化的代码更改。

在不使用 --fix 运行时,Ruff 的格式化 hook 可以放置在 Ruff 的 lint hook 之前或之后。

(只要您的 Ruff 配置避免任何linter-formatter 不兼容性ruff format 永远不应引入新的 lint 错误,因此在 ruff check --fix 之后 运行 Ruff 的格式化 hook 是安全的。)

mdformat

mdformat 能够格式化 Markdown 中的代码块。mdformat-ruff 插件使 mdformat 能够使用 Ruff 格式化 Python 代码块。

Docker

Ruff 提供了一个包含 ruff 二进制文件的 distroless Docker 镜像。 发布了以下标签

  • ruff:latest
  • ruff:{major}.{minor}.{patch},例如,ruff:0.6.6
  • ruff:{major}.{minor},例如,ruff:0.6(最新的 patch 版本)

此外,ruff 发布了以下镜像

  • 基于 alpine:3.20
  • ruff:alpine
  • ruff:alpine3.20
  • 基于 debian:bookworm-slim
  • ruff:debian-slim
  • ruff:bookworm-slim
  • 基于 buildpack-deps:bookworm
  • ruff:debian
  • ruff:bookworm

与 distroless 镜像一样,每个镜像都使用 ruff 版本标签发布为 ruff:{major}.{minor}.{patch}-{base}ruff:{major}.{minor}-{base},例如,ruff:0.6.6-alpine