CI и другие интеграции
Стоит настроить CI так, чтобы запускался Oxfmt и сборка падала при расхождении форматирования.
Здесь же — другие интеграции, например pre-commit-хуки.
CI
GitHub Actions
Сначала добавьте скрипт fmt:check в package.json, если его ещё нет:
{
"scripts": {
"fmt:check": "oxfmt --check"
}
}Затем добавьте job в workflow GitHub Actions:
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:
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.2GitLab CI
В GitLab CI можно проверять форматирование в пайплайне.
Добавьте fmt:check в package.json, если его ещё нет:
{
"scripts": {
"fmt:check": "oxfmt --check"
}
}И job в .gitlab-ci.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:
{
"lint-staged": {
"*": "oxfmt --no-error-on-unmatched-pattern"
}
}Чтобы хук ставился при установке зависимостей, можно использовать husky.