diff --git a/.github/workflows/ci.yml b/.gitea/workflows/ci.yml similarity index 100% rename from .github/workflows/ci.yml rename to .gitea/workflows/ci.yml diff --git a/.gitignore b/.gitignore index 35a5cdb..e3b359a 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,8 @@ src/core/Deal.Api/data/ # Python __pycache__/ *.pyc + +# Gitea runner: секреты и локальное состояние +!deploy/gitea-runner/.env.example +deploy/gitea-runner/.env +deploy/gitea-runner/data/ diff --git a/deploy/gitea-runner/.env.example b/deploy/gitea-runner/.env.example new file mode 100644 index 0000000..15f4e2a --- /dev/null +++ b/deploy/gitea-runner/.env.example @@ -0,0 +1,14 @@ +# Адрес инстанса Gitea +GITEA_INSTANCE_URL=https://gitea.khomegeneric.keenetic.pro + +# Токен регистрации раннера: Gitea -> Site Administration (или репозиторий) -> Actions -> Runners +# -> Create new runner; либо API: +# curl -sk -u rust:ПАРОЛЬ -X GET \ +# https://gitea.khomegeneric.keenetic.pro/api/v1/repos/rust/Deal/actions/runners/registration-token +RUNNER_TOKEN= + +# Имя раннера в интерфейсе Gitea +RUNNER_NAME=deal-runner + +# Метки для runs-on (по умолчанию хватает ubuntu-latest) +# RUNNER_LABELS=ubuntu-latest:docker://gitea/runner-images:ubuntu-latest diff --git a/deploy/gitea-runner/README.md b/deploy/gitea-runner/README.md new file mode 100644 index 0000000..3c10507 --- /dev/null +++ b/deploy/gitea-runner/README.md @@ -0,0 +1,34 @@ +# Gitea Actions Runner (Deal CI) + +Раннер для `.gitea/workflows/ci.yml`. Workflow требует метку `ubuntu-latest`; +job-контейнер — `gitea/runner-images:ubuntu-latest`, .NET 10 и Node 20 ставятся +шагами `setup-dotnet`/`setup-node` внутри job'а. + +## Поднять на любой машине с Docker (в той же сети, что Gitea) + +```sh +cp .env.example .env # вписать RUNNER_TOKEN +docker compose up -d +``` + +Токен: Gitea → **Site Administration → Actions → Runners → Create new runner** +или API (см. `.env.example`). + +Проверка: Gitea → репозиторий → **Actions → Runners** — раннер `deal-runner` +должен быть Idle. Далее любой `git push` в `main` запускает workflow +(`.gitea/workflows/ci.yml`: `sh scripts/ci.sh` — сборка 5 решений, тесты, +скан уязвимостей, сборка и линтер фронта). + +## Перенос на сервер Gitea + +1. Скопировать каталог на сервер, заполнить `.env`, `docker compose up -d`. +2. Локальный раннер погасить: `docker compose down` (каталог `data/` содержит + регистрацию — при переносе можно удалить и перерегистрировать). + +## Заметки + +- Первая строка pulls ~1.5 GB (`gitea/runner-images:ubuntu-latest` + SDK ~200 MB + при первом прогоне); последующие прогоны — инкрементальные. +- `restart: unless-stopped` — раннер переживает перезагрузку хоста. +- Токен регистрации используется один раз при `register`; хранить его в + репозитории нельзя — только в `.env` (в `.gitignore`). diff --git a/deploy/gitea-runner/docker-compose.yml b/deploy/gitea-runner/docker-compose.yml new file mode 100644 index 0000000..86cc495 --- /dev/null +++ b/deploy/gitea-runner/docker-compose.yml @@ -0,0 +1,18 @@ +services: + runner: + image: gitea/act_runner:latest + container_name: deal-act-runner + restart: unless-stopped + depends_on: [] + environment: + # Адрес инстанса Gitea и токен регистрации — в .env рядом с этим файлом + GITEA_INSTANCE_URL: ${GITEA_INSTANCE_URL:?заполните .env} + GITEA_RUNNER_REGISTRATION_TOKEN: ${RUNNER_TOKEN:?заполните .env} + GITEA_RUNNER_NAME: ${RUNNER_NAME:-deal-runner} + # Метки, по которым workflow находит раннер: runs-on: ubuntu-latest + GITEA_RUNNER_LABELS: ${RUNNER_LABELS:-ubuntu-latest:docker://gitea/runner-images:ubuntu-latest,ubuntu-22.04:docker://gitea/runner-images:ubuntu-22.04} + volumes: + # Раннер запускает job-контейнеры через docker хоста + - /var/run/docker.sock:/var/run/docker.sock + - ./data:/data + privileged: false