name: Docs Website

defaults:
  run:
    shell: bash
    working-directory: docs

on:
  workflow_dispatch: {}
  push:
    branches: [main]
    paths:
      - 'docs/**'
      - '.github/workflows/docs.yml'
  pull_request:
    paths:
      - 'docs/**'
      - '.github/workflows/docs.yml'

concurrency:
  group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  docs:
    runs-on: ubuntu-20.04
    steps:
      - name: 👀 Checkout
        uses: actions/checkout@v3
        with:
          submodules: true
      - name: ⬢ Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 16.x
      - name: ♻️ Restore caches
        uses: ./.github/actions/expo-caches
        id: expo-caches
        with:
          yarn-docs: 'true'
      - name: ➕ Add `bin` to GITHUB_PATH
        run: echo "$(pwd)/bin" >> $GITHUB_PATH
      - name: 🧶 Yarn install
        if: steps.expo-caches.outputs.yarn-docs-hit != 'true'
        run: yarn install --frozen-lockfile
      - name: 🧪 Run Docs tests
        run: yarn test
      - name: 🚨 Lint Docs app
        run: yarn lint --max-warnings 0
      - name: 🚸 Lint Docs content
        run: yarn lint-case
      - run: yarn danger ci
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: 🏗️ Build Docs website for deploy
        run: yarn export
        timeout-minutes: 20
      # TODO(cedric): If we have time, we should make sure all links are valid and connected to a proper header
      # - name: lint links
      #   run: yarn lint-links --quiet
      - name: ✅ Test links (legacy)
        run: |
          yarn export-server &
          while ! nc -z localhost 8000; do
            sleep 1
          done
          yarn test-links http://127.0.0.1:8000
        timeout-minutes: 1
      - name: 🚀 Deploy Docs website
        if: ${{ github.event.ref == 'refs/heads/main' }}
        run: ./deploy.sh
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: 'us-east-2'
      - name: 🔔 Notify on Slack
        uses: 8398a7/action-slack@v3
        if: failure() && github.event.ref == 'refs/heads/main'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SLACK_WEBHOOK_URL: ${{ secrets.slack_webhook_docs }}
        with:
          channel: '#docs'
          status: ${{ job.status }}
          fields: job,message,ref,eventName,author,took
          author_name: Docs
