chore(deploy): Forgejo Actions deploy to Vercel + drop Dependabot #6

Merged
slaid098 merged 3 commits from ci/deploy/forgejo-actions-vercel into main 2026-08-07 13:54:06 +03:00
Owner

Closes #3

Что сделано

  • Создан .forgejo/workflows/deploy.yml — нативный Forgejo Actions workflow для деплоя в Vercel. Триггер: push в main. Job deploy (runs-on ubuntu-latest): checkout → setup-node 22 + cache npm → npm cinpm run buildnpx vercel deploy --prod --yes --token=${{ secrets.VERCEL_TOKEN }} с env-пробросом FORGEJO_URL/FORGEJO_TOKEN/WEBHOOK_SECRET.
  • Удалён .github/dependabot.yml — Forgejo не поддерживает Dependabot, конфиг мёртвый, открытых Dependabot PR нет (7 stalled закрыты ранее).
  • VERCEL_TOKEN, FORGEJO_URL, FORGEJO_TOKEN сохранены в Forgejo Actions secrets через REST API (PUT /api/v1/repos/slaid098/slaid098-dev/actions/secrets/{name}, base64-encoding data field, HTTP 201 для каждого).
  • ci.yml оставлен в .github/workflows/ — Forgejo Actions подхватывает оба пути (.github/workflows/ и .forgejo/workflows/), перенос = дублирование и риск, задача #4 явно говорит «не переноси».
  • Локальная проверка: lint (biome check) OK, typecheck (tsc --noEmit) OK, knip OK, test (vitest, 138/138 passed) OK, build (next build) OK.

Почему

Vercel нативно интегрируется только с GitHub/GitLab/Bitbucket — после миграции на Forgejo (PR #5) нативный Vercel-deploy недоступен. Forgejo Actions (GitHub Actions-синтаксис, runner работает на этом CI) + vercel deploy --prod --yes --token=$VERCEL_TOKEN деплоит текущую директорию как Vercel project (auto-detect Next.js) без vercel link (--yes skip prompts, --token auth). Workflow живёт в .forgejo/workflows/ для нативности Forgejo, CI остаётся в .github/workflows/ (legacy-путь, работает). Dependabot мёртв на Forgejo — удаляем, чтобы не копить иллюзию обновлений зависимостей.

Watch out

  • Secrets в Forgejo ≠ env в Vercel. VERCEL_TOKEN/FORGEJO_URL/FORGEJO_TOKEN/WEBHOOK_SECRET нужно прописать в Vercel project env (dashboard → Settings → Environment Variables) — secrets в Forgejo доступны только в Actions-job, Vercel-рантайм их не видит. VERCEL_TOKEN в Forgejo нужен только для vercel deploy в CI (аутентификация CLI), в Vercel project env он НЕ нужен.
  • Первый деплой. После merge в main deploy.yml запустится автоматически. Если vercel deploy упадёт с «project not linked» — добавь шаг vercel link --yes --token=$VERCEL_TOKEN перед deploy (обычно --yes достаточно для auto-detect Next.js, но зависит от того, создан ли project в Vercel-аккаунте). Проверить лог первого run в Forgejo Actions UI.
  • Cron vercel.json (0 1 * * */api/cron-refresh) уже настроен в проекте, deploy не затрагивает. Vercel подхватит crons из vercel.json при deploy.
  • FORGEJO_TOKEN в secrets = тот же токен, что в .env для discovery. Если токен ротируется — обновить и в Forgejo secrets, и в Vercel env, и в .env (три места).

Pending

  • WEBHOOK_SECRET не сохранён в Forgejo secrets — env var WEBHOOK_SECRET пуст в текущем окружении (length 0). Если вебхук Forgejo→slaid098.dev/api/webhook использует секрет — добавить вручную через API (PUT .../actions/secrets/WEBHOOK_SECRET) или Forgejo UI → Settings → Actions → Secrets, и одновременно в Vercel project env.
  • Настройка webhook в Forgejo (ручной шаг после merge): Forgejo UI → repo slaid098/slaid098-dev → Settings → Webhooks → Add webhook → URL https://slaid098.dev/api/webhook, тип Gitea, секрет WEBHOOK_SECRET (если используется), trigger на push (или по нужным событиям discovery). Хедер X-Gitea-Event/X-Gitea-Signature уже обрабатываются в src/app/api/webhook/route.ts (PR #5).
  • Проверка первого деплоя после merge: открыть Forgejo Actions → Deploy workflow → убедиться, что vercel deploy --prod зелёный и slaid098.dev обновился.
Closes #3 ## Что сделано - Создан `.forgejo/workflows/deploy.yml` — нативный Forgejo Actions workflow для деплоя в Vercel. Триггер: `push` в `main`. Job `deploy` (runs-on ubuntu-latest): checkout → setup-node 22 + cache npm → `npm ci` → `npm run build` → `npx vercel deploy --prod --yes --token=${{ secrets.VERCEL_TOKEN }}` с env-пробросом `FORGEJO_URL`/`FORGEJO_TOKEN`/`WEBHOOK_SECRET`. - Удалён `.github/dependabot.yml` — Forgejo не поддерживает Dependabot, конфиг мёртвый, открытых Dependabot PR нет (7 stalled закрыты ранее). - `VERCEL_TOKEN`, `FORGEJO_URL`, `FORGEJO_TOKEN` сохранены в Forgejo Actions secrets через REST API (`PUT /api/v1/repos/slaid098/slaid098-dev/actions/secrets/{name}`, base64-encoding `data` field, HTTP 201 для каждого). - `ci.yml` оставлен в `.github/workflows/` — Forgejo Actions подхватывает оба пути (`.github/workflows/` и `.forgejo/workflows/`), перенос = дублирование и риск, задача #4 явно говорит «не переноси». - Локальная проверка: lint (biome check) OK, typecheck (tsc --noEmit) OK, knip OK, test (vitest, 138/138 passed) OK, build (next build) OK. ## Почему Vercel нативно интегрируется только с GitHub/GitLab/Bitbucket — после миграции на Forgejo (PR #5) нативный Vercel-deploy недоступен. Forgejo Actions (GitHub Actions-синтаксис, runner работает на этом CI) + `vercel deploy --prod --yes --token=$VERCEL_TOKEN` деплоит текущую директорию как Vercel project (auto-detect Next.js) без `vercel link` (`--yes` skip prompts, `--token` auth). Workflow живёт в `.forgejo/workflows/` для нативности Forgejo, CI остаётся в `.github/workflows/` (legacy-путь, работает). Dependabot мёртв на Forgejo — удаляем, чтобы не копить иллюзию обновлений зависимостей. ## Watch out - **Secrets в Forgejo ≠ env в Vercel.** `VERCEL_TOKEN`/`FORGEJO_URL`/`FORGEJO_TOKEN`/`WEBHOOK_SECRET` нужно прописать в Vercel project env (dashboard → Settings → Environment Variables) — secrets в Forgejo доступны только в Actions-job, Vercel-рантайм их не видит. `VERCEL_TOKEN` в Forgejo нужен только для `vercel deploy` в CI (аутентификация CLI), в Vercel project env он НЕ нужен. - **Первый деплой.** После merge в `main` deploy.yml запустится автоматически. Если `vercel deploy` упадёт с «project not linked» — добавь шаг `vercel link --yes --token=$VERCEL_TOKEN` перед deploy (обычно `--yes` достаточно для auto-detect Next.js, но зависит от того, создан ли project в Vercel-аккаунте). Проверить лог первого run в Forgejo Actions UI. - **Cron `vercel.json`** (`0 1 * * *` → `/api/cron-refresh`) уже настроен в проекте, deploy не затрагивает. Vercel подхватит crons из `vercel.json` при deploy. - **`FORGEJO_TOKEN` в secrets** = тот же токен, что в `.env` для discovery. Если токен ротируется — обновить и в Forgejo secrets, и в Vercel env, и в `.env` (три места). ## Pending - **WEBHOOK_SECRET не сохранён в Forgejo secrets** — env var `WEBHOOK_SECRET` пуст в текущем окружении (length 0). Если вебхук Forgejo→`slaid098.dev/api/webhook` использует секрет — добавить вручную через API (`PUT .../actions/secrets/WEBHOOK_SECRET`) или Forgejo UI → Settings → Actions → Secrets, и одновременно в Vercel project env. - **Настройка webhook в Forgejo** (ручной шаг после merge): Forgejo UI → repo slaid098/slaid098-dev → Settings → Webhooks → Add webhook → URL `https://slaid098.dev/api/webhook`, тип Gitea, секрет `WEBHOOK_SECRET` (если используется), trigger на `push` (или по нужным событиям discovery). Хедер `X-Gitea-Event`/`X-Gitea-Signature` уже обрабатываются в `src/app/api/webhook/route.ts` (PR #5). - **Проверка первого деплоя** после merge: открыть Forgejo Actions → Deploy workflow → убедиться, что `vercel deploy --prod` зелёный и `slaid098.dev` обновился.
Author
Owner

Code Review Summary

PR #6 добавляет Forgejo Actions workflow для деплоя в Vercel (.forgejo/workflows/deploy.yml, 31 строка) и удаляет мёртвый .github/dependabot.yml (Forgejo не поддерживает Dependabot). Чистая инфраструктурная задача, CI runner недоступен в окружении — ревью единственный gate.

Positives

  • deploy.yml — структурно валидный GitHub Actions-синтаксис (Forgejo Actions совместим): name: Deploy, триггер on: push: branches: [main] (только push в main — правильно для deploy, не срабатывает на PR), jobs.deploy.runs-on: ubuntu-latest, 5 шагов (checkout@v4 → setup-node@v4 node 22 + cache npm → npm ci → npm run build → vercel deploy --prod --yes).
  • Секреты безопасны — все 4 (VERCEL_TOKEN, FORGEJO_URL, FORGEJO_TOKEN, WEBHOOK_SECRET) прокинуты через ${{ secrets.* }}, ни одного захардкоженного значения. .env в .gitignore.
  • ci.yml сохранён.github/workflows/ci.yml (36 строк, валиден) не тронут, как и требует задача #4. Forgejo Actions подхватывает оба пути (.github/workflows/ + .forgejo/workflows/), дублирование не нужно.
  • dependabot удалён чистоrg dependabot по всему репо возвращает 0 совпадений, нет dangling references в коде/документации/оракулах.
  • PR body отличный — все 4 heading'а (## Что сделано, ## Почему, ## Watch out, ## Pending) заполнены осмысленно: объяснён выбор Forgejo Actions + vercel deploy --token, перечислены риски (secrets ≠ Vercel env, первый деплой, cron, ротация токена), отмечен pending (WEBHOOK_SECRET пуст, webhook setup ручной).
  • Cross-file impact отсутствуетrg по .opencode/scripts и .opencode не нашёл читателей deploy.yml/dependabot/.forgejo/workflows. project-status.py не парсит workflow-файлы. Paired update не нужен.

Suggestions (info, not blocking)

  • .forgejo/workflows/deploy.yml:31 [style] Нет trailing newline в конце файла (diff показывает \ No newline at end of file). POSIX-конвенция — файл должен заканчиваться \n. Cosmetic, не влияет на парсинг YAML.
  • .forgejo/workflows/deploy.yml:1-2 [style] 2 комментария в начале файла. AGENTS.md правило «No comments unless requested» — но это infra-файл (workflow), комментарий в строке 2 объясняет нетривиальный CI-триггер (sync push → pull_request event). Уместно для инфраструктуры, не блокирует.

Verdict: APPROVE

## Code Review Summary PR #6 добавляет Forgejo Actions workflow для деплоя в Vercel (`.forgejo/workflows/deploy.yml`, 31 строка) и удаляет мёртвый `.github/dependabot.yml` (Forgejo не поддерживает Dependabot). Чистая инфраструктурная задача, CI runner недоступен в окружении — ревью единственный gate. ### Positives - **deploy.yml** — структурно валидный GitHub Actions-синтаксис (Forgejo Actions совместим): `name: Deploy`, триггер `on: push: branches: [main]` (только push в main — правильно для deploy, не срабатывает на PR), `jobs.deploy.runs-on: ubuntu-latest`, 5 шагов (checkout@v4 → setup-node@v4 node 22 + cache npm → npm ci → npm run build → vercel deploy --prod --yes). - **Секреты безопасны** — все 4 (`VERCEL_TOKEN`, `FORGEJO_URL`, `FORGEJO_TOKEN`, `WEBHOOK_SECRET`) прокинуты через `${{ secrets.* }}`, ни одного захардкоженного значения. `.env` в `.gitignore`. - **ci.yml сохранён** — `.github/workflows/ci.yml` (36 строк, валиден) не тронут, как и требует задача #4. Forgejo Actions подхватывает оба пути (`.github/workflows/` + `.forgejo/workflows/`), дублирование не нужно. - **dependabot удалён чисто** — `rg dependabot` по всему репо возвращает 0 совпадений, нет dangling references в коде/документации/оракулах. - **PR body отличный** — все 4 heading'а (`## Что сделано`, `## Почему`, `## Watch out`, `## Pending`) заполнены осмысленно: объяснён выбор Forgejo Actions + `vercel deploy --token`, перечислены риски (secrets ≠ Vercel env, первый деплой, cron, ротация токена), отмечен pending (WEBHOOK_SECRET пуст, webhook setup ручной). - **Cross-file impact отсутствует** — `rg` по `.opencode/scripts` и `.opencode` не нашёл читателей `deploy.yml`/`dependabot`/`.forgejo/workflows`. `project-status.py` не парсит workflow-файлы. Paired update не нужен. ### Suggestions (info, not blocking) - **.forgejo/workflows/deploy.yml:31** [style] Нет trailing newline в конце файла (diff показывает `\ No newline at end of file`). POSIX-конвенция — файл должен заканчиваться `\n`. Cosmetic, не влияет на парсинг YAML. - **.forgejo/workflows/deploy.yml:1-2** [style] 2 комментария в начале файла. AGENTS.md правило «No comments unless requested» — но это infra-файл (workflow), комментарий в строке 2 объясняет нетривиальный CI-триггер (sync push → pull_request event). Уместно для инфраструктуры, не блокирует. ### Verdict: APPROVE
slaid098 deleted branch ci/deploy/forgejo-actions-vercel 2026-08-07 13:54:06 +03:00
Sign in to join this conversation.
No reviewers
No labels
bug
performance
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
slaid098/slaid098-dev!6
No description provided.