name: Publish website
on:
  push:
    branches:
      - master
permissions:
  contents: read

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [lts/*]

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      - name: Install Gulp
        run: npm install -g gulp-cli

      - name: Install other dependencies
        run: npm install

      - name: Build the website
        run: gulp web

      - name: Archive the website
        shell: sh
        run: |
          chmod -c -R +rX "$INPUT_PATH" | while read line; do
            echo "::warning title=Invalid file permissions automatically fixed::$line"
          done
          tar \
            --dereference --hard-dereference \
            --directory "$INPUT_PATH" \
            -cvf "$RUNNER_TEMP/website.tar" \
            --exclude=.git \
            --exclude=.github \
            .
        env:
          INPUT_PATH: build/gh-pages

      - name: Upload the website
        uses: actions/upload-artifact@v4
        with:
          name: github-pages
          path: ${{ runner.temp }}/website.tar
          retention-days: 1
          if-no-files-found: error

  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    needs: build
    permissions:
      pages: write  # Required to deploy to GitHub Pages.
      id-token: write  # Required to verify that the deployment originates from this workflow.

    steps:
      - name: Deploy the website
        uses: actions/deploy-pages@v4