name: Deploy
on:
  workflow_dispatch:
  push:
    branches:
      - main
    paths-ignore:
      - '.github/**'
      - '.vscode/**'
      - '.gitignore'
      - '.editorconfig'
      - 'LICENSE.md'
      - 'docker-compose.dev.yml'
      - 'docker-compose.prod.yml'
      - '**/*/README.md'
      - '**/*/Dockerfile'
      - 'scripts/**'
jobs:
  build:
    name: Build and push Docker image
    runs-on: ubuntu-latest
    outputs:
      version: ${{ steps.version.outputs.version }}
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Create version tag
        id: version
        run: echo "version=$(date +%Y.%m.%d.%H%M%S)" >> $GITHUB_OUTPUT
      - name: Build and push server image
        working-directory: src/Blog
        run: |
          TAG=${{ secrets.DOCKERHUB_USERNAME }}/blog.stevanfreeborn.com:${{ steps.version.outputs.version }}
          docker build -t $TAG .
          docker push $TAG
  deploy:
    name: Deploy to server
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Copy files to server
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_KEY }}
          source: "scripts/deploy.ps1"
          target: blog.stevanfreeborn.com
          strip_components: 1
          rm: true
      - name: Run deploy script
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            chmod +x blog.stevanfreeborn.com/deploy.ps1
            sudo pwsh ./blog.stevanfreeborn.com/deploy.ps1 ${{ needs.build.outputs.version }}