Раздел для общего RELEASE.md. Команды gh выполняет владелец организации после решения о публикации. Всё ниже бесплатно на плане Free для публичного репо
obrashchenie-kit потребитель: нормы, сроки и календарь он берёт снимком из pal-norms, регионы и ведомства из pal-directory. Поэтому он пушится после pal-norms и pal-directory, когда у обоих зелёный pages и живые наборы данных
-
Pages через Actions, иначе первый
pages.ymlупадёт на деплое:gh api -X POST repos/openpalliative/obrashchenie-kit/pages -f build_type=workflow
Если Pages уже включены из ветки:
gh api -X PUT repos/openpalliative/obrashchenie-kit/pages -f build_type=workflow -
Права Actions: по умолчанию только чтение и разрешение ботам открывать PR. Без этого
create-pull-requestвsync-data.ymlпадает с ошибкой прав. То же разрешение нужно на уровне организацииgh api -X PUT orgs/openpalliative/actions/permissions/workflow -f default_workflow_permissions=read -F can_approve_pull_request_reviews=true gh api -X PUT repos/openpalliative/obrashchenie-kit/actions/permissions/workflow -f default_workflow_permissions=read -F can_approve_pull_request_reviews=true
-
Метки.
sync-data.ymlставит на PRfactsилиreview:legal, issues о заблокированном пакете и о сроках проверки идут сreview:legal, форма «Ошибка в документе» тоже ставитreview:legal.review:dataнужна для правок снимков руками. Все метки во всех репо ставитscripts/labelsиз хаба, только для этого репо:gh label create review:legal --color B60205 --description "Нужна проверка юристом" --repo openpalliative/obrashchenie-kit --force gh label create review:data --color FBCA04 --description "Данные изменились, нужна сверка человеком перед слиянием" --repo openpalliative/obrashchenie-kit --force gh label create facts --color 0E8A16 --description "Служебные снимки и даты проверки, семьи их не видят" --repo openpalliative/obrashchenie-kit --force
-
Закрытые отчёты об уязвимостях (на них ссылаются
SECURITY.md,CODE_OF_CONDUCT.mdиconfig.ymlформ issue):gh api -X PUT repos/openpalliative/obrashchenie-kit/private-vulnerability-reporting
Secret scanning, push protection и Dependabot alerts включаются в Settings > Code security
-
Свежие настоящие снимки соседей. Сборка для публикации идёт с
OK_VENDOR=realи отказывается собираться на тестовом снимке изtests/fixtures/vendor/. Локально, когда pal-norms и pal-directory уже собраны в соседних папках:sh scripts/sync-data --from local OK_VENDOR=real uv run python -m opsite build OK_VENDOR=real uv run python -m opsite check sh scripts/gate.shВ
deps.yamlдолжны стоять версии иcontent_sha256настоящих снимков, безfixture-в версии. Если соседи уже на Pages, вместо--from localможно--from pages, результат тот же -
Дата первой публикации пакета. В
data/pack/pack.yamlпоставитьfirst_public_atдатой пуша, в виде"2026-10-20", и закоммитить вместе с первым пушем. От этой даты считается правило трёх месяцев: если за 90 дней пакет так и не проверил юрист (списокreviewersпуст), ежемесячныйreview_dueоткроет issue «Архивировать kit?». Пустая дата значит, что правило не работает
-
pal-norms, дождаться зелёного
pagesи https://openpalliative.github.io/pal-norms/data/v1/index.json -
pal-directory, дождаться зелёного
pagesи https://openpalliative.github.io/pal-directory/data/v1/index.json -
obrashchenie-kit (этот репо). В нём уже лежат снимки из шага 1.5, первый деплой от живых соседей не зависит
-
Сразу после пуша ручной
sync-data, чтобы проверить, что снимки с Pages читаются:gh workflow run sync-data.yml --repo openpalliative/obrashchenie-kit
Если соседи на Pages совпадают с локальными снимками, PR не появится, это нормально. В логе шага
reportвидно, что изменилось и какие метки получил бы PR
| Workflow | Когда | Что проверить |
|---|---|---|
checks |
сам на push в main и на каждый PR, вручную gh workflow run checks.yml |
зелёный: actionlint, pytest, pack_lint, сборка, opsite check --ci, unit, e2e, скриншоты |
pages |
сам на push в main, вручную gh workflow run pages.yml |
зелёный, в шаге deploy адрес https://openpalliative.github.io/obrashchenie-kit/ |
sync-data |
по вторникам в 05:43 UTC, вручную gh workflow run sync-data.yml |
зелёный job sync; job review-due при ручном запуске сразу открывает issues по просроченным проверкам, это ожидаемо для демо-пакета |
Как живёт sync-data.yml:
- новые снимки приходят PR из ветки
sync/<дата>с меткойfacts(поменялись только календарь или номера, сборка зелёная) илиreview:legal(всё остальное). События отGITHUB_TOKENне запускают другие workflows, поэтомуsync-data.ymlсам запускаетchecks.ymlна ветке PR черезgh workflow run - если после обновления норма в пакете отменена или пропала, сборка в PR красная, а рядом issue «Пакет заблокирован» с меткой
review:legal - слияние PR человеком это обычный push в main, после него
pages.ymlпересобирает сайт сам. Отдельный запуск pages не нужен data/snapshots/upstream.json(версии иcontent_sha256снимков соседей на дату сверки) обновляется в том же PR, только когда снимки поменялись. Сайт этот файл не читает- в main бот напрямую не пишет, поэтому защита main ему не мешает
- последний шаг (с
if: always()) включаетsync-data.ymlобратно черезPUT .../actions/workflows/sync-data.yml/enable: GitHub выключает расписание в публичных репо после 60 дней без активности. Раз в месяц всё равно стоит открыть вкладку Actions и проверить, чтоsync-dataне выключен
Ruleset на main: запрет force push и удаления, изменения только через PR, обязательная проверка gate из checks.yml. Обязательного ревью CODEOWNERS не ставить, пока мейнтейнер один. Когда появится юрист в РФ, добавить его в .github/CODEOWNERS к строкам data/pack/ и включить обязательное ревью владельцев
После зелёного pages:
curl -s -o /dev/null -w '%{http_code}\n' https://openpalliative.github.io/obrashchenie-kit/
curl -s -o /dev/null -w '%{http_code}\n' https://openpalliative.github.io/obrashchenie-kit/nope/
curl -s https://openpalliative.github.io/obrashchenie-kit/nope/ | grep -c 'Такой страницы нет'
curl -s -o /dev/null -w '%{http_code}\n' https://openpalliative.github.io/obrashchenie-kit/sw.js
curl -s https://openpalliative.github.io/obrashchenie-kit/sitemap.xml | head -3/obrashchenie-kit/отдаёт 200, в подвале версия данных и дата/obrashchenie-kit/nope/отдаёт 404 и страницу404.htmlэтого репо («Такой страницы нет» и ссылка «К началу раздела «Заявления и жалобы»»), а не общую 404 GitHubsw.jsотдаёт 200. В браузере на/obrashchenie-kit/в инструментах разработчика, вкладка Application > Service workers, должен быть активный worker со scopehttps://openpalliative.github.io/obrashchenie-kit/. После этого страницы открываются без интернета- на странице
/obrashchenie-kit/data/версии снимков pal-norms и pal-directory совпадают сdeps.yaml, пометки «Снимок устарел» нет - headless-проверка: ни одного запроса за пределы
openpalliative.github.io
git tag -a v2026.10.20 -m "obrashchenie-kit 2026.10.20"
git push origin v2026.10.20release.yml прогоняет pytest, pack_lint, сборку с настоящими снимками и проверки сайта, потом публикует релиз:
obrashchenie-kit-<тег>-site.zip: готовый сайт_site, рассчитан на адрес/obrashchenie-kit/obrashchenie-kit-<тег>-data.zip: опубликованные наборыdata/v1со схемамиSHA256SUMS: проверкаsha256sum -c SHA256SUMS
- Description:
Заявления и жалобы для семей: попросить ответ на бумаге, посчитать срок ответа и выбрать следующий шаг - Website: https://openpalliative.github.io/obrashchenie-kit/
- Topics:
palliative-care,russia,legal-templates,deadlines,github-pages,offline-first - Social preview: загрузить
docs/social-preview.png(1280 на 640) в Settings > General вручную, API для этого нет
- actionlint 1.7.12 с shellcheck 0.10.0: 0 замечаний по 4 workflow (
sh scripts/gate.sh, шаг actionlint) uvx zizmor --offline: находок medium и выше нет. В режиме auditor остаются только низкие: нет комментариев к правам и имён у шагов- пины экшенов сверены
git ls-remote11.10.2026:
| Экшен | Версия | SHA |
|---|---|---|
| actions/checkout | v7.0.1 | 3d3c42e5aac5ba805825da76410c181273ba90b1 |
| astral-sh/setup-uv | v10.3.0 | 1c37ad07a6a961277cf70c0d37d6f313000f5884 |
| pnpm/action-setup | v6.1.0 | ea17c68df8912ef543352723c149a84f56e3d413 |
| actions/setup-node | v7.1.0 | 949feb2413d6458794dcd2491c4babbbce0c15c1 |
| actions/upload-artifact | v7.0.2 | cf430e030ddbb5b0abf93d22962f4752f3646cd9 |
| actions/upload-pages-artifact | v5.0.0 | fc324d3547104276b827a68afc52ff2a11cc49c9 |
| actions/deploy-pages | v5.0.1 | 368f82528645a54fb793d4d04e342629a3f51346 |
| peter-evans/create-pull-request | v8.1.1 | 5f6978faf089d4d20b00c7766989d076bb2fc7f1 |
Не проверено: живые прогоны на GitHub (репо ещё не опубликован), работа create-pull-request при защите main, ответ Pages соседей раннеру