name: CD on: push: branches: [main] workflow_dispatch: jobs: deploy: runs-on: [ubuntu-latest] environment: production steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Gitea Container Registry uses: docker/login-action@v3 with: registry: git.allucanget.biz username: ${{ secrets.CI_REGISTRY_USER }} password: ${{ secrets.CI_REGISTRY_TOKEN }} - name: Prepare environment run: | cat > .env << 'EOF' DATABASE_URL="${{ secrets.DATABASE_URL }}" REDIS_URL=redis://redis:6379/0 PLAYLIST_PATH=/app/playlist/playlist.txt HLS_SEGMENT_DURATION=6 HLS_WINDOW_SIZE=24 LOG_LEVEL=info ADMIN_USERNAME="${{ secrets.ADMIN_USERNAME }}" ADMIN_PASSWORD="${{ secrets.ADMIN_PASSWORD }}" ADMIN_SESSION_TTL_HOURS=12 NGINX_PORT=80 EOF - name: Seed Prometheus config run: | mkdir -p monitoring/prometheus cat > monitoring/prometheus/prometheus.yml << 'EOF' global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'linearvoid' static_configs: - targets: ['playout:8081', 'chat:3000', 'nginx:80'] EOF - name: Deploy with docker-compose env: DOCKER_HOST: tcp://192.168.88.40:2375 run: | docker compose -f docker-compose.prod.yml pull docker compose -f docker-compose.prod.yml up -d --remove-orphans - name: Health check env: DOCKER_HOST: tcp://192.168.88.40:2375 run: | sleep 10 curl -f http://192.168.88.40:3000/health || exit 1 docker exec linearvoid-playout curl -sf http://localhost curl -f http://192.168.88.40:3000/health || exit 1 docker exec linearvoid-playout curl -sf http://localhost:8081/health || exit 1 - name: Cleanup old images env: DOCKER_HOST: tcp://192.168.88.40:2375 run: | docker image prune -f --filter "until=24h"