name: CI

on:
    push:
        branches:
            - main
    pull_request:
        branches:
            - main

jobs:
    main:
        runs-on: ubuntu-latest

        steps:
            - uses: actions/checkout@v2
            - name: Use Node.js 20
              uses: actions/setup-node@v2
              with:
                  node-version: 20
            # Re-use node_modules between runs until package-lock.json changes.
            - name: Cache node_modules
              id: cache-node_modules
              uses: actions/cache@v2
              with:
                  path: node_modules
                  key: node_modules-${{ hashFiles('package-lock.json') }}

            # Re-use ~/.elm between runs until elm.json, elm-tooling.json or
            # review/elm.json changes. The Elm compiler saves downloaded Elm packages
            # to ~/.elm, and elm-tooling saves downloaded tool executables there.
            - name: Cache ~/.elm
              uses: actions/cache@v2
              with:
                  path: ~/.elm
                  key: elm-${{ hashFiles('elm.json', 'review/elm.json') }}

            # Install npm packages, unless we restored them from cache.
            # Since `npm ci` removes the node_modules folder before running it’s
            # important to skip this step if cache was restored.
            - name: npm ci
              if: steps.cache-node_modules.outputs.cache-hit != 'true'
              run: npm ci
            - name: Tests
              run: npm test
            - name: Build elm docs
              run: npx --no-install elm make --docs docs.json
              # - name: Elm Publish
              #   uses: dillonkearns/elm-publish-action@1.0.1
              #   with:
              #     github-token: ${{ secrets.GITHUB_TOKEN }}
              #     path-to-elm: ./node_modules/.bin/elm
              # - run: npm run build
              # - id: npm-publish
              #   if: github.ref == 'refs/heads/main'
              #   uses: JS-DevTools/npm-publish@v1
              #   with:
              #     token: ${{ secrets.NPM_TOKEN }}
            - name: Generate elm-doc-preview
              uses: EndBug/add-and-commit@v5
              with:
                  add: "docs.json"
                  author_name: GitHub Actions
                  message: "Update docs.json from CI for elm-doc-preview."
                  push: true
              env:
                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
