name: Jan Docs

on:
  push:
    branches:
      - main
      - dev
      - docs
    paths:
      - 'docs/**'
      - '.github/workflows/jan-docs.yml'
  pull_request:
    branches:
      - main
      - dev
      - docs
    paths:
      - 'docs/**'
      - '.github/workflows/jan-docs.yml'
    # Review gh actions docs if you want to further define triggers, paths, etc
    # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on

jobs:
  deploy:
    name: Deploy to GitHub Pages
    env:
      CLOUDFLARE_PROJECT_NAME: jan
    runs-on: ubuntu-latest
    permissions:
      contents: write
      deployments: write
      pull-requests: write
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: Install jq      
        uses: dcarbone/install-jq-action@v2.0.1

      - name: Fill env vars
        run: |
          env_example_file=".env.example"
          touch .env
          while IFS= read -r line || [[ -n "$line" ]]; do
            if [[ "$line" == *"="* ]]; then
              var_name=$(echo $line | cut -d '=' -f 1)
              echo $var_name
              var_value="$(jq -r --arg key "$var_name" '.[$key]' <<< "$SECRETS")"
              echo "$var_name=$var_value" >> .env
            fi
          done < "$env_example_file"
        working-directory: docs
        env:
          SECRETS: '${{ toJson(secrets) }}'

      - name: Install dependencies
        run: yarn install
        working-directory: docs
      - name: Build website
        run: sed -i '/process.env.DEBUG = namespaces;/c\// process.env.DEBUG = namespaces;' ./node_modules/debug/src/node.js && yarn build
        working-directory: docs

      - name: Publish to Cloudflare Pages PR Preview and Staging
        if: github.event_name == 'push' && github.ref == 'refs/heads/dev'
        uses: cloudflare/pages-action@v1
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          projectName: ${{ env.CLOUDFLARE_PROJECT_NAME }}
          directory: ./docs/build
          branch: main
          # Optional: Enable this if you want to have GitHub Deployments triggered
          gitHubToken: ${{ secrets.GITHUB_TOKEN }}

      - name: Publish to Cloudflare Pages PR Preview and Staging
        if: github.event_name == 'pull_request'
        uses: cloudflare/pages-action@v1
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          projectName: ${{ env.CLOUDFLARE_PROJECT_NAME }}
          directory: ./docs/build
          # Optional: Enable this if you want to have GitHub Deployments triggered
          gitHubToken: ${{ secrets.GITHUB_TOKEN }}
        id: deployCloudflarePages

      - uses: mshick/add-pr-comment@v2
        if: github.event_name == 'pull_request'
        with:
          message: |
              Preview URL: ${{ steps.deployCloudflarePages.outputs.url }}

      - name: Add Custome Domain file
        if: github.event_name == 'push' && github.ref == 'refs/heads/docs' && github.event.pull_request.head.repo.full_name != github.repository
        run: echo "${{ vars.DOCUSAURUS_DOMAIN }}" > ./docs/build/CNAME

      # Popular action to deploy to GitHub Pages:
      # Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus
      - name: Deploy to GitHub Pages
        if: github.event_name == 'push' && github.ref == 'refs/heads/docs' && github.event.pull_request.head.repo.full_name != github.repository
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          # Build output to publish to the `gh-pages` branch:
          publish_dir: ./docs/build
          # The following lines assign commit authorship to the official
          # GH-Actions bot for deploys to `gh-pages` branch:
          # https://github.com/actions/checkout/issues/13#issuecomment-724415212
          # The GH actions bot is used by default if you didn't specify the two fields.
          # You can swap them out with your own user credentials.
          user_name: github-actions[bot]
          user_email: 41898282+github-actions[bot]@users.noreply.github.com