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