Skip to content

Latest commit

 

History

History
66 lines (52 loc) · 4.71 KB

File metadata and controls

66 lines (52 loc) · 4.71 KB

diode-editor.github.io

Сайт Diode и курируемый реестр расширений, который раздаётся отсюда же через GitHub Pages.

index.html                          сайт
extensions/<publisher>.<name>.json  ИСТОЧНИК ПРАВДЫ реестра — PR-ы сюда
artifacts/<id>-<version>.vsix       байты ТОЛЬКО наших собственных расширений
registry/v1/index.json              СГЕНЕРИРОВАНО — руками не трогать
registry/v1/meta/<id>.json          СГЕНЕРИРОВАНО — руками не трогать
scripts/registry.mjs                валидатор и сборщик

Публичные адреса:

  • https://diode-editor.github.io/registry/v1/index.json — список для поиска и Extensions view;
  • https://diode-editor.github.io/registry/v1/meta/<id>.json — карточка расширения.

v1 в пути — версия схемы. Ломающая смена формата встанет рядом как v2, а уже выпущенные редакторы продолжат читать v1.

Курируемость

В реестр попадает только то, что мы проверили в Diode: расширение заводится через extension host и его ключевые сценарии проходят. Для стока из Open VSX (kind: "proxy-openvsx") это значит, что запинена конкретная версия — URL плюс sha256; байты остаются у автора, мы их не перехостим. Свои расширения (kind: "native") лежат в artifacts/.

Опубликованная версия неизменна. Обновление — это добавление новой записи в versions, а не правка существующей: клиенты уже запинили sha256, и подмена артефакта под тем же номером — ровно то, от чего пин защищает. CI отказывает в правке и удалении опубликованных версий.

Как добавить расширение

  1. Создать extensions/<publisher>.<name>.json. Имя файла — первичный ключ и обязано совпадать с полем id, а id — с publisher.name из манифеста расширения (регистр значим: при установке Diode сверяет id с манифестом побайтно).
  2. Заполнить запись версии: version, engines (хотя бы одно из diode/vscode, валидный semver-диапазон), artifact (https, разрешённый хост), sha256 (64 hex в нижнем регистре), опционально size и publishedAt.
  3. Проверить локально:
    npm ci
    node scripts/registry.mjs validate --fetch
    --fetch реально скачивает артефакт и сверяет sha256 и size — то есть проверяет пин, а не его переписанную копию.
  4. Прислать PR, трогающий только extensions/artifacts/, если расширение наше). registry/v1/** собирает CI после мержа — в PR этих файлов быть не должно.

Форма записи и её нормативное описание — src/vs/platform/extensionManagement/common/registryFormat.ts в репозитории редактора. Проверки в scripts/registry.mjs — сознательно упрощённое эхо этого норматива: строже (неизвестные ключи и невалидные диапазоны здесь фатальны), но описано отдельно, чтобы CI сайта не тащил тулчейн редактора.

Команды

node scripts/registry.mjs validate [--base <ref>] [--fetch] [--allow-removals]
node scripts/registry.mjs build [--check]

--base <ref> включает проверку иммутабельности против ветки (в CI — origin/main). --allow-removals снимает запрет на удаление версий и расширений — флаг мейнтейнера для аварийного снятия, не для обычного PR. build --check проверяет, что опубликованный вид соответствует исходникам, ничего не записывая.