feat(tg-ws-proxy): своя сборка образа на готовых экшенах и push в Harbor #1

Merged
grachevko merged 10 commits from feat/tg-ws-proxy-image into main 2026-09-23 18:22:58 +00:00
Collaborator

Что было

Надо поднять tg-ws-proxy в home-ops, а готового образа у апстрима нет: его CI собирает только бинарники и .deb/.rpm, в реестры ничего не пушит. Значит образ наш, а обновлять его должен Renovate — тег в реестре обязан совпадать с тегом релиза апстрима.

Что правит PR

Репо заведено под свои сборки; в нём один воркфлоу на образ, собранный из готовых экшенов:

  • actions/checkout@v7.0.1 — исходники апстрима по тегу (repository/ref/path, persist-credentials: false);
  • docker/login-action@v4.6.0 — вход в Harbor кредами robot-аккаунта;
  • docker/build-push-action@v7.4.0 — сборка и push (context: src, push: true, pull: true, provenance: false).

Экшены закреплены тегами версий, без SHA: Renovate правит такие строки сам, номер версии виден в строке. Своими командами остались три шага, которым экшена нет: определение версии (git ls-remote, без GitHub API), проверка наличия тега (docker manifest inspect) и проверка, что Dockerfile на месте. Тег образа равен тегу релиза апстрима, поэтому прогон идемпотентен, а Renovate в home-ops бампает приложение по этому тегу.

Доверие внутреннему CA разведено по трём потребителям: демону — файл в /etc/docker/certs.d/harbor.grachevko.ru/ca.crt (это даёт home-ops PR #144), экшенам на Node — NODE_EXTRA_CA_CERTS, docker-CLI — SSL_CERT_FILE.

Заодно комментарии в файлах переписаны так, чтобы Forgejo не подсвечивал слова-двойники (проверено скриптом).

Проверено

  • Файлы в ветке побайтово равны подготовленным: blob воркфлоу 6408e0f4bc5b69ae5094c81a48f6a327058c0565 и README cf63d8ef16d40b49b52c10a62e639b81243c3683 (белый список слов-двойников — exit 0 для обеих локалей проверки; YAML разбирается парсером).
  • Теги экшенов существуют: actions/checkout v7.0.1, docker/login-action v4.6.0, docker/build-push-action v7.4.0 (последние релизы этих репо на 23.09.2026).
  • Апстримный Dockerfile и его зависимости вычитаны из репозитория: multi-stage python:3.12-slim, в рантайме venv с cryptography+certifi и tini, EXPOSE 1443, настройка через TG_WS_PROXY_*; тег v1.10.4 (релиз от 19.09.2026) существует.

Не проверено прогоном (покажет первый запуск): наличие плагина buildx в образе job-пода (без него build-push-action падает) и поведение Node-экшенов при нашем внутреннем CA. Если buildx нет — правильный ход не ставить его в шаге, а добавить в образ раннера (bjw-s-labs/container-images).

После мёржа (твои шаги)

  1. Harbor: проект grachevko → Robots → New robot, права pull+push. Если проект назван иначе — скажи, поправлю строку образа (одно место).
  2. Forgejo container-images → Settings → Actions → Secrets: HARBOR_ROBOT_USER и HARBOR_ROBOT_TOKEN.
  3. Смёржить home-ops PR #144 (доверие CA в podspec-dind), затем Actions → tg-ws-proxy → Run workflow (вход version — пусто).
  4. Сказать мне — проверю, что образ v1.10.4 в Harbor появился, и выкачу приложение в ns default.

Откат

Удалить .forgejo/workflows/tg-ws-proxy.yaml и секреты репозитория: до первого прогона PR ничего вне этого репозитория не создаёт.

## Что было Надо поднять `tg-ws-proxy` в home-ops, а готового образа у апстрима нет: его CI собирает только бинарники и `.deb`/`.rpm`, в реестры ничего не пушит. Значит образ наш, а обновлять его должен Renovate — тег в реестре обязан совпадать с тегом релиза апстрима. ## Что правит PR Репо заведено под свои сборки; в нём один воркфлоу на образ, собранный из готовых экшенов: - `actions/checkout@v7.0.1` — исходники апстрима по тегу (`repository`/`ref`/`path`, `persist-credentials: false`); - `docker/login-action@v4.6.0` — вход в Harbor кредами robot-аккаунта; - `docker/build-push-action@v7.4.0` — сборка и push (`context: src`, `push: true`, `pull: true`, `provenance: false`). Экшены закреплены тегами версий, без SHA: Renovate правит такие строки сам, номер версии виден в строке. Своими командами остались три шага, которым экшена нет: определение версии (`git ls-remote`, без GitHub API), проверка наличия тега (`docker manifest inspect`) и проверка, что Dockerfile на месте. Тег образа равен тегу релиза апстрима, поэтому прогон идемпотентен, а Renovate в home-ops бампает приложение по этому тегу. Доверие внутреннему CA разведено по трём потребителям: демону — файл в `/etc/docker/certs.d/harbor.grachevko.ru/ca.crt` (это даёт home-ops PR #144), экшенам на Node — `NODE_EXTRA_CA_CERTS`, docker-CLI — `SSL_CERT_FILE`. Заодно комментарии в файлах переписаны так, чтобы Forgejo не подсвечивал слова-двойники (проверено скриптом). ## Проверено - Файлы в ветке побайтово равны подготовленным: blob воркфлоу `6408e0f4bc5b69ae5094c81a48f6a327058c0565` и README `cf63d8ef16d40b49b52c10a62e639b81243c3683` (белый список слов-двойников — exit 0 для обеих локалей проверки; YAML разбирается парсером). - Теги экшенов существуют: `actions/checkout` v7.0.1, `docker/login-action` v4.6.0, `docker/build-push-action` v7.4.0 (последние релизы этих репо на 23.09.2026). - Апстримный Dockerfile и его зависимости вычитаны из репозитория: multi-stage `python:3.12-slim`, в рантайме venv с `cryptography`+`certifi` и `tini`, `EXPOSE 1443`, настройка через `TG_WS_PROXY_*`; тег `v1.10.4` (релиз от 19.09.2026) существует. Не проверено прогоном (покажет первый запуск): наличие плагина `buildx` в образе job-пода (без него `build-push-action` падает) и поведение Node-экшенов при нашем внутреннем CA. Если `buildx` нет — правильный ход не ставить его в шаге, а добавить в образ раннера (`bjw-s-labs/container-images`). ## После мёржа (твои шаги) 1. Harbor: проект `grachevko` → Robots → New robot, права `pull`+`push`. Если проект назван иначе — скажи, поправлю строку образа (одно место). 2. Forgejo `container-images` → Settings → Actions → Secrets: `HARBOR_ROBOT_USER` и `HARBOR_ROBOT_TOKEN`. 3. Смёржить home-ops PR #144 (доверие CA в `podspec-dind`), затем Actions → tg-ws-proxy → Run workflow (вход `version` — пусто). 4. Сказать мне — проверю, что образ `v1.10.4` в Harbor появился, и выкачу приложение в ns `default`. ## Откат Удалить `.forgejo/workflows/tg-ws-proxy.yaml` и секреты репозитория: до первого прогона PR ничего вне этого репозитория не создаёт.
hermes changed title from feat(tg-ws-proxy): своя сборка образа и push в Harbor to feat(tg-ws-proxy): своя сборка образа на готовых экшенах и push в Harbor 2026-09-23 17:52:19 +00:00
grachevko deleted branch feat/tg-ws-proxy-image 2026-09-23 18:22:58 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
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
grachevko/container-images!1
No description provided.