name: Deploy Dev on: push: branches: - dev workflow_dispatch: jobs: deploy: name: Deploy para VM Dev runs-on: omnichannel-uat env: DEPLOY_PATH: /opt/omnichannel steps: - name: Checkout uses: actions/checkout@v4 - name: Preflight shell: bash run: | set -euo pipefail echo "Runner: $(hostname)" docker --version docker compose version psql --version - name: Verificar secrets obrigatórios shell: bash env: DB_PASSWORD: ${{ secrets.DB_PASSWORD }} run: | set -euo pipefail if [ -z "${DB_PASSWORD:-}" ]; then echo "Secret DB_PASSWORD não configurado." exit 1 fi - name: Sync arquivos para o servidor shell: bash run: | set -euo pipefail rsync -az --delete \ --exclude='.git/' \ --exclude='.gitea/' \ --exclude='frontend/' \ --exclude='backend/' \ --exclude='uploads/' \ ./ "$DEPLOY_PATH"/ - name: Executar migrations shell: bash env: PGHOST: ${{ secrets.DB_HOST }} PGPORT: ${{ secrets.DB_PORT }} PGUSER: ${{ secrets.DB_USER }} PGDATABASE: ${{ secrets.DB_NAME }} PGPASSWORD: ${{ secrets.DB_PASSWORD }} run: | set -euo pipefail PGHOST="${PGHOST//[$'\t\r\n ']}" PGPORT="${PGPORT//[$'\t\r\n ']}" export PGHOST PGPORT echo "Inicializando controle de migrations..." psql -v ON_ERROR_STOP=1 -f "$DEPLOY_PATH/database/migrations/000_schema_migrations.sql" echo "Aplicando migrations pendentes..." for f in $(ls "$DEPLOY_PATH/database/migrations/"[0-9][0-9][0-9]_*.sql | sort); do filename=$(basename "$f") already_run=$(psql -tAc "SELECT COUNT(*) FROM schema_migrations WHERE filename = '$filename'") if [ "$already_run" = "0" ]; then echo "Aplicando: $filename" psql -v ON_ERROR_STOP=1 -f "$f" psql -c "INSERT INTO schema_migrations (filename) VALUES ('$filename') ON CONFLICT DO NOTHING" echo "OK: $filename" else echo "Ignorando (ja aplicada): $filename" fi done - name: Executar seeds (dev) shell: bash env: PGHOST: ${{ secrets.DB_HOST }} PGPORT: ${{ secrets.DB_PORT }} PGUSER: ${{ secrets.DB_USER }} PGDATABASE: ${{ secrets.DB_NAME }} PGPASSWORD: ${{ secrets.DB_PASSWORD }} run: | set -euo pipefail PGHOST="${PGHOST//[$'\t\r\n ']}" PGPORT="${PGPORT//[$'\t\r\n ']}" export PGHOST PGPORT echo "Aplicando seeds de desenvolvimento..." for f in $(ls "$DEPLOY_PATH/database/seeds/"*.sql | sort); do echo "Seed: $(basename "$f")" psql -v ON_ERROR_STOP=1 -f "$f" done