# Перевірка посилань

> Як перевіряються посилання сайту — локально та в CI.

---

LLMS index: [llms.txt](/llms.txt)

---

На сайті посилання перевіряються за допомогою двох інструментів:

- **[htmltest][]** — оригінальний засіб перевірки та поточна **стандартна** програма, яку запускає `check:links`. Він встановлюється автоматично під час першого запуску (якщо потрібно), тому додаткове налаштування не потрібне. Він також використовується скриптами та робочими процесами, повʼязаними з [refcache](#refcache).
- **[Lychee][]** — швидша альтернатива, яку учасники проєкту можуть випробувати.
  > [!NB] :warning: Спочатку потрібно [встановити Lychee][lychee-install] локально.

## Перевірка посилань {#check-links}

Щоб перевірити посилання локально (за допомогою htmltest), виконайте:

```sh
npm run check:links
```

Або, щоб спробувати Lychee, після його встановлення виконайте:

```sh
npm run _lychee -- check:links
```

> [!TIP] Порада
>
> Хочете використовувати Lychee замість htmltest? Після [встановлення][lychee-install] ви можете або додати префікс до одноразового запуску:
>
> ```sh
> npm run _lychee -- check:links
> ```
>
> або встановити таку змінну середовища, щоб усі npm-скрипти, які покладаються на неї (прямо чи опосередковано, як-от `check:links`, `check` тощо), використовували Lychee:
>
> ```sh
> export LINK_CHECKER=lychee
> ```

## Типові команди {#common-commands}

| Команда                | Обсяг перевірки    | Засіб перевірки                      |
| ---------------------- | ------------------ | ------------------------------------ |
| `check:links`          | Весь сайт          | `LINK_CHECKER` (стандартно htmltest) |
| `check:links:htmltest` | Весь сайт          | htmltest                             |
| `check:links:lychee`   | Весь сайт          | Lychee                               |
| `check:links:diff`     | Лише змінені файли | Lychee                               |

Скрипти `check:links` та `check:links:*` працюють на збірці `BUILD_KIND`. Докладніше дивіться в [Типи збірки: повна та скорочена][Build kinds: full and lean].

[Build kinds: full and lean]: ../#build-kinds

## Refcache {#refcache}

Сайт має кеш зовнішніх посилань (refcache), який зберігається у системі контролю версій. Він створюється та оновлюється htmltest. Наразі Lychee не налаштований на оновлення refcache. Щоб оновити refcache, виконайте `fix:refcache` або перевірте посилання за допомогою htmltest.

## Робочі процеси оновлення refcache та обслуговування {#workflows}

Наступні робочі процеси виконуються щоденно та запускають команду перевірки посилань:

| Робочий процес                      | Засіб    | Збірка    |
| ----------------------------------- | -------- | --------- |
| Оновлення refcache (`fix:refcache`) | htmltest | **повна** |
| Обслуговування (`fix-and-test:all`) | htmltest | **повна** |

Оновлення refcache спочатку чистить кеш, а потім запускає `check:links:htmltest`, який оновлює записи в кеші, якщо вони все ще використовуються в документації.

[Робочий процес обслуговування][housekeeping] запускає `fix-and-test:all`, який викликає `fix:refcache` і навмисно пропускає `check:links`, щоб посилання перевірялися рівно один раз (через htmltest, який оновлює refcache).

## У CI {#in-ci}

Робочий процес [`check-links.yml`][ci] збирає сайт один раз (скорочено) та передає цей артефакт через частки htmltest і перевірку Lychee, тому локальні запуски та CI перевіряють ту саму збірку.

[ci]: ../ci-workflows/
[housekeeping]: ../ci-workflows/#housekeeping
[htmltest]: https://github.com/wjdp/htmltest
[Lychee]: https://lychee.cli.rs/
[lychee-install]: https://lychee.cli.rs/guides/getting-started/
