Deploy Docs to VPS #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy Docs to VPS | |
| # Workflow para deploy automatizado da documentação na VPS | |
| on: | |
| workflow_dispatch: # Disparado manualmente | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - 'docs/**' | |
| - 'deployment/**' | |
| - '.github/workflows/deploy-docs-vps.yml' | |
| workflow_run: | |
| workflows: ["Publish to Maven Central"] | |
| types: | |
| - completed | |
| branches: [main] | |
| jobs: | |
| deploy: | |
| runs-on: self-hosted | |
| # Só roda se não for uma tag (para não duplicar em releases) | |
| if: | | |
| contains(github.event.head_commit.message, '[skip deploy]') == false || | |
| github.event_name == 'workflow_dispatch' || | |
| github.event_name == 'workflow_run' | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| - name: Install pnpm | |
| uses: pnpm/action-setup@v2 | |
| with: | |
| version: 9 | |
| - name: Checkout documentation | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: edsonmartins/archbase-app-documentation | |
| path: docs-site | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Install dependencies | |
| working-directory: ./docs-site | |
| run: pnpm install --frozen-lockfile | |
| - name: Build docs | |
| working-directory: ./docs-site | |
| run: | | |
| export NODE_OPTIONS=--max_old_space_size=8192 | |
| pnpm run build | |
| - name: Prepare Docker build context | |
| run: | | |
| # Criar diretório temporário para o build | |
| mkdir -p docker-build-context | |
| # Copiar arquivos buildados | |
| cp -r docs-site/build/* docker-build-context/ | |
| # Copiar nginx.conf | |
| cp deployment/docs/nginx.conf docker-build-context/ | |
| - name: Build Docker image | |
| run: | | |
| # Build da imagem com timestamp para forçar atualização | |
| TIMESTAMP=$(date +%s) | |
| docker build \ | |
| --build-arg BUILD_DATE=$TIMESTAMP \ | |
| -t archbase-java-docs:latest \ | |
| -t archbase-java-docs:$TIMESTAMP \ | |
| -f deployment/docs/Dockerfile \ | |
| docker-build-context | |
| - name: Deploy to Docker Swarm | |
| run: | | |
| # Copiar docker-compose para local persistente | |
| sudo mkdir -p /opt/archbase-infrastructure | |
| sudo cp deployment/docker-compose.vps.yml /opt/archbase-infrastructure/docker-compose.yml | |
| # Recrear stack com nova versão (Docker Swarm) | |
| cd /opt/archbase-infrastructure | |
| docker stack deploy -c docker-compose.yml archbase-java | |
| # Forçar atualização do serviço | |
| docker service update archbase-java_java-docs --force | |
| - name: Cleanup old Docker images | |
| run: | | |
| # Remover imagens antigas da documentação (manter apenas latest + 2 anteriores) | |
| docker images archbase-java-docs --format "{{.ID}} {{.Tag}}" | \ | |
| grep -v "latest" | \ | |
| tail -n +3 | \ | |
| awk '{print $1}' | \ | |
| xargs -r docker rmi -f 2>/dev/null || true | |
| - name: Docker system prune | |
| run: | | |
| # Remover imagens não usadas e cache de build para liberar espaço | |
| docker image prune -a -f --filter "until=72h" | |
| docker system prune -f | |
| # Exibir uso de disco após limpeza | |
| df -h /var/lib/docker |