name: 'Build'
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  workflow_dispatch:

permissions:
  contents: write

jobs:
  filter:
    runs-on: ubuntu-latest
    name: Filter
    outputs:
      any_changed: ${{ steps.changed-files-specific.outputs.any_changed }}
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Get changed files in scope
        id: changed-files-specific
        uses: tj-actions/changed-files@v41
        with:
          files: |
            package.json
            assets/**

  build:
    timeout-minutes: 30
    runs-on: ubuntu-latest
    name: Build
    needs: [filter]
    if: |
      github.ref == 'refs/heads/main' &&
      github.event.repository.fork == false
    steps:
      - name: Set current date as env variable
        run: |
          echo "builddate=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
        id: version

      - name: Checkout
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.PAT }}

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2.6.0
        with:
          hugo-version: '0.114.0'
          extended: true

      - name: Setup pnpm
        uses: pnpm/action-setup@v3
        with:
          version: 8

      - name: Get pnpm store directory
        id: pnpm-cache
        run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT

      - name: Setup pnpm cache
        uses: actions/cache@v4
        with:
          path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: ${{ runner.os }}-pnpm-store-

      - name: Setup hugo cache
        uses: actions/cache@v4
        with:
          path: ./exampleSite/resources
          key: ${{ runner.os }}-hugo-${{ hashFiles('./exampleSite/resources') }}
          restore-keys: ${{ runner.os }}-hugo-

      - name: Install dependencies
        run: pnpm install

      - name: Build
        run: pnpm run build

      - name: Push artifacts
        if: ${{ (github.event_name == 'push' || github.event.pull_request.merged == true) && needs.filter.outputs.any_changed == 'true' }}
        uses: stefanzweifel/git-auto-commit-action@v5
        with:
          commit_message: 'ci: update bundled artifacts [skip ci]'
