sched — публикация на GitHub (private-dev-public-publish, CI, Pages, синк dev→pub)
concept
sched
runbook
publish
github
pages
private-dev-public-publish
docus
ci
concepts/runbooks-index.md
concepts/docus-github-pages-pitfalls.md
2026-08-27
sched → GitHub: публикация и синк (runbook)
⚙️ СЛУЖЕБНЫЙ РАНБУК — только для администратора проекта .admin.
Применять/выполнять шаги может только .admin (оператор проекта admin). Другим проектам/агентам — читать по запросу, не выполнять.
Из проекта не выносить: не копировать в другие вики, не пересказывать, не публиковать.
Нужен деплой или прод-операция по этому ранбуку — поставить задачу админу (.admin) и написать письмо. Админ выполняет, остальные верифицируют.
Публикация sched (шедулер, OSS, MIT) на GitHub по паттерну
private-dev-public-publish: разработка в приватном Gitea, наружу — курируемая
копия. Первый паблиш — 2026-08-27 (task:1149, по «го» vitya).
CI:.github/workflows/ci.yml — test (unit, без БД) + docs (Pages). Конфиг юнит-сьюта: vitest.ci.config.ts.
Доки:docs/ (Docus 5.12.3 на Nuxt), dist = docs/dist (трекается, Pages-сборка).
Storage-тесты с БД: локально (docker: mongo 27017, pg 5433 postgres:test, mysql 3308 root:test, mariadb 3307 root:test).
Синк dev → pub (курируемая копия)
Список файлов:git -C ~/projects/sched ls-files минус исключения:
^\.wiki/|^\.tasks/|^\.agents/|^AGENTS\.md$|^CLAUDE\.md$|^branding/pora-|^pngtree-|^327274997_|^cat-clock-.
Untracked в dev (canva/istock/logo.ai/logo.png/logo.svg/черновики) НЕ копируются.
Копировать в ~/projects/sched-upstream (mkdir -p + cp по списку).
Выбелить (dev-приватное → публичное), файлы в pub-копии:
.yarnrc.yml → npmRegistryServer: "https://registry.npmjs.org", без токена;
examples/*/generate.ps1, README, test → убрать «verdaccio subpath export».
dist:rm -rf docs/dist && cp -r dev/docs/dist + скраб остатков git.kzntsv (в т.ч. JSON-экранированных \u002F). docs/dist/logo.svgНЕ коммитить (user: svg не едет; источник в корне dev untracked).
test (unit): checkout → setup-node 24 → corepack enable → yarn install --immutable → yarn workspaces foreach --all -pt --exclude docs run build → yarn tsc --noEmit → yarn vitest run --config vitest.ci.config.ts (исключает packages/storage-*/test/** — им нужны живые БД).
docs: на push в main: install → yarn workspace docs build → upload-pages-artifact (docs/dist) → deploy-pages. Pages включён (gh api repos/schedjs/sched/pages -X POST -f build_type=workflow).
Pages: перезапуск предыдущего успешного deploy-pages (Pages → последний деплой) или push реверта.
CI-конфиг: фиксы в dev → синк → push.
Gotchas
app.baseURL: '/sched/' обязателен (Pages-subpath), но Docus игнорирует его для двух ссылок: index meta-refresh (url=/docs/introduction) и favicon (href="/favicon.ico") → пост-фикс в scripts/docs-dist.mjs (запускается после generate; срабатывает и в CI).
NuxtImg двойная база лого: header logo '/logo.png' → /_ipx/_/sched/logo.png (404, _ipx не генерится статически). Фикс: полный URL в header.logo.light/dark (https://schedjs.github.io/sched/logo.png) — ipx пропускает внешние.
Футер: 2 GitHub-иконки — Docus сам подставляет github из git-remote + explicit socials.github. Убрать explicit (pub remote = github.com → 1 иконка). В dev-сборке (Gitea remote) футер покажет Gitea-ссылку — при синке dist скрабить.
docs/dist/logo.svg регенерируется из docs/public/logo.svg при каждой сборке (2026-08-27: вынесен в корень dev, untracked) — не коммитить в pub.
CI: dist нет в git (gitignored) → build до tsc (cross-package types через dist).
corepack vs setup-node cache: yarn — кэш дёргает системный yarn 1 → падает на packageManager. Кэш не использовать.
mariadb:11 первый старт дольше health-окна GH Actions (76s+) — healthcheck не вешать; ждать готовности node-скриптом на драйверах (pg/mysql2/mongodb) или юнит-only CI.
yarn.lock в Berry-формате без URL; может быть устаревшим (nodemailer) — yarn install в dev, синк. До npm-паблиша @sched/mcp@npm:^0.4.0 резолвится в workspace (transparent) — install с npmjs работает.
Процесс-раннер в тестах: спавнит с чистым env (без PATH) → ['node', …] падает ENOENT на Linux CI → в real-spawn тестах process.execPath.
Осталось (на 2026-08-27)
npm-паблишСДЕЛАНО 2026-08-27: скоуп @schedjs/*, НЕ@sched (имя sched занято на npmjs юзером-профилем → оргу@sched создать нельзя; @schedjs свободен и совпадает с GitHub-org). Опубликованы все 9 пакетов: @schedjs/{core,admin-api,cli,mcp,storage-mongo,storage-mysql,storage-postgres,ui,daemon}. В dev-манифестах/доках/README тоже переименовано @sched/* → @schedjs/* (коммит 137f78b). npm-токен — npm/admin-npm-token (pass), owner org schedjs, bypass 2FA; старый apilki-токен удалён из pass.
docker-образ daemon: НЕ паблишен (publish-check ругается на registry.kzntsv.site/sched-daemon); цель — ghcr.io/schedjs/sched-daemon (как в выбеленных publish-check/Dockerfile).
task:720 pkg-repo-metadata — сделано (repository/homepage/bugs/author добавлены во все 9 манифестов в волне переименования);
Context7-сабмит (Pages живы); README npm-бейдж после паблиша — README во всех пакетах уже с бейджами;
schedjs.com — фаза SaaS (CNAME → Pages), обновить llms.domain и header.logo URL.
Связи
concepts/runbooks-index.md — индекс (строка sched).
Shared wiki (mappa): Docus-подводные камни — docus-github-pages-pitfalls (тема создана из этого опыта).
Скил private-dev-public-publish (глобальный) — общая топология двух репо.