name: Deploy Amap on: push: branches: - main workflow_dispatch: jobs: deploy: runs-on: service-updates steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v6 with: python-version: "3.12" - name: Install dependencies and run tests run: | python -m venv .venv .venv/bin/python -m pip install --upgrade pip .venv/bin/python -m pip install -r backend/requirements.txt .venv/bin/python -m pytest -sv - name: Configure SSH env: DEPLOY_SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_SSH_PRIVATE_KEY }} run: | test -n "$DEPLOY_SSH_PRIVATE_KEY" install -d -m 700 "$HOME/.ssh" printf '%s\n' "$DEPLOY_SSH_PRIVATE_KEY" > "$HOME/.ssh/id_ed25519" chmod 600 "$HOME/.ssh/id_ed25519" - name: Check Amap VM connection run: | ssh \ -o StrictHostKeyChecking=accept-new \ amap@192.168.1.96 \ "echo Connected to Amap VM" - name: Create backup run: | ssh \ -o StrictHostKeyChecking=accept-new \ amap@192.168.1.96 \ "sudo systemctl start create-backup.service" - name: Copy application to Amap VM run: | tar \ --exclude=.git \ --exclude=.venv \ -czf - . | ssh \ -o StrictHostKeyChecking=accept-new \ amap@192.168.1.96 \ "mkdir -p /home/amap/service && tar -xzf - -C /home/amap/service" - name: Build and deploy on Amap VM run: | ssh \ -o StrictHostKeyChecking=accept-new \ amap@192.168.1.96 \ "cd /home/amap/service && sudo docker compose -f docker-compose.yaml up -d --build && sudo docker compose -f docker-compose.yaml exec -T backend alembic upgrade head" - name: Verify deployment run: | curl \ --fail \ --silent \ --show-error \ --location \ --max-time 60 \ https://amap.aldon.fr