# Python CircleCI 2.1 configuration file
#
# Check https://circleci.com/docs/2.1/language-python/ for more details
#
version: 2.1

# Aliases to reuse
_defaults: &defaults
  docker:
    # CircleCI maintains a library of pre-built images
    # documented at https://circleci.com/developer/images/image/cimg/python
    - image: cimg/python:3.12.12
  working_directory: ~/repo


jobs:
  build:
    <<: *defaults
    steps:
      - checkout:
          method: blobless

      - run:
          name: check skip
          command: |
            export git_log=$(git log --max-count=1 --pretty=format:"%B" | tr "\n" " ")
            echo "Got commit message:"
            echo "${git_log}"
            if [[ -v CIRCLE_PULL_REQUEST ]] && \
               ([[ "$git_log" == *"[skip circle]"* ]] || \
                [[ "$git_log" == *"[circle skip]"* ]])
            then
              echo "Skip detected, exiting job ${CIRCLE_JOB} for PR ${CIRCLE_PULL_REQUEST}."
              circleci-agent step halt;
            fi
      - run:
          name: pull changes from merge
          command: |
            if [[ -v CI_PULL_REQUEST ]] ; then git pull --ff-only origin "refs/pull/${CI_PULL_REQUEST//*pull\//}/merge" ; fi

      - run:
          name: update submodules
          command: |
            git submodule update --init

      - run:
          name: install system dependencies
          command: |
            sudo apt-get update
            sudo apt-get install -y graphviz texlive-fonts-recommended texlive-latex-recommended \
              texlive-latex-extra latexmk texlive-xetex texlive-lang-chinese doxygen

      - run:
          name: build NumPy
          command: |
            python3.12 -m venv venv
            . venv/bin/activate
            pip install --progress-bar=off -r requirements/test_requirements.txt \
               -r requirements/build_requirements.txt \
               -r requirements/ci_requirements.txt
            # get newer, pre-release versions of critical packages
            pip install --progress-bar=off --pre -r requirements/doc_requirements.txt
            # then install numpy HEAD, which will override the version installed above
            spin build --with-scipy-openblas=64 -j 2

      - run:
          name: build devdocs w/ref warnings
          command: |
            . venv/bin/activate
            # Don't use -q, show warning summary"
            SPHINXOPTS="-W -n" spin docs
            if [[ $(find doc/build/html -type f | wc -l) -lt 1000 ]]; then
                echo "doc build failed: doc/build/html is empty"
                exit -1
            fi

      - run:
          name: build neps
          command: |
            . venv/bin/activate
            cd doc/neps
            SPHINXOPTS="-n" make -e html || echo "ignoring errors for now"

      - store_artifacts:
          path: doc/build/html/

      - store_artifacts:
          path: doc/neps/_build/html/
     #      destination: neps

      - run:
          name: check doctests
          command: |
            . venv/bin/activate
            spin check-docs -v
            spin check-tutorials -v
            # Currently, this does two checks not done by check-docs:
            #  - validates ReST blocks (via validate_rst_syntax)
            #  - checks that all of a module's `__all__` is reflected in the
            #    module-level docstring autosummary
            echo calling python3 tools/refguide_check.py -v
            python3 tools/refguide_check.py -v

      - persist_to_workspace:
          root: ~/repo
          paths:
            - doc/build/html
            - doc/neps/_build
            - tools/ci/push_docs_to_repo.py

  deploy:
    <<: *defaults
    steps:
      - checkout:
          method: blobless

      - attach_workspace:
          at: ~/repo

      - add_ssh_keys:
          fingerprints:
            - "45:d8:d1:d6:f7:53:47:c5:d0:9e:35:19:79:e7:ff:24"

      -  run:
          name: deploy devdocs
          command: |
            touch doc/build/html/.nojekyll

            ./tools/ci/push_docs_to_repo.py doc/build/html \
                --committer "numpy-circleci-bot" \
                --email "numpy-circleci-bot@nomail" \
                --message "Docs build of $CIRCLE_SHA1" \
                --count 5 \
                --force \
                git@github.com:numpy/devdocs.git

      - add_ssh_keys:
          fingerprints:
            - "df:8b:fb:34:2d:38:7d:49:fc:1b:e8:44:4f:bd:2c:0e"

      - run:
          name: select SSH key for neps repo
          command: |
            cat \<<\EOF > ~/.ssh/config
            Host github.com
              IdentitiesOnly yes
              IdentityFile /home/circleci/.ssh/id_rsa_df8bfb342d387d49fc1be8444fbd2c0e
            EOF

      -  run:
          name: deploy neps
          command: |
            touch doc/neps/_build/html/.nojekyll

            ./tools/ci/push_docs_to_repo.py doc/neps/_build/html \
                --committer "numpy-circleci-bot" \
                --email "numpy-circleci-bot@nomail" \
                --message "Docs build of $CIRCLE_SHA1" \
                --count 5 \
                --force \
                git@github.com:numpy/neps.git \

workflows:
  version: 2
  default:
    jobs:
      - build
      - deploy:
          requires:
            - build
          filters:
            branches:
              only: main
