Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ on:

jobs:
lint:
name: Линтеры
runs-on: ubuntu-latest
steps:
- name: Загрузка платформы
Expand All @@ -21,14 +22,33 @@ jobs:

# Шаги не прерывают друг друга: при падении видно все три отчёта сразу,
# а не только первый упавший линтер.

# editorconfig-checker скачивает свой бинарник через GitHub API. Без
# токена запрос неавторизованный, а лимит общий на IP раннера — прогоны
# падали случайно, с «API rate limit exceeded» вместо ошибок разметки.
#
# Версия бинарника и формат вывода закреплены в npm-скрипте. Обёртка
# качает «latest», поэтому CI сам уехал на 4.0.0, а тот в GitHub Actions
# переключается на формат github-actions: файл и строка уходят в
# метаданные аннотации, и в логе остаётся голое «trailing whitespace».
#
# Подсказка печатается только если проверка дошла до отчёта: при упавшей
# загрузке бинарника совет искать пробелы уводит не туда. Пайплайн склеен
# с `exit 0` через `&&`, потому что шаг идёт в `bash -e`: без склейки
# падение проверки убьёт шаг до подсказки.
- name: Проверка editorconfig
if: ${{ !cancelled() }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npm run editorconfig
run: |
set -o pipefail
npm run editorconfig 2>&1 | tee "$RUNNER_TEMP/editorconfig.log" && exit 0
if grep -q 'errors found' "$RUNNER_TEMP/editorconfig.log"; then
echo
echo "Файлы выше расходятся с .editorconfig — правило, файл и строка указаны в отчёте."
echo "Локально тот же отчёт: npm run editorconfig. Простые случаи правит на месте npm run editorconfig -- --fix"
fi
exit 1
- name: Проверка линтером CSS
if: ${{ !cancelled() }}
run: npm run lint:css
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ interviews
.cache
.issues.json

# бинарник, который editorconfig-checker скачивает при запуске
# остатки старой обёртки editorconfig-checker, которая качала бинарник сюда
bin

.env
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ npm run build && npm run lint:html # валидация разметки, н

`lint:html` проверяет по одной странице каждого типа, а не весь сайт: за разметку статей отвечает один шаблон `doc.njk`, и тысячная статья не скажет ничего, чего не сказала первая. Список страниц — в `scripts/lint-html.js`, при добавлении нового типа страницы его нужно пополнить.

`editorconfig-checker` при каждом запуске качает свой бинарник в `./bin/latest/`. Папка в `.gitignore`.
`editorconfig-checker` — это обёртка вокруг бинарника, который скачивается в `node_modules` при первом запуске и кешируется там до следующего `npm ci`. Обёртке нужна нода не ниже 24, как в `.nvmrc`: на более старой она падает с `TypeError` в минифицированном коде вместо отчёта о нарушениях. Версия закреплена в npm-скрипте переменной `EC_VERSION`: обёртка по умолчанию тянет `latest`, и тогда локально остаётся навсегда та версия, которую скачали однажды, а в CI приезжает свежая — отчёты расходятся. Формат вывода тоже задан явно (`--format gcc`): с версии 4 чекер сам переключается в CI на формат аннотаций GitHub, и в логе от ошибки остаётся один текст без файла и строки.

Тесты лежат в `__tests__/` рядом с кодом, общие помощники — в `test/helpers/`. Покрытие пока тонкое, самое ценное место для новых тестов — трансформации: это чистые функции, html на входе и html на выходе.

Expand Down
5 changes: 4 additions & 1 deletion docs/deps.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,15 @@ npx npm-check-updates -u
npm install
```

У пакета `editorconfig-checker` версия бинарника закреплена отдельно, переменной `EC_VERSION` в npm-скрипте `editorconfig`. `npm outdated` показывает только версию обёртки, бинарник поднимается руками.

## Разрешение конфликтов в файле _package-lock.json_

Иногда могут возникнуть конфликты слияния в Git для _package-lock.json_. Править руками этот файл можно лишь в исключительных ситуациях.

Для разрешения конфликтов в этом файле можно использовать следующий алгоритм:

- правим конфликты (если есть) в файле _package.json_;
- правим конфликты (если есть) в файле _package.json_;
- вложенный пункт со сломанным отступом;
- принимаем изменения в _package-lock.json_ из той ветки, которую вливаем в свою;
- обновляем файл _package-lock.json_, выполнив команду `npm install`.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"start": "cross-env-shell NODE_ENV=development NODE_OPTIONS=--max-old-space-size=8192 \"npm run make-links && eleventy --incremental --serve --quiet\"",
"build": "cross-env-shell NODE_ENV=production \"npm run make-links && eleventy --quiet && npx gulp\"",
"deploy": "cd dist && rsync -e 'ssh -i $HOME/.ssh/doka_deploy -o StrictHostKeyChecking=no' --exclude 'api.json' --exclude 'mail' --archive --progress --compress --delete . deploy@dev.doka.guide:$(echo $(grep 'SERVER_PATH' ../.env | cut -d '=' -f2))",
"editorconfig": "editorconfig-checker",
"editorconfig": "cross-env EC_VERSION=v4.0.1 editorconfig-checker --format gcc",
"lint:css": "stylelint 'src/styles/**/*.css'",
"lint:js": "eslint '**/*.js'",
"lint:html": "node scripts/lint-html.js",
Expand Down
Loading