# When publish a release. This workflow will trigger and deploy to site.

name: Deploy website
on:
  create

permissions:
  contents: write

jobs:
  setup:
    runs-on: ubuntu-latest
    if: github.event.ref_type == 'tag' && (contains(github.event.ref, '-') == false)
    steps:
      - name: checkout
        uses: actions/checkout@v3

      - name: cache package-lock.json
        uses: actions/cache@v3
        with:
          path: package-temp-dir
          key: lock-${{ github.sha }}

      - name: create package-lock.json
        run: npm i --package-lock-only --ignore-scripts

      - name: hack for single file
        run: |
          if [ ! -d "package-temp-dir" ]; then
            mkdir package-temp-dir
          fi
          cp package-lock.json package-temp-dir
      - name: cache node_modules
        id: node_modules_cache_id
        uses: actions/cache@v3
        with:
          path: node_modules
          key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}

      - name: install
        if: steps.node_modules_cache_id.outputs.cache-hit != 'true'
        run: npm ci

  build-and-deploy:
    runs-on: ubuntu-latest
    needs: setup
    steps:
      - name: checkout
        uses: actions/checkout@v3

      - name: restore cache from package-lock.json
        uses: actions/cache@v3
        with:
          path: package-temp-dir
          key: lock-${{ github.sha }}

      - name: restore cache from node_modules
        uses: actions/cache@v3
        with:
          path: node_modules
          key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}

      - name: build
        run: npm run predeploy

      - name: deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./_site
          force_orphan: true