e6c81bf8fd
Копии .github/workflows/{ci,build,deploy}.yml — Gitea Actions синтаксически
совместим с GitHub Actions, поэтому большая часть 1:1. Отличие: логин на
ghcr.io в build.yml теперь через secrets.GHCR_TOKEN (настоящий GitHub PAT),
не secrets.GITHUB_TOKEN — автотокен Gitea валиден только для самого Gitea,
на ghcr.io им не залогиниться. deploy.yml уже использовал GHCR_TOKEN,
не тронут в этой части.
Нужно завести в Gitea: секрет GHCR_TOKEN (write:packages), плюс все
остальные секреты, что уже есть в GitHub Actions (отдельное хранилище,
не шарится автоматически). Триггер workflow_run в deploy.yml поддержан не
во всех версиях Gitea Actions — см. комментарий в файле.
99 lines
3.9 KiB
YAML
99 lines
3.9 KiB
YAML
# Копия .github/workflows/build.yml для Gitea Actions. Отличие от оригинала:
|
||
# логин на ghcr.io использует secrets.GHCR_TOKEN (настоящий GitHub PAT с
|
||
# правами write:packages), а не secrets.GITHUB_TOKEN — автотокен Gitea валиден
|
||
# только для самого Gitea (API/пакеты этого инстанса), на ghcr.io им не
|
||
# залогиниться. Секрет GHCR_TOKEN нужно завести отдельно в настройках этого
|
||
# репозитория/организации в Gitea.
|
||
name: Build & Push Image
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
tags: ["v*"]
|
||
workflow_dispatch:
|
||
|
||
env:
|
||
REGISTRY: ghcr.io
|
||
IMAGE_NAME: ${{ github.repository_owner }}/netrunner-control-plane
|
||
|
||
jobs:
|
||
build:
|
||
name: Build and push to GHCR
|
||
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 GHCR
|
||
uses: docker/login-action@v3
|
||
with:
|
||
registry: ${{ env.REGISTRY }}
|
||
username: ${{ github.actor }}
|
||
password: ${{ secrets.GHCR_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 }}
|
||
# Кеш слоёв между прогонами — повторные сборки в разы быстрее.
|
||
cache-from: type=gha
|
||
cache-to: type=gha,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 GHCR
|
||
uses: docker/login-action@v3
|
||
with:
|
||
registry: ${{ env.REGISTRY }}
|
||
username: ${{ github.actor }}
|
||
password: ${{ secrets.GHCR_TOKEN }}
|
||
|
||
- name: Build and push
|
||
uses: docker/build-push-action@v6
|
||
with:
|
||
context: .
|
||
file: ./Dockerfile.caddy
|
||
push: true
|
||
# Захардкожено, не ${{ github.repository_owner }}: он резолвится в
|
||
# "nineAp" (смешанный регистр), Docker такие теги отклоняет — та же
|
||
# причина, по которой deploy.yml тоже хардкодит "nineap" для
|
||
# основного образа вместо репозиторного контекста.
|
||
tags: ${{ env.REGISTRY }}/nineap/netrunner-caddy-cloudflare:latest
|
||
cache-from: type=gha,scope=caddy
|
||
cache-to: type=gha,mode=max,scope=caddy
|