fix(discovery): switch runtime from GitHub API to Forgejo API #2
Labels
No labels
bug
performance
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
slaid098/slaid098-dev#2
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Контекст
GitHub-аккаунт
slaid098забанен,api.github.com/raw.githubusercontent.comмертвы. Сайт-витрина собирает README и cover.png из git-репозиториев — сейчас все запросы идут в GitHub API, который больше не отвечает. Git remote уже переведён на Forgejo (git.slaid098.dev), но рантайм-код сайта по-прежнему хардкодит GitHub-эндпоинты. Сайт не показывает витрину и не рендерит обложки.Архитектура discovery нейтральна к хосту: fetch list → detail → raw README + cover-meta → parse → render. Логику переписывать не нужно — только адаптировать URL-шаблоны, заголовки и webhook под Forgejo API.
Задача
src/lib/git-host.ts(или env) —FORGEJO_URL,SHOWCASE_OWNER="slaid098", токен изFORGEJO_TOKEN. Заменить хардкодGITHUB_API/RAW_BASEвsrc/lib/readme-discovery.tsиsrc/app/apps/[slug]/cover/route.ts./api/v1):/api/v1/users/{owner}/repos?limit=50(параметрvisibilityу Forgejo может не работать — фильтр публичности на стороне клиента по полюprivate:false)./api/v1/repos/{owner}/{repo}(полеdefault_branchесть)./api/v1/repos/{owner}/{repo}/contents/{path}?ref={branch}(полеshaесть)./api/v1/repos/{owner}/{repo}/raw/{path}?ref={branch}(НЕ GitHub-формат/{owner}/{repo}/{branch}/path).Authorization: Bearer {token}(илиtoken {token}— проверить формат Forgejo) оставить; убратьX-GitHub-Api-Version;Accept: application/json.src/app/api/webhook/route.ts: заголовкиx-github-event→X-Gitea-Event,x-hub-signature-256(с префиксомsha256=) →X-Gitea-Signature(hex без префикса). Логика HMAC +timingSafeEqualта же. Имя env секретаGITHUB_WEBHOOK_SECRET→WEBHOOK_SECRET.src/components/site-footer.tsx→git.slaid098.dev/slaid098;src/components/qa-chat.tsxPROJECT_LINKS→ Forgejo URL;src/lib/support.tsGITHUB_URL→ Forgejo (или удалить, в UI не используется); лейблыi18n.ts«GitHub →» → «Репозиторий →»/«Repository →».GITHUB_TOKEN→FORGEJO_TOKEN(или сохранить имя — нетвредно, но осмысленное лучше). Прописать на VercelFORGEJO_URL,FORGEJO_TOKEN,WEBHOOK_SECRET.src/__tests__/: обновить hostname-матчеры (api.github.com→git.slaid098.dev/api/v1), имена webhook-заголовков, env-имена. ~6 тестовых файлов.Контракты
slaid098наgit.slaid098.dev, парсит README (6 delimiter-секций) +assets/cover.png, рендерит карточки. Контракт с парсером и showcase-рендером не меняется./api/webhook(секретWEBHOOK_SECRET) →revalidateTag. Cron/api/cron-refreshне меняется.SHOWCASE_OWNER = "slaid098"(владелец тот же на Forgejo).Инварианты
cache: "force-cache"+next:{revalidate:3600, tags:["showcase"]}на всех fetch'ах сохраняется. Тегиshowcase/repo:{name}не меняются.generateStaticParamstry/catch →[](билд не падает без токена / при rate limit) сохранён.ready:false, не выбрасывает.noUncheckedIndexedAccess/exactOptionalPropertyTypes— для полей Forgejo API (private,default_branch) guard!== undefined.Граничные случаи
forkесть → фильтр!r.forkсохранён. Проверить, чтоhtml_urlвозвращаетgit.slaid098.dev/...(для кнопки detail + JSON-LDcodeRepository).public— код уже skip'ает unknown events, не ломается.GITHUB_TOKENкак рудимент в env — убрать или переименовать.Влияние на связанные компоненты
src/lib/readme-discovery.ts— основная адаптация URL/заголовков.src/app/apps/[slug]/cover/route.ts— raw-URL + detail.src/app/api/webhook/route.ts— имена заголовков + env секрета.src/components/{site-footer,qa-chat}.tsx,src/lib/support.ts,src/lib/i18n.ts— UI-ссылки и лейблы..env.example— переименование/добавление переменных.scripts/spike-discovery.ts— используетreadme-discovery, поменяется автоматически.docs/project-map/,docs/decisions/— новый ADR про Forgejo-миграцию (supersedes GitHub-discovery ADR-014).Вне scope
Критерии приемки
/ru/appsи/en/appsрендерят карточки из публичных репо Forgejo (с валидным README + cover).[slug]показывает README + обложку из Forgejo.npm run build, lint, typecheck, тесты зелёные.api.github.com/raw.githubusercontent.com/github.com/slaid098.