chore(deploy): migrate userscript URLs and CI from GitHub to Forgejo #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удалён — всеraw.githubusercontent.comURL мёртвые, git remote наgithub.comне отвечает, deploy CI падает. Юзеры не могут установить скрипт (install-ссылка 404) и не получают автообновления (@updateURL404). Последний рабочий деплой на dist = версия 1.0.4; source уже 1.0.5 (PR#47), но деплой не прошёл.Контекст (подтверждено эмпирически):
https://git.slaid098.dev/slaid098/opencode-voice-dictation(public, Forgejo 16.0.2,has_actions:true). Веткаmainна Forgejo =bc673e7(синхронна локальному HEAD).https://git.slaid098.dev/<owner>/<repo>/raw/branch/<branch>/<path>(проверено:assets/icon.png→ HTTP 200,image/png, 1384 байт).ci.ymlrun #2 →success(act_runner + docker, actions клонируются сdata.forgejo.org/actions/...— официального Forgejo-зеркала GitHub Actions).distветка на Forgejo ОТСУТСТВУЕТ (HTTP 404 на/branches/dist). Причина: deploy CI run #3 →failure. Из логов:peaceiris/actions-gh-pages@v4не найден в Forgejo action-зеркале (data.forgejo.org/peaceiris/actions-gh-pages→ 404 "repository not found").dist(GitHub):@version 1.0.4. Source:1.0.5вvite.config.ts:11иpackage.json:3(синхронно, PR#47).Задача
1.
vite.config.ts— заменить 4 мёртвых GitHub URL на Forgejo (строки 10, 19, 20-21, 22-23)namespace(строка 10):https://github.com/slaid098/opencode-voice-dictation→https://git.slaid098.dev/slaid098/opencode-voice-dictationicon(строка 19):https://raw.githubusercontent.com/slaid098/opencode-voice-dictation/main/assets/icon.png→https://git.slaid098.dev/slaid098/opencode-voice-dictation/raw/branch/main/assets/icon.pngupdateURL(строки 20-21):https://raw.githubusercontent.com/slaid098/opencode-voice-dictation/dist/opencode-voice-dictation.meta.js→https://git.slaid098.dev/slaid098/opencode-voice-dictation/raw/branch/dist/opencode-voice-dictation.meta.jsdownloadURL(строки 22-23):https://raw.githubusercontent.com/slaid098/opencode-voice-dictation/dist/opencode-voice-dictation.user.js→https://git.slaid098.dev/slaid098/opencode-voice-dictation/raw/branch/dist/opencode-voice-dictation.user.jsconnect: ["*"](строка 17) — наменено для кастомных STT-прокси (AGENTS.md## @connect).2.
README.md— 2 install-ссылки → Forgejo rawhttps://raw.githubusercontent.com/slaid098/opencode-voice-dictation/dist/opencode-voice-dictation.user.js→https://git.slaid098.dev/slaid098/opencode-voice-dictation/raw/branch/dist/opencode-voice-dictation.user.js3. Version bump 1.0.5 → 1.0.6 (СИНХРОННО в двух файлах — AGENTS.md
## Version bump)vite.config.ts:11:version: "1.0.5"→version: "1.0.6"package.json:3:"version": "1.0.5"→"version": "1.0.6"@updateURLна Forgejo. Без bump'а Tampermonkey/Violentmonkey не подтянут смену домена.4.
.github/workflows/deploy.yml— заменитьpeaceiris/actions-gh-pages@v4на plaingit pushТекущий шаг (строки 38-44) использует
peaceiris/actions-gh-pages@v4сsecrets.GITHUB_TOKEN— мёртв в Forgejo (404 в action-зеркале). Заменить на plain git push:actions/checkout@v7сfetch-depth: 0(нужен для push в другую ветку)actions/setup-node@v6(уже есть) —node-version: "22",cache: "npm"npm ci→ lint → typecheck → knip → test → build (без изменений, строки 21-36 остаются)./distв orphan-коммит и force-push вorigin/dist:.nojekyll(на старом GitHub dist) НЕ нужен — Forgejo не использует Jekyll. Не добавлять.permissions: contents: write(строки 7-8) — оставить, нужно для push.5. Удалить
.github/dependabot.ymlDependabot не работает на Forgejo (пакет
github-actionsинертен). Файл.github/dependabot.yml(12 строк) удалить целиком.6. Git remote — переключить origin на Forgejo
(выполняется в ветке PR; проверка:
git remote -vпоказывает Forgejo URL для fetch+push)7.
AGENTS.md— обновить строку 20 (описание dist деплоя)Текущая строка 20 упоминает
peaceiris/actions-gh-pages@v4и "raw files on thedistbranch". Обновить: убратьpeaceiris, указать что деплой через plaingit pushвdistветку, raw URL на Forgejo (git.slaid098.dev).Контракты
https://git.slaid098.dev/slaid098/opencode-voice-dictation/raw/branch/<branch>/<path>— проверено эмпирически (HEAD/GET → 200).@updateURLи@downloadURLуказывают наdistветку (raw).@icon— наmainветку (raw).vite.config.tsиpackage.jsonобязаны совпадать (рассинхрон = userscript-менеджеры не видят автообновление, AGENTS.md## Version bump).distветка создаётся первым прогоном нового deploy CI (orphan branch, force-push).push: branches: [main](без изменений).GITHUB_TOKENв Forgejo Actions = Gitea-совместимый auto-provided secret (алиас дляFORGEJO_TOKENв runner-контексте).Инварианты
@connect *НЕ сужать обратно кapi.groq.com(AGENTS.md## @connect— ломает кастомные STT-прокси).COMPOSER_SELECTORSпорядок НЕ менять (ADR 0001–0004, AGENTS.md## Composer selectors).assets/icon.pngНЕ удалять, путь НЕ менять (AGENTS.md## @icon).whisperPromptdefault""НЕ трогать (ADR-0007, PR#47).vite.config.ts+package.json(AGENTS.md## Version bump).docs/decisions/0005-*.md— если нужен ADR о миграции, создать новый0008-*.md.Граничные случаи
distветка не существует на Forgejo → первый deploy создаёт orphan branch черезgit init -b dist+git push --force(корректно).dist(permissions) →permissions: contents: write+GITHUB_TOKEN(Forgejo auto-provided). Если падает — CI-фаза пайплайна покажет ошибку, исправим в итерации.git push --forceперезаписывает чужие коммиты вdist— намеренно (orphan, clean rebuild каждый деплой,keep_files: falseсемантика сохранена).dist(с 1.0.4) остаётся мёртвым наraw.githubusercontent.com— юзеры оттуда не обновятся (404), но новый@updateURLна Forgejo сработает только при ручной переустановке скрипта (домен@updateURLсменился → userscript-менеджер не опрашивает старый URL). Bump 1.0.5→1.0.6 гарантирует что при переустановке юзер получит актуальную версию.Влияние на связанные компоненты
src/**— НЕ трогать (нет URL-ссылок в исходниках, подтверждено grep).tests/**— НЕ трогать (нет URL-ссылок).package.json— толькоversion(строка 3).repository/homepage/bugsполей нет — не добавлять.biome.json,knip.json,tsconfig.json,vitest.config.ts— без URL, не трогать.docs/decisions/**,docs/handoff/**— исторические ADR/handoff, append-only. НЕ редактировать (новый ADR-0008 — опционально, вне scope этого PR).AGENTS.md:20— обновить описание деплоя (пункт 7).act_runner+ docker,ubuntu-latestlabel маппится.actions/checkout@v7иactions/setup-node@v6клонируются сdata.forgejo.org/actions/...(official Forgejo mirror).Вне scope
package.jsonrepository/homepage/bugs поля (не критично, не добавляем)docs/handoff/**иdocs/decisions/**(исторические, append-only)ci.yml(уже работает на Forgejo, run #2 success)curlк Forgejo API)Критерии приемки
vite.config.ts— 4 URL (namespace, icon, updateURL, downloadURL) указывают наgit.slaid098.dev, не наgithub.com/raw.githubusercontent.comREADME.md— 2 install-ссылки (строки 43 EN + 107 RU) указывают на Forgejo rawvite.config.ts:11+package.json:3="1.0.6"(синхронно).github/workflows/deploy.yml— нетpeaceiris/actions-gh-pages, есть plaingit push --force origin dist.github/dependabot.ymlудалёнgit remote -v→origin=https://git.slaid098.dev/slaid098/opencode-voice-dictation.git(fetch+push)AGENTS.md:20— обновлено (нетpeaceiris, указан Forgejo)npm run lint→ pass (biome)npm run typecheck→ pass (tsc --noEmit)npm run test→ pass (vitest)npm run build→dist/opencode-voice-dictation.user.js+.meta.jsс@version 1.0.6и Forgejo URL в headerdistветка существует на Forgejo,https://git.slaid098.dev/slaid098/opencode-voice-dictation/raw/branch/dist/opencode-voice-dictation.user.js→ HTTP 200@connect *остался (не сужен)