From 9e385b664d09547f25379a4dfa10a2649d465efe Mon Sep 17 00:00:00 2001 From: esdrasrenan Date: Tue, 16 Dec 2025 23:03:53 -0300 Subject: [PATCH] fix(ci): corrige backup/restore do .env usando Docker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O problema anterior: apos limpar o conteudo do diretorio, o proprio diretorio ainda tinha permissoes de root, fazendo o cp do .env falhar. Nova abordagem: - Salvar .env usando Docker (monta origem e /tmp) - Remover o diretorio COMPLETAMENTE usando Docker (monta diretorio pai) - Recriar o diretorio com mkdir -p (permissoes do usuario runner) - Restaurar o .env (agora o diretorio tem permissoes corretas) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .forgejo/workflows/ci-cd-web-desktop.yml | 26 +++++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/.forgejo/workflows/ci-cd-web-desktop.yml b/.forgejo/workflows/ci-cd-web-desktop.yml index 5c74103..7985275 100644 --- a/.forgejo/workflows/ci-cd-web-desktop.yml +++ b/.forgejo/workflows/ci-cd-web-desktop.yml @@ -193,6 +193,7 @@ jobs: run: | set -e DEST="$HOME/apps/sistema" + PARENT_DIR="$HOME/apps" # SOLUCAO DEFINITIVA: Limpar completamente o destino usando Docker (root) # Isso evita erros de permissao de arquivos criados por Docker em deploys anteriores @@ -200,21 +201,26 @@ jobs: echo "Limpando diretorio destino: $DEST" # Preservar apenas o .env (configuracoes de producao) if [ -f "$DEST/.env" ]; then - cp "$DEST/.env" /tmp/.env.backup + docker run --rm -v "$DEST":/src -v /tmp:/backup alpine:3 \ + cp /src/.env /backup/.env.backup + echo ".env salvo em /tmp/.env.backup" fi - # Remover tudo usando Docker Alpine como root - docker run --rm -v "$DEST":/target alpine:3 \ - sh -c 'rm -rf /target/* /target/.[!.]* /target/..?* 2>/dev/null || true' - # Restaurar .env - if [ -f /tmp/.env.backup ]; then - cp /tmp/.env.backup "$DEST/.env" - rm /tmp/.env.backup - fi - echo "Diretorio limpo" + # Remover o diretorio COMPLETAMENTE usando Docker Alpine como root + docker run --rm -v "$PARENT_DIR":/parent alpine:3 \ + rm -rf /parent/sistema + echo "Diretorio removido" fi + # Recriar o diretorio (sera criado com permissoes do usuario runner) mkdir -p "$DEST" + # Restaurar .env antes do rsync + if [ -f /tmp/.env.backup ]; then + cp /tmp/.env.backup "$DEST/.env" + rm /tmp/.env.backup + echo ".env restaurado" + fi + # Copiar build completo (sem conflitos de permissao agora) rsync -a --no-owner --no-group \ --exclude '.pnpm-store' --exclude '.pnpm-store/**' \