Skip to content

CI и другие интеграции

Стоит настроить CI так, чтобы запускался Oxfmt и сборка падала при расхождении форматирования.

Здесь же — другие интеграции, например pre-commit-хуки.

CI

GitHub Actions

Сначала добавьте скрипт fmt:check в package.json, если его ещё нет:

package.json
json
{
  "scripts": {
    "fmt:check": "oxfmt --check"
  }
}

Затем добавьте job в workflow GitHub Actions:

.github/workflows/ci.yml
yaml
name: CI

on:
  pull_request:
  push:
    branches: [main]

permissions: {}

jobs:
  format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6

      - uses: pnpm/action-setup@v4

      - uses: actions/setup-node@v6
        with:
          node-version: lts/*
          cache: pnpm

      # Или yarn, npm и т.д.
      - run: pnpm install --frozen-lockfile
      - run: pnpm run fmt:check

Автоисправление форматирования

Если часто забываете запускать Oxfmt перед PR и не можете или не хотите использовать pre-commit-хуки, добавьте шаг автоисправления через autofix.ci.

Подробности на https://autofix.ci/setup; понадобится установить соответствующее GitHub-приложение.

Пример workflow:

.github/workflows/autofix.yml
yaml
name: autofix.ci # должно быть именно это имя

on:
  pull_request:
  push:
    branches: ["main"]

permissions:
  contents: read

jobs:
  autofix:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6

      - uses: pnpm/action-setup@v4

      - uses: actions/setup-node@v6
        with:
          node-version: lts/*
          cache: pnpm

      # Или yarn, npm и т.д.
      - run: pnpm install --frozen-lockfile

      # Запуск oxfmt с записью; autofix.ci закоммитит изменения при наличии diff.
      # Добавьте скрипт `fmt` в package.json, если его ещё нет.
      - run: pnpm run fmt

      # Рекомендуется указывать последний SHA действия, а не номер версии. (См. https://autofix.ci/setup.)
      - uses: autofix-ci/action@1.3.2

GitLab CI

В GitLab CI можно проверять форматирование в пайплайне.

Добавьте fmt:check в package.json, если его ещё нет:

package.json
json
{
  "scripts": {
    "fmt:check": "oxfmt --check"
  }
}

И job в .gitlab-ci.yml:

.gitlab-ci.yml
yml
oxfmt:
  image: node:lts
  stage: test
  before_script:
    # Или pnpm, yarn и т.д.
    - npm install
  script:
    - npm run fmt:check

Имеет смысл добавить кэш менеджера пакетов для ускорения установки.

Pre-commit-хук

Чтобы форматировать только индексированные файлы, используйте oxfmt --no-error-on-unmatched-pattern: обрабатываются все поддерживаемые файлы, без ошибки, когда шаблону ничего не соответствует (например, в индексе только Ruby).

--check проверяет форматирование без записи.

Для lint-staged добавьте в package.json:

package.json
json
{
  "lint-staged": {
    "*": "oxfmt --no-error-on-unmatched-pattern"
  }
}

Чтобы хук ставился при установке зависимостей, можно использовать husky.