name: Deploy to VPS

on:
  # auto deploy when pushing to specified branches.
  push:
    branches:
      - main

  # allow triggering workflow manually.
  workflow_dispatch:

jobs:
  publish:
    runs-on: ubuntu-latest
    if: github.repository_owner == 'ditatompel'
    environment: production
    permissions:
      contents: read
      deployments: write
    name: Build and copy to VPS

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: "20"

      - name: Cache dependencies
        uses: actions/cache@v4
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-

      - name: Install dependencies
        run: npm ci

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: "0.122.0"
          extended: true

      - name: Cache Hugo modules
        uses: actions/cache@v4
        with:
          path: /tmp/hugo_cache
          key: ${{ runner.os }}-hugomod-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-hugomod-

      - name: Build
        run: hugo --minify --gc --enableGitInfo --cleanDestinationDir
        # Use following instead if defaultContentLanguageInSubdir is enabled.
        # run: hugo --minify --gc --enableGitInfo --cleanDestinationDir && cp public/en/404.html public/404.html

      - name: Deploy website with rsync
        uses: burnett01/rsync-deployments@5.2
        with:
          switches: -avzr --quiet --delete
          path: public/
          remote_path: ${{ secrets.DEPLOY_PATH }}
          remote_host: ${{ secrets.DEPLOY_HOST }}
          remote_user: ${{ secrets.DEPLOY_USER }}
          remote_key: ${{ secrets.DEPLOY_KEY }}
