name: CD on: push: branches: [main] concurrency: group: cd-${{ github.ref_name }} cancel-in-progress: true jobs: build-and-push: name: Build and push Docker image runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 - name: Log in to Docker Hub uses: docker/login-action@v4 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Restore Docker build cache uses: actions/cache@v4 with: path: /tmp/.buildx-cache key: ${{ runner.os }}-buildx-${{ github.sha }} restore-keys: | ${{ runner.os }}-buildx- - name: Build and push image uses: docker/build-push-action@v7 with: context: . push: true tags: | ${{ secrets.DOCKER_USERNAME }}/botmafieux:latest ${{ secrets.DOCKER_USERNAME }}/botmafieux:${{ github.sha }} cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache,mode=max deploy: name: Deploy to VPS needs: build-and-push runs-on: ubuntu-latest steps: - name: Copy compose file to VPS uses: appleboy/scp-action@v1 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_SSH_KEY }} port: ${{ secrets.VPS_SSH_PORT }} source: "compose.yaml" target: "/opt/docker/botmafieux" - name: Deploy on VPS uses: appleboy/ssh-action@v1 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_SSH_KEY }} port: ${{ secrets.VPS_SSH_PORT }} script: | set -euo pipefail cd /opt/docker/botmafieux docker compose -f compose.yaml --env-file .env pull docker compose -f compose.yaml --env-file .env up -d --remove-orphans