ci: переключить registry на git.shx.one
Docker images / prepare-release (push) Successful in 6s
Docker images / backend-image (push) Successful in 4m25s
Docker images / frontend-image (push) Successful in 2m10s
Docker images / notify-webhook (push) Skipped
Docker images / updater-image (push) Successful in 45s
Docker images / publish-release (push) Successful in 6s

Обновить Gitea Actions, compose, updater и ссылки на образы.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Denozordec
2026-08-17 16:43:40 +07:00
co-authored by Cursor
parent 7f81c304ae
commit 7ed269cf2c
9 changed files with 43 additions and 43 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ const outputDir = process.env.RELEASE_OUTPUT_DIR
? join(repoRoot, process.env.RELEASE_OUTPUT_DIR) ? join(repoRoot, process.env.RELEASE_OUTPUT_DIR)
: join(repoRoot, ".ci", "release") : join(repoRoot, ".ci", "release")
const repository = process.env.GITEA_REPOSITORY ?? process.env.GITHUB_REPOSITORY ?? "" const repository = process.env.GITEA_REPOSITORY ?? process.env.GITHUB_REPOSITORY ?? ""
const serverUrl = (process.env.GITEA_SERVER_URL ?? "https://git.shts.su").replace(/\/$/, "") const serverUrl = (process.env.GITEA_SERVER_URL ?? "https://git.shx.one").replace(/\/$/, "")
const MANIFEST_COMMIT_LIMIT = Number(process.env.RELEASE_MANIFEST_COMMIT_LIMIT ?? 6) const MANIFEST_COMMIT_LIMIT = Number(process.env.RELEASE_MANIFEST_COMMIT_LIMIT ?? 6)
const CONVENTIONAL_RE = const CONVENTIONAL_RE =
+5 -5
View File
@@ -7,8 +7,8 @@ on:
workflow_dispatch: workflow_dispatch:
env: env:
REGISTRY: git.shts.su REGISTRY: git.shx.one
GITEA_SERVER_URL: https://git.shts.su GITEA_SERVER_URL: https://git.shx.one
jobs: jobs:
prepare-release: prepare-release:
@@ -76,7 +76,7 @@ jobs:
- name: Log in to Gitea Registry - name: Log in to Gitea Registry
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
registry: git.shts.su registry: git.shx.one
username: ${{ gitea.actor }} username: ${{ gitea.actor }}
password: ${{ secrets.ACTIONS_PAT }} password: ${{ secrets.ACTIONS_PAT }}
@@ -161,7 +161,7 @@ jobs:
- name: Log in to Gitea Registry - name: Log in to Gitea Registry
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
registry: git.shts.su registry: git.shx.one
username: ${{ gitea.actor }} username: ${{ gitea.actor }}
password: ${{ secrets.ACTIONS_PAT }} password: ${{ secrets.ACTIONS_PAT }}
@@ -214,7 +214,7 @@ jobs:
- name: Log in to Gitea Registry - name: Log in to Gitea Registry
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
registry: git.shts.su registry: git.shx.one
username: ${{ gitea.actor }} username: ${{ gitea.actor }}
password: ${{ secrets.ACTIONS_PAT }} password: ${{ secrets.ACTIONS_PAT }}
+25 -25
View File
@@ -23,13 +23,13 @@
| Контракты | `packages/contracts/` | Zod 4, `@mmapp/contracts` | — | встраиваются в frontend/backend | | Контракты | `packages/contracts/` | Zod 4, `@mmapp/contracts` | — | встраиваются в frontend/backend |
| Updater | `deploy/updater/` | bash, `docker:27-cli`, curl, jq | — | `…-updater` | | Updater | `deploy/updater/` | bash, `docker:27-cli`, curl, jq | — | `…-updater` |
| Деплой | `deploy/docker-compose.yml` | Docker Compose | — | — | | Деплой | `deploy/docker-compose.yml` | Docker Compose | — | — |
| CI | `.gitea/workflows/docker.yml` | Gitea Actions, Buildx | — | push в `git.shts.su` | | CI | `.gitea/workflows/docker.yml` | Gitea Actions, Buildx | — | push в `git.shx.one` |
Имена образов в registry для репозитория `denozord/MikrotikManager-3`: Имена образов в registry для репозитория `denozord/MikrotikManager-3`:
- `git.shts.su/denozord/mikrotikmanager-backend` - `git.shx.one/denozord/mikrotikmanager-backend`
- `git.shts.su/denozord/mikrotikmanager-frontend` - `git.shx.one/denozord/mikrotikmanager-frontend`
- `git.shts.su/denozord/mikrotikmanager-updater` - `git.shx.one/denozord/mikrotikmanager-updater`
Для другого owner/repo подставьте имя по правилу CI (см. [CI/CD](#cicd-gitea-actions)). Для другого owner/repo подставьте имя по правилу CI (см. [CI/CD](#cicd-gitea-actions)).
@@ -54,7 +54,7 @@ flowchart TB
subgraph ci [Gitea Actions] subgraph ci [Gitea Actions]
WF[".gitea/workflows/docker.yml"] WF[".gitea/workflows/docker.yml"]
WF --> Reg["git.shts.su registry"] WF --> Reg["git.shx.one registry"]
end end
subgraph prod [Прод-сервер] subgraph prod [Прод-сервер]
@@ -192,9 +192,9 @@ npm --prefix backend run db:studio
| Job | Build context | Dockerfile | Имя образа | | Job | Build context | Dockerfile | Имя образа |
|-----|---------------|------------|------------| |-----|---------------|------------|------------|
| `backend-image` | `.ci/docker/backend` (staging в CI) | `backend/Dockerfile` | `git.shts.su/<owner>/<stem>-backend` | | `backend-image` | `.ci/docker/backend` (staging в CI) | `backend/Dockerfile` | `git.shx.one/<owner>/<stem>-backend` |
| `frontend-image` | `.ci/docker/frontend` | `Dockerfile.frontend` | `git.shts.su/<owner>/<stem>-frontend` | | `frontend-image` | `.ci/docker/frontend` | `Dockerfile.frontend` | `git.shx.one/<owner>/<stem>-frontend` |
| `updater-image` | `deploy/updater` | `deploy/updater/Dockerfile` | `git.shts.su/<owner>/<stem>-updater` | | `updater-image` | `deploy/updater` | `deploy/updater/Dockerfile` | `git.shx.one/<owner>/<stem>-updater` |
- `<owner>` — первая часть `gitea.repository`, lower case. - `<owner>` — первая часть `gitea.repository`, lower case.
- `<stem>` — имя репозитория lower case без суффикса `-<цифры>` в конце (например `MikrotikManager-3``mikrotikmanager`). - `<stem>` — имя репозитория lower case без суффикса `-<цифры>` в конце (например `MikrotikManager-3``mikrotikmanager`).
@@ -212,7 +212,7 @@ npm --prefix backend run db:studio
- **`feat` / `feat!` / `BREAKING CHANGE`** → minor (`1.x.0`); **`fix`**, `chore`, `docs`, `refactor`, `style`, `test`, `build`, `ci` → patch (`1.0.x`). - **`feat` / `feat!` / `BREAKING CHANGE`** → minor (`1.x.0`); **`fix`**, `chore`, `docs`, `refactor`, `style`, `test`, `build`, `ci` → patch (`1.0.x`).
- Если после последнего тега нет новых коммитов, **релиз** пропускается; Docker-образы при этом всё равно собираются и публикуются с `:latest` и `:<sha>`. - Если после последнего тега нет новых коммитов, **релиз** пропускается; Docker-образы при этом всё равно собираются и публикуются с `:latest` и `:<sha>`.
- Первый релиз без тега `v1.0.0` возможен автоматически: CI берёт историю `HEAD`, считает bump от `1.0.0` и создаёт тег (например `v1.1.0` при `feat:`). - Первый релиз без тега `v1.0.0` возможен автоматически: CI берёт историю `HEAD`, считает bump от `1.0.0` и создаёт тег (например `v1.1.0` при `feat:`).
- Job **`publish-release`**: annotated tag `v1.2.3`, Gitea Release на `https://git.shts.su` (markdown notes), образы с тегами `:latest`, `:<sha>`, `:<semver>`. - Job **`publish-release`**: annotated tag `v1.2.3`, Gitea Release на `https://git.shx.one` (markdown notes), образы с тегами `:latest`, `:<sha>`, `:<semver>`.
- UI: версия в sidebar и страница **`/releases`**; manifest `public/release-manifest.json` (в CI подставляется из артефакта). - UI: версия в sidebar и страница **`/releases`**; manifest `public/release-manifest.json` (в CI подставляется из артефакта).
- Bootstrap: один раз выставить `1.0.0` в workspace `package.json` и создать тег **`v1.0.0`** на `main` перед первым автоматическим bump. - Bootstrap: один раз выставить `1.0.0` в workspace `package.json` и создать тег **`v1.0.0`** на `main` перед первым автоматическим bump.
- Сообщения коммитов: см. [`.cursor/rules/release-versioning.mdc`](.cursor/rules/release-versioning.mdc); subject и body — **на русском**, префикс Conventional Commits — на английском. - Сообщения коммитов: см. [`.cursor/rules/release-versioning.mdc`](.cursor/rules/release-versioning.mdc); subject и body — **на русском**, префикс Conventional Commits — на английском.
@@ -225,9 +225,9 @@ npm --prefix backend run db:studio
| Сервис | `container_name` | Образ (пример) | Порты host:container | Тома | `restart` | | Сервис | `container_name` | Образ (пример) | Порты host:container | Тома | `restart` |
|--------|------------------|----------------|----------------------|------|-----------| |--------|------------------|----------------|----------------------|------|-----------|
| backend | `mmapp-backend` | `git.shts.su/denozord/mikrotikmanager-backend:latest` | `8000:8000` | `backend-data``/app/data` | `unless-stopped` | | backend | `mmapp-backend` | `git.shx.one/denozord/mikrotikmanager-backend:latest` | `8000:8000` | `backend-data``/app/data` | `unless-stopped` |
| frontend | `mmapp-frontend` | `git.shts.su/denozord/mikrotikmanager-frontend:latest` | `3000:3000` | — | `unless-stopped` | | frontend | `mmapp-frontend` | `git.shx.one/denozord/mikrotikmanager-frontend:latest` | `3000:3000` | — | `unless-stopped` |
| updater | `mmapp-updater` | `git.shts.su/denozord/mikrotikmanager-updater:latest` | не публикуются | docker.sock, `updater-state``/state`, `targets.json``/etc/updater/targets.json:ro` | `unless-stopped` | | updater | `mmapp-updater` | `git.shx.one/denozord/mikrotikmanager-updater:latest` | не публикуются | docker.sock, `updater-state``/state`, `targets.json``/etc/updater/targets.json:ro` | `unless-stopped` |
Метки для updater на backend и frontend: Метки для updater на backend и frontend:
@@ -258,14 +258,14 @@ npm --prefix backend run db:studio
| `POLL_INTERVAL_SECONDS` | `300` | пауза между циклами опроса | | `POLL_INTERVAL_SECONDS` | `300` | пауза между циклами опроса |
| `HEALTH_TIMEOUT_SECONDS` | `120` | ожидание HTTP health | | `HEALTH_TIMEOUT_SECONDS` | `120` | ожидание HTTP health |
| `STOP_TIMEOUT_SECONDS` | `30` | `docker stop -t` | | `STOP_TIMEOUT_SECONDS` | `30` | `docker stop -t` |
| `REGISTRY` | `git.shts.su` | registry для `docker login` | | `REGISTRY` | `git.shx.one` | registry для `docker login` |
| `REGISTRY_USERNAME` | пусто | логин (если заданы оба с паролем) | | `REGISTRY_USERNAME` | пусто | логин (если заданы оба с паролем) |
| `REGISTRY_PASSWORD` | пусто | пароль registry | | `REGISTRY_PASSWORD` | пусто | пароль registry |
### Docker Compose ### Docker Compose
```bash ```bash
docker login git.shts.su docker login git.shx.one
export CORS_ORIGIN=http://<хост>:3000 export CORS_ORIGIN=http://<хост>:3000
export REGISTRY_USERNAME=<user> export REGISTRY_USERNAME=<user>
export REGISTRY_PASSWORD=<token> export REGISTRY_PASSWORD=<token>
@@ -307,8 +307,8 @@ docker run -d \
-v backend-data:/app/data \ -v backend-data:/app/data \
--label mmapp.updater.managed=true \ --label mmapp.updater.managed=true \
--label mmapp.updater.target=backend \ --label mmapp.updater.target=backend \
--label mmapp.updater.image=git.shts.su/denozord/mikrotikmanager-backend:latest \ --label mmapp.updater.image=git.shx.one/denozord/mikrotikmanager-backend:latest \
git.shts.su/denozord/mikrotikmanager-backend:latest git.shx.one/denozord/mikrotikmanager-backend:latest
``` ```
**Frontend:** **Frontend:**
@@ -320,8 +320,8 @@ docker run -d \
-p 3000:3000 \ -p 3000:3000 \
--label mmapp.updater.managed=true \ --label mmapp.updater.managed=true \
--label mmapp.updater.target=frontend \ --label mmapp.updater.target=frontend \
--label mmapp.updater.image=git.shts.su/denozord/mikrotikmanager-frontend:latest \ --label mmapp.updater.image=git.shx.one/denozord/mikrotikmanager-frontend:latest \
git.shts.su/denozord/mikrotikmanager-frontend:latest git.shx.one/denozord/mikrotikmanager-frontend:latest
``` ```
**Updater:** **Updater:**
@@ -331,7 +331,7 @@ docker volume create updater-state
docker run -d \ docker run -d \
--name mmapp-updater \ --name mmapp-updater \
--restart unless-stopped \ --restart unless-stopped \
-e REGISTRY=git.shts.su \ -e REGISTRY=git.shx.one \
-e REGISTRY_USERNAME=<user> \ -e REGISTRY_USERNAME=<user> \
-e REGISTRY_PASSWORD=<token> \ -e REGISTRY_PASSWORD=<token> \
-e POLL_INTERVAL_SECONDS=300 \ -e POLL_INTERVAL_SECONDS=300 \
@@ -340,7 +340,7 @@ docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \ -v /var/run/docker.sock:/var/run/docker.sock \
-v updater-state:/state \ -v updater-state:/state \
-v /path/to/targets.json:/etc/updater/targets.json:ro \ -v /path/to/targets.json:/etc/updater/targets.json:ro \
git.shts.su/denozord/mikrotikmanager-updater:latest git.shx.one/denozord/mikrotikmanager-updater:latest
``` ```
### Проверка после деплоя ### Проверка после деплоя
@@ -399,7 +399,7 @@ bash deploy/updater/validate.sh
## Первичная настройка сервера ## Первичная настройка сервера
Пошагово на чистом Linux-хосте с доступом в интернет и к `git.shts.su`. Пошагово на чистом Linux-хосте с доступом в интернет и к `git.shx.one`.
1. Установить Docker Engine и плагин Compose (официальная документация Docker для вашего дистрибутива). 1. Установить Docker Engine и плагин Compose (официальная документация Docker для вашего дистрибутива).
2. Проверить: 2. Проверить:
@@ -413,7 +413,7 @@ docker compose version
4. Войти в registry: 4. Войти в registry:
```bash ```bash
docker login git.shts.su docker login git.shx.one
``` ```
5. Получить файлы деплоя: клонировать репозиторий или скопировать каталог `deploy/` и подготовить `deploy/updater/targets.json`. 5. Получить файлы деплоя: клонировать репозиторий или скопировать каталог `deploy/` и подготовить `deploy/updater/targets.json`.
@@ -443,8 +443,8 @@ Updater опрашивает registry с интервалом `POLL_INTERVAL_SEC
### Ручное обновление ### Ручное обновление
```bash ```bash
docker pull git.shts.su/denozord/mikrotikmanager-backend:latest docker pull git.shx.one/denozord/mikrotikmanager-backend:latest
docker pull git.shts.su/denozord/mikrotikmanager-frontend:latest docker pull git.shx.one/denozord/mikrotikmanager-frontend:latest
``` ```
Через compose (пересоздание при смене образа): Через compose (пересоздание при смене образа):
@@ -485,7 +485,7 @@ docker start mmapp-backend
1. Установить Docker Engine и Compose plugin; проверить `docker version` и `docker compose version`. 1. Установить Docker Engine и Compose plugin; проверить `docker version` и `docker compose version`.
2. Открыть порты 3000 и 8000 (или обеспечить доступ клиентов к UI и API). 2. Открыть порты 3000 и 8000 (или обеспечить доступ клиентов к UI и API).
3. Выполнить `docker login git.shts.su`. 3. Выполнить `docker login git.shx.one`.
4. Склонировать репозиторий или скопировать `deploy/`. 4. Склонировать репозиторий или скопировать `deploy/`.
5. Задать `CORS_ORIGIN` (origin фронтенда для браузера). 5. Задать `CORS_ORIGIN` (origin фронтенда для браузера).
6. Задать `REGISTRY_USERNAME` и `REGISTRY_PASSWORD` для updater при приватном registry. 6. Задать `REGISTRY_USERNAME` и `REGISTRY_PASSWORD` для updater при приватном registry.
+1 -1
View File
@@ -1189,7 +1189,7 @@ export default function SettingsPage() {
Control plane EvoBGP: Bearer-ключ и роль viewer+ см.{" "} Control plane EvoBGP: Bearer-ключ и роль viewer+ см.{" "}
<a <a
className="underline underline-offset-2" className="underline underline-offset-2"
href="https://git.shts.su/denozord/EvoBGP/src/branch/main/docs/access.md" href="https://git.shx.one/denozord/EvoBGP/src/branch/main/docs/access.md"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >
+6 -6
View File
@@ -1,6 +1,6 @@
services: services:
backend: backend:
image: git.shts.su/denozord/mikrotikmanager-backend:latest image: git.shx.one/denozord/mikrotikmanager-backend:latest
container_name: mmapp-backend container_name: mmapp-backend
restart: unless-stopped restart: unless-stopped
ports: ports:
@@ -12,10 +12,10 @@ services:
labels: labels:
mmapp.updater.managed: "true" mmapp.updater.managed: "true"
mmapp.updater.target: backend mmapp.updater.target: backend
mmapp.updater.image: git.shts.su/denozord/mikrotikmanager-backend:latest mmapp.updater.image: git.shx.one/denozord/mikrotikmanager-backend:latest
frontend: frontend:
image: git.shts.su/denozord/mikrotikmanager-frontend:latest image: git.shx.one/denozord/mikrotikmanager-frontend:latest
container_name: mmapp-frontend container_name: mmapp-frontend
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
@@ -27,14 +27,14 @@ services:
labels: labels:
mmapp.updater.managed: "true" mmapp.updater.managed: "true"
mmapp.updater.target: frontend mmapp.updater.target: frontend
mmapp.updater.image: git.shts.su/denozord/mikrotikmanager-frontend:latest mmapp.updater.image: git.shx.one/denozord/mikrotikmanager-frontend:latest
updater: updater:
image: git.shts.su/denozord/mikrotikmanager-updater:latest image: git.shx.one/denozord/mikrotikmanager-updater:latest
container_name: mmapp-updater container_name: mmapp-updater
restart: unless-stopped restart: unless-stopped
environment: environment:
REGISTRY: git.shts.su REGISTRY: git.shx.one
REGISTRY_USERNAME: ${REGISTRY_USERNAME:-} REGISTRY_USERNAME: ${REGISTRY_USERNAME:-}
REGISTRY_PASSWORD: ${REGISTRY_PASSWORD:-} REGISTRY_PASSWORD: ${REGISTRY_PASSWORD:-}
POLL_INTERVAL_SECONDS: ${POLL_INTERVAL_SECONDS:-300} POLL_INTERVAL_SECONDS: ${POLL_INTERVAL_SECONDS:-300}
+1 -1
View File
@@ -16,7 +16,7 @@ ENV STATE_FILE=/state/updater-state.json
ENV POLL_INTERVAL_SECONDS=300 ENV POLL_INTERVAL_SECONDS=300
ENV HEALTH_TIMEOUT_SECONDS=120 ENV HEALTH_TIMEOUT_SECONDS=120
ENV STOP_TIMEOUT_SECONDS=30 ENV STOP_TIMEOUT_SECONDS=30
ENV REGISTRY=git.shts.su ENV REGISTRY=git.shx.one
VOLUME ["/state"] VOLUME ["/state"]
+1 -1
View File
@@ -6,7 +6,7 @@ STATE_FILE="${STATE_FILE:-/state/updater-state.json}"
POLL_INTERVAL_SECONDS="${POLL_INTERVAL_SECONDS:-300}" POLL_INTERVAL_SECONDS="${POLL_INTERVAL_SECONDS:-300}"
HEALTH_TIMEOUT_SECONDS="${HEALTH_TIMEOUT_SECONDS:-120}" HEALTH_TIMEOUT_SECONDS="${HEALTH_TIMEOUT_SECONDS:-120}"
STOP_TIMEOUT_SECONDS="${STOP_TIMEOUT_SECONDS:-30}" STOP_TIMEOUT_SECONDS="${STOP_TIMEOUT_SECONDS:-30}"
REGISTRY="${REGISTRY:-git.shts.su}" REGISTRY="${REGISTRY:-git.shx.one}"
MANAGED_LABEL="mmapp.updater.managed" MANAGED_LABEL="mmapp.updater.managed"
TARGET_LABEL="mmapp.updater.target" TARGET_LABEL="mmapp.updater.target"
IMAGE_LABEL="mmapp.updater.image" IMAGE_LABEL="mmapp.updater.image"
+2 -2
View File
@@ -3,7 +3,7 @@
{ {
"id": "backend", "id": "backend",
"container_name": "mmapp-backend", "container_name": "mmapp-backend",
"image": "git.shts.su/denozord/mikrotikmanager-backend:latest", "image": "git.shx.one/denozord/mikrotikmanager-backend:latest",
"health": { "health": {
"type": "http", "type": "http",
"url": "http://backend:8000/health", "url": "http://backend:8000/health",
@@ -13,7 +13,7 @@
{ {
"id": "frontend", "id": "frontend",
"container_name": "mmapp-frontend", "container_name": "mmapp-frontend",
"image": "git.shts.su/denozord/mikrotikmanager-frontend:latest", "image": "git.shx.one/denozord/mikrotikmanager-frontend:latest",
"health": { "health": {
"type": "http", "type": "http",
"url": "http://frontend:3000/dashboard", "url": "http://frontend:3000/dashboard",
+1 -1
View File
@@ -18,7 +18,7 @@ Staging checklist for mmapp-updater:
- Confirm updater rolls back to previous_digest and keeps mmapp-backend running. - Confirm updater rolls back to previous_digest and keeps mmapp-backend running.
4. Registry outage 4. Registry outage
- Block access to git.shts.su temporarily. - Block access to git.shx.one temporarily.
- Confirm updater logs remote_digest_failed and does not stop managed containers. - Confirm updater logs remote_digest_failed and does not stop managed containers.
Run ./validate.sh before executing this checklist on a staging host. Run ./validate.sh before executing this checklist on a staging host.