Skip to content

Deploy Docs to VPS

Deploy Docs to VPS #2

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