# Clojure CircleCI 2.0 configuration file
#
version: 2
jobs:

  lint:
    docker:
      - image: circleci/clojure:tools-deps-1.9.0.394-node

    working_directory: ~/repo

    steps:
      - checkout

      - restore_cache: # restores saved cache if checksum hasn't changed since the last run
          key: clj-dependencies-{{ checksum "deps.edn" }}

      - run: clojure -Alint

      - save_cache: # generate and store cache in the .m2 directory using a key template
          paths:
            - ~/.m2
            - ~/.gitlibs
          key: clj-dependencies-{{ checksum "deps.edn" }}

  test-linux-cljs:
    docker:
      - image: archlinux/base

    working_directory: ~/repo

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-linux-{{ checksum "package.json" }}
          # fallback to using the latest cache if no exact match is found
          - v1-dependencies-linux-

      - run: scripts/ci_linux

      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-linux-{{ checksum "package.json" }}

      # run tests
      - run: npm run test-cljs

  test-linux-clj:
    docker:
      - image: circleci/clojure:tools-deps-1.9.0.394-node

    working_directory: ~/repo

    steps:
      - checkout

      - restore_cache: # restores saved cache if checksum hasn't changed since the last run
          key: clj-dependencies-{{ checksum "deps.edn" }}

      - run: sudo apt-get -y install bc

      # run tests
      - run: CI_ENV=1 clojure -Atest -m cognitect.test-runner

      - save_cache: # generate and store cache in the .m2 directory using a key template
          paths:
            - ~/.m2
            - ~/.gitlibs
          key: clj-dependencies-{{ checksum "deps.edn" }}

  test-linux-clj-sci:
    docker:
      - image: circleci/clojure:tools-deps-1.9.0.394-node

    working_directory: ~/repo

    steps:
      - checkout

      - restore_cache: # restores saved cache if checksum hasn't changed since the last run
          key: clj-sci-dependencies-{{ checksum "deps.edn" }}

      - run: sudo apt-get -y install bc

      # run tests
      - run: env CI_ENV=1 __CLOSH_USE_SCI_EVAL__=1 clojure -A:sci:test -m cognitect.test-runner

      - save_cache: # generate and store cache in the .m2 directory using a key template
          paths:
            - ~/.m2
            - ~/.gitlibs
          key: clj-sci-dependencies-{{ checksum "deps.edn" }}

  test-linux-clj-jdk11:
    docker:
      - image: circleci/clojure:openjdk-11-tools-deps-1.10.0.442-node

    working_directory: ~/repo

    steps:
      - checkout

      - restore_cache: # restores saved cache if checksum hasn't changed since the last run
          key: clj-jdk11-dependencies-{{ checksum "deps.edn" }}

      - run: sudo apt-get -y install bc

      # run tests
      - run: CI_ENV=1 clojure -Atest -m cognitect.test-runner

      - save_cache: # generate and store cache in the .m2 directory using a key template
          paths:
            - ~/.m2
            - ~/.gitlibs
          key: clj-jdk11-dependencies-{{ checksum "deps.edn" }}

  test-linux-clj-jdk11-sci:
    docker:
      - image: circleci/clojure:openjdk-11-tools-deps-1.10.0.442-node

    working_directory: ~/repo

    steps:
      - checkout

      - restore_cache: # restores saved cache if checksum hasn't changed since the last run
          key: clj-jdk11-sci-dependencies-{{ checksum "deps.edn" }}

      - run: sudo apt-get -y install bc

      # run tests
      - run:  CI_ENV=1 __CLOSH_USE_SCI_EVAL__=1 clojure -A:sci:test -m cognitect.test-runner

      - save_cache: # generate and store cache in the .m2 directory using a key template
          paths:
            - ~/.m2
            - ~/.gitlibs
          key: clj-jdk11-sci-dependencies-{{ checksum "deps.edn" }}

  test-macos-cljs:
    macos:
      xcode: "10.2.1"

    working_directory: /Users/distiller/project

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-macos-{{ checksum "package.json" }}
      #     # fallback to using the latest cache if no exact match is found
      #     - v1-dependencies-macos-

      - run: scripts/ci_macos

      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-macos-{{ checksum "package.json" }}

      # run tests
      - run: . "$HOME/.nvm/nvm.sh" && nvm use $(lumo -e '(println process.version)') && npm run test-cljs

  test-macos-clj:
    macos:
      xcode: "10.2.1"

    working_directory: /Users/distiller/project

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - clj-dependencies-macos-{{ checksum "deps.edn" }}

      - run: brew install clojure bc

      # run tests
      - run: CI_ENV=1 clojure -Atest -m cognitect.test-runner

      - save_cache:
          paths:
            - ~/.m2
            - ~/.gitlibs
          key: clj-dependencies-macos-{{ checksum "deps.edn" }}

  test-macos-clj-sci:
    macos:
      xcode: "10.2.1"

    working_directory: /Users/distiller/project

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - clj-macos-sci-dependencies-{{ checksum "deps.edn" }}

      - run: brew install clojure bc

      # run tests
      - run: CI_ENV=1 __CLOSH_USE_SCI_EVAL__=1 clojure -A:sci:test -m cognitect.test-runner

      - save_cache:
          paths:
            - ~/.m2
            - ~/.gitlibs
          key: clj-macos-sci-dependencies-{{ checksum "deps.edn" }}

workflows:
  version: 2
  test:
    jobs:
      - lint
      - test-linux-cljs
      - test-linux-clj
      - test-linux-clj-jdk11
      - test-linux-clj-sci
      - test-linux-clj-jdk11-sci
      - test-macos-cljs
      - test-macos-clj
      - test-macos-clj-sci
