No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-23 20:50:04 +00:00
.forgejo/workflows Update .forgejo/workflows/tg-ws-proxy.yaml 2026-09-23 20:50:04 +00:00
README.md feat(tg-ws-proxy): своя сборка образа на готовых экшенах и push в Harbor (#1) 2026-09-23 18:22:57 +00:00

container-images

Свои сборки образов, которых апстрим не публикует (или публикует не так, как нужно нам). Результат — образ в Harbor (harbor.grachevko.ru), тег равен тегу релиза апстрима, поэтому Renovate в grachevko/home-ops видит новые теги и открывает PR на бамп.

tg-ws-proxy

Прокси для Telegram (MTProto → WebSocket). Готовых образов апстрим не публикует: CI собирает только бинарники и .deb/.rpm, поэтому образ собираем официальным Dockerfile апстрима (python:3.12-slim, cryptography+certifi, EXPOSE 1443) — форк Dockerfile не нужен.

  • Воркфлоу: .forgejo/workflows/tg-ws-proxy.yaml
  • Образ: harbor.grachevko.ru/grachevko/tg-ws-proxy:<тег апстрима> (например :v1.10.4)
  • Запуск: по расписанию (раз в сутки), руками из UI (Actions → tg-ws-proxy → Run workflow, вход version можно оставить пустым — возьмётся последний релиз) либо через API: POST /api/v1/repos/grachevko/container-images/actions/workflows/tg-ws-proxy.yaml/dispatches
  • Повторный прогон идемпотентен: если тег в Harbor уже есть, сборка пропускается — апстримный Dockerfile не пересобирается на каждый запуск.

Секреты репозитория (Settings → Actions → Secrets)

Имя Что это
HARBOR_ROBOT_USER robot-аккаунт проекта Harbor, права pull + push
HARBOR_ROBOT_TOKEN токен этого robot-аккаунта

Требования к раннеру

Джоба идёт в DinD-поде (runs-on: docker), поэтому внутреннему CA нужно доверие на двух концах; настройка живёт в home-ops (kubernetes/apps/forgejo/runner, podspec-dind.yaml):

  • docker-демон: internal-ca примонтирован в /etc/docker/certs.d/harbor.grachevko.ru/ca.crt (иначе docker push падает на x509);
  • docker-CLI (docker login, docker manifest inspect): тот же ConfigMap в /etc/ssl/internal-ca, путь передаётся переменной SSL_CERT_FILE в самом воркфлоу.

Как добавить новый образ

  1. Файл .forgejo/workflows/<имя>.yaml: runs-on: docker, шаги — определить тег, docker login, проверить наличие тега (docker manifest inspect), собрать, docker push.
  2. Нужен свой Dockerfile — каталог apps/<имя>/Dockerfile (как в bjw-s-labs/container-images), и в воркфлоу контекст сборки указывать на него.
  3. Приложение в home-ops ссылается на harbor.grachevko.ru/grachevko/<имя>:<тег>, тег обновляет Renovate.

Почему сборка не в зеркале апстрима

Pull-mirror в Forgejo — read-only (наполняется из апстрима), и вызывающий воркфлоу обязан лежать в том репозитории, где произошло событие: reusable workflows умеют подтягивать файл из другого репо (uses: <owner>/<repo>/.forgejo/workflows/x.yml@main, целевой репозиторий должен быть публичным), но сам триггер — нет. Поэтому код берём из апстрима по тегу прямо в джобе; сборка живёт здесь.