Files
netrunner-backend/.gitea/workflows/build.yml
T
nineap a84d5dc820
Build & Push Image / Build and push Caddy (Cloudflare DNS) image (push) Failing after 7m15s
Build & Push Image / Build and push to Gitea Registry (push) Successful in 18m55s
CI / fmt + clippy + test (push) Failing after 25m51s
Fix: кеш сборки type=gha не работает на self-hosted Gitea Actions
act_runner не реализует GitHub Actions Cache proxy — экспорт кеша висит
и падает по DeadlineExceeded (dial tcp .../i/o timeout). Меняю на
type=registry (тот же приём, что уже в netrunner-landing) — кеш кладётся
отдельным тегом ":cache" в тот же Gitea Registry, никакого спецсервиса
не требует.
2026-07-10 21:54:28 +07:00

105 lines
4.8 KiB
YAML

# Копия .github/workflows/build.yml для Gitea Actions. Отличие от оригинала:
# реестр — встроенный Container Registry самой Gitea (gitea.netrunner-vpn.com),
# не ghcr.io — секрет secrets.GITHUB_TOKEN там валиден только на самом
# GitHub. Логин — токеном Gitea с правом write:package
# (secrets.GT_REGISTRY_TOKEN), один и тот же токен используется во всех
# репозиториях, где собираются образы (netrunner-backend/netrunner-landing/
# netrunner-proxy) — пакеты в Gitea принадлежат аккаунту, не конкретному
# репозиторию, заводить по секрету на каждый репозиторий не нужно, но
# значение нужно продублировать в Settings каждого из них (Gitea не даёт
# организационных секретов на уровне всего аккаунта для personal-репозиториев).
name: Build & Push Image
on:
push:
branches: [main]
tags: ["v*"]
workflow_dispatch:
env:
REGISTRY: gitea.netrunner-vpn.com
IMAGE_NAME: nineap/netrunner-control-plane
jobs:
build:
name: Build and push to Gitea Registry
runs-on: ubuntu-24.04
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Gitea Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GT_REGISTRY_TOKEN }}
- name: Extract metadata (tags, labels)
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=sha,format=long
type=ref,event=tag
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
# Кеш слоёв между прогонами — type=gha (GitHub Actions Cache) не
# работает на self-hosted Gitea Actions раннере (act_runner не
# реализует этот прокси-сервис, сборка виснет и падает по таймауту
# на попытке экспортировать кеш) — вместо этого кеш кладём в тот же
# registry отдельным тегом, тот же приём, что уже в netrunner-landing.
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache,mode=max
# Кастомная сборка Caddy (модуль caddy-dns/cloudflare, нужен для TLS на
# dev-стенде — см. Caddyfile.dev). Компилировать xcaddy'ем прямо на VPS
# оказалось слишком долго и один раз реально уронило SSH-деплой по таймауту
# (компиляция go-модулей на слабой машине не укладывалась в command_timeout
# appleboy/ssh-action) — та же причина, по которой Rust вообще не собирается
# на VPS. Собираем здесь и просто тянем готовый образ, как и основной.
build-caddy:
name: Build and push Caddy (Cloudflare DNS) image
runs-on: ubuntu-24.04
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Gitea Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GT_REGISTRY_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile.caddy
push: true
# Захардкожено, не ${{ github.repository_owner }}: он резолвится в
# "nineAp" (смешанный регистр), Docker такие теги отклоняет.
tags: ${{ env.REGISTRY }}/nineap/netrunner-caddy-cloudflare:latest
cache-from: type=registry,ref=${{ env.REGISTRY }}/nineap/netrunner-caddy-cloudflare:cache
cache-to: type=registry,ref=${{ env.REGISTRY }}/nineap/netrunner-caddy-cloudflare:cache,mode=max