name: Build and Deploy on: push: branches: - main - master jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build Docker image run: | docker build -t timetracker:latest . docker tag timetracker:latest timetracker:${{ github.sha }} - name: Save image run: docker save timetracker:latest | gzip > timetracker.tar.gz - name: Deploy to server uses: appleboy/scp-action@master with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} source: "timetracker.tar.gz,docker-compose.yml" target: "/opt/timetracker" - name: Load and restart containers uses: appleboy/ssh-action@master with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} script: | cd /opt/timetracker docker load < timetracker.tar.gz docker-compose down docker-compose up -d docker system prune -f rm timetracker.tar.gz