| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| README.md | ||
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в самом воркфлоу.
Как добавить новый образ
- Файл
.forgejo/workflows/<имя>.yaml:runs-on: docker, шаги — определить тег,docker login, проверить наличие тега (docker manifest inspect), собрать,docker push. - Нужен свой Dockerfile — каталог
apps/<имя>/Dockerfile(как вbjw-s-labs/container-images), и в воркфлоу контекст сборки указывать на него. - Приложение в home-ops ссылается на
harbor.grachevko.ru/grachevko/<имя>:<тег>, тег обновляет Renovate.
Почему сборка не в зеркале апстрима
Pull-mirror в Forgejo — read-only (наполняется из апстрима), и вызывающий воркфлоу обязан
лежать в том репозитории, где произошло событие: reusable workflows умеют подтягивать файл
из другого репо (uses: <owner>/<repo>/.forgejo/workflows/x.yml@main, целевой репозиторий
должен быть публичным), но сам триггер — нет. Поэтому код берём из апстрима по тегу прямо
в джобе; сборка живёт здесь.