name: Build documentation

on:
  push:
    branches:
      - refactor-structure
  pull_request:
  workflow_call:
    inputs:
      ref:
        description: 'commit to build'
        type: string
        required: false
      path:
        description: 'path within the docs pages to build to'
        type: string
        required: false
      artifact:
        description: 'artifact name to write'
        type: string
        required: false
      latest:
        description: 'build the latest release'
        type: boolean
        required: false

jobs:
  build-docs:
    name: Build documentation
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: 18
      
      - uses: actions/checkout@v4
        with:
          ref: ${{ inputs.ref || github.ref }} 
      - uses: actions/checkout@v4
        with:
          repository: bdunderscore/modular-avatar-images
          path: modular-avatar-images
      - name: Install logo assets
        run: |
          cp -Rv modular-avatar-images/img/* docs~/static/img
          
      - name: Setup yarn 2.0
        run: |
          corepack enable
          corepack prepare yarn@stable --activate

      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "dir=$(cd docs~; yarn config get cacheFolder)" >> $GITHUB_OUTPUT
    
      - uses: actions/cache@v3
        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-docs-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-docs-

      - name: Set baseUri
        if: ${{ inputs.path }}
        run: |
          BASEURL="/${{ inputs.path }}/" perl -i -p -e "s{baseUrl: '/'}{baseUrl: '\$ENV{BASEURL}'}" docs~/docusaurus.config.js
          cat docs~/docusaurus.config.js

      - name: Build docs
        run: |
          cd docs~
          yarn install --immutable
          yarn build
          ls -lR build

      - name: Set robots.txt
        run: |
          if [ -e docs~/robots.txt ]; then
            cp docs~/robots.txt docs~/build/robots.txt
          fi
          
      - name: Package documentation
        run: |
          tar -cf docs.tar -C docs~/build .

      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: ${{ inputs.artifact || 'docs' }}
          path: docs.tar