Files
scoreodonto.com/.gitea/workflows/build.yml
T
VPS 4 Builder 914ebc9dbf
build-and-push / build (push) Successful in 1m44s
ci: pipeline de build no Gitea Actions (Etapa 5)
.gitea/workflows/build.yml — em push na main + tags v*, builda backend+frontend
com carimbo de versão e publica no registry (sem deploy). Login tolerante
(secret REGISTRY_TOKEN se existir; senão credencial do host). Retry p/ 499.
Runner self-hosted 'vps4-builder' (modo host) registrado na VPS4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 08:30:05 +02:00

67 lines
2.6 KiB
YAML

name: build-and-push
# Etapa 5: a cada push na main (ou tag vX.Y.Z), builda as imagens com o carimbo
# de versão e envia ao Container Registry do Gitea. NÃO faz deploy (Etapa 6 separada).
on:
push:
branches: [main]
tags: ['v*']
jobs:
build:
# Roda direto no host VPS4 (runner registrado com label de host + acesso ao Docker).
runs-on: self-hosted
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Calcular versão/commit/data
id: vars
run: |
echo "version=$(grep -oE 'V[0-9]+\.[0-9]+\.[0-9]+' frontend/constants.ts | head -1 | tr 'V' 'v')" >> "$GITHUB_OUTPUT"
echo "commit=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
echo "build_time=$(date -u +'%Y-%m-%d %H:%M UTC')" >> "$GITHUB_OUTPUT"
- name: Login no registry
run: |
if [ -n "${{ secrets.REGISTRY_TOKEN }}" ]; then
echo "${{ secrets.REGISTRY_TOKEN }}" | docker login git.clube67.com -u ruicesar --password-stdin
else
echo "REGISTRY_TOKEN não definido — usando a credencial já presente no host (~/.docker/config.json)."
fi
- name: Build (compose, com carimbo de versão)
env:
APP_VERSION: ${{ steps.vars.outputs.version }}
GIT_COMMIT: ${{ steps.vars.outputs.commit }}
BUILD_TIME: ${{ steps.vars.outputs.build_time }}
APP_ENV: PROD
run: docker compose build scoreodonto-backend scoreodonto-frontend
- name: Tag + push (com retry p/ 499 transitório)
run: |
set -e
V="${{ steps.vars.outputs.version }}"
C="${{ steps.vars.outputs.commit }}"
for app in backend frontend; do
SRC="scoreodontocom-scoreodonto-${app}:latest"
DST="git.clube67.com/ruicesar/scoreodonto-${app}"
docker tag "$SRC" "$DST:$V"
docker tag "$SRC" "$DST:$C"
docker tag "$SRC" "$DST:latest"
for tag in "$V" "$C" "latest"; do
n=0
until docker push "$DST:$tag"; do
n=$((n+1)); [ $n -ge 4 ] && { echo "push falhou após 4 tentativas: $DST:$tag"; exit 1; }
echo "retry $n (499 transitório) em $DST:$tag"; sleep 3
done
done
done
- name: Resumo
run: |
echo "Imagens publicadas:"
echo " git.clube67.com/ruicesar/scoreodonto-backend:${{ steps.vars.outputs.version }}"
echo " git.clube67.com/ruicesar/scoreodonto-frontend:${{ steps.vars.outputs.version }}"
echo "Deploy NÃO foi executado (Etapa 6 trata disso)."