From 18c22e85c42a24a849397f964ea79e3a0a535b13 Mon Sep 17 00:00:00 2001 From: Dalton Alvarenga Date: Thu, 7 May 2026 12:02:36 -0300 Subject: [PATCH] fix(ci): --gcs-source-staging-dir + --suppress-logs no builds submit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Quota_project sozinho não resolve. Reproduzi local com a SA gitea-cd e peguei a HTTP 403 raw da Storage API: dois calls bloqueados em sequência: 1. GET /storage/v1/b/_cloudbuild → resolvido com grant de roles/storage.admin no bucket (storage.buckets.get vinha do projectEditor legacy ACL, que gitea-cd não é). 2. GET /storage/v1/b?prefix=_cloudbuild&project=corepetro → 403 em storage.buckets.list. Esse permission é project-scoped (não dá pra grantar bucket-scoped). Em vez de inflar a SA com storage.admin no projeto, --gcs-source-staging-dir explícito faz gcloud pular o auto-detect inteiro e usar o bucket especificado. E --suppress-logs evita o stream que exige Viewer/Owner no projeto pra ler Cloud Logging — gitea-cd não tem; o build ainda é aguardado e o exit code propaga correto. Validado: build de teste alpine deu SUCCESS na primeira tentativa com esses dois flags. --- .gitea/workflows/cd.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/cd.yml b/.gitea/workflows/cd.yml index 43730bb..79b4ef8 100644 --- a/.gitea/workflows/cd.yml +++ b/.gitea/workflows/cd.yml @@ -37,18 +37,20 @@ jobs: project_id: ${{ secrets.GCP_PROJECT }} - name: Build & push (Cloud Build, sem Docker local) - env: - # SA key auth não popula quota_project no credentials file → gcloud - # cai em "default" e a chamada à Service Usage API falha com - # "serviceusage.services.use forbidden" mesmo com a role concedida. - CLOUDSDK_BILLING_QUOTA_PROJECT: ${{ secrets.GCP_PROJECT }} run: | IMG="${IMAGE_BASE}/${{ gitea.event.repository.name }}:lab-${{ gitea.run_number }}" - gcloud config set billing/quota_project "${{ secrets.GCP_PROJECT }}" + # --gcs-source-staging-dir: pula auto-detect que precisa de + # storage.buckets.list (project-scope) — gitea-cd só tem grant + # na bucket _cloudbuild, não no projeto inteiro. + # --suppress-logs: gcloud streama logs do Cloud Build pra stdout e + # isso exige Viewer/Owner no projeto. SA não tem; suprimir os + # logs ainda espera o build terminar e propaga o exit code. gcloud builds submit \ --tag "$IMG" \ --project=${{ secrets.GCP_PROJECT }} \ - --timeout=30m + --timeout=30m \ + --gcs-source-staging-dir="gs://${{ secrets.GCP_PROJECT }}_cloudbuild/source" \ + --suppress-logs echo "IMG=$IMG" >> $GITHUB_ENV - name: Deploy hml2 (apenas em push pra master/main)