name: Deploy # Один пайплайн, две джобы: # - deploy-dev: авто, срабатывает после успешного "Build & Push Image" на main. # - deploy-prod: вручную из вкладки Actions ("Run workflow"), как и раньше. on: workflow_run: workflows: ["Build & Push Image"] types: [completed] branches: [main] workflow_dispatch: inputs: image_tag: description: "Тег образа в GHCR для прод-деплоя" required: true default: "latest" jobs: deploy-dev: name: Auto-deploy to Dev VPS if: github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.workflow_run.head_sha }} # Копируем только compose-файл — сам образ дев-сервер тянет из GHCR, # полный клон репозитория на нём не нужен. - name: Sync compose file to Dev VPS uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.DEV_VPS_IP }} username: root key: ${{ secrets.DEV_SSH_PRIVATE_KEY }} source: "docker-compose.dev-remote.yml" target: "/root/netrunner-core" strip_components: 0 - name: Remote deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${{ secrets.DEV_VPS_IP }} username: root key: ${{ secrets.DEV_SSH_PRIVATE_KEY }} script: | set -e cd /root/netrunner-core export IMAGE="ghcr.io/nineap/netrunner-control-plane:latest" echo "🚀 Deploying ${IMAGE} to DEV" echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u ${{ github.repository_owner }} --password-stdin docker compose -f docker-compose.dev-remote.yml pull docker compose -f docker-compose.dev-remote.yml up -d --remove-orphans docker image prune -f echo "✅ Dev synchronized." deploy-prod: name: Pull & restart on Prod VPS if: github.event_name == 'workflow_dispatch' runs-on: ubuntu-24.04 steps: - name: Remote deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${{ secrets.VPS_IP }} username: root key: ${{ secrets.SSH_PRIVATE_KEY }} script: | set -e cd /root/netrunner-core export IMAGE="ghcr.io/nineap/netrunner-control-plane:${{ github.event.inputs.image_tag }}" echo "🚀 Deploying ${IMAGE}" echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u ${{ github.repository_owner }} --password-stdin # Тянем свежий образ, прогоняем миграции (one-shot) и поднимаем сервисы. docker compose -f docker-compose.prod.yml pull docker compose -f docker-compose.prod.yml up -d --remove-orphans # Чистим старые слои. docker image prune -f echo "✅ Uplink synchronized."