name: Build and Deploy on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build image run: | docker build -t portfolio:latest . docker save portfolio:latest | gzip > portfolio.tar.gz - name: Deploy to server uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} source: "portfolio.tar.gz" target: "/mnt/apps/docker-config/portfolio/" - name: Restart container uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} script: | cd /mnt/apps/docker-config/portfolio sudo sh -c "gunzip -c portfolio.tar.gz | docker load" sudo docker compose down sudo docker compose up -d - name: Purge Cloudflare cache run: | curl -X POST "https://api.cloudflare.com/client/v4/zones/${{ secrets.CLOUDFLARE_ZONE_ID }}/purge_cache" \ -H "Authorization: Bearer ${{ secrets.CLOUDFLARE_API_TOKEN }}" \ -H "Content-Type: application/json" \ --data '{"purge_everything":true}'