packages feed

liquidhaskell-0.8.10.7: .circleci/config.yml

---
version: 2.1

commands:
  setup_project:
    description: "Setup the machine, clone the repo, checkout the submodules."
    steps:
      - run: sudo apt-get update && sudo apt-get install -y curl git ssh unzip wget libtinfo-dev gcc make
      - run:
          name: Install z3
          command: |
            wget https://github.com/Z3Prover/z3/releases/download/z3-4.8.7/z3-4.8.7-x64-ubuntu-16.04.zip
            unzip z3-4.8.7-x64-ubuntu-16.04.zip
            rm -f z3-4.8.7-x64-ubuntu-16.04.zip
            sudo cp z3-4.8.7-x64-ubuntu-16.04/bin/libz3.a /usr/local/lib
            sudo cp z3-4.8.7-x64-ubuntu-16.04/bin/z3 /usr/local/bin
            sudo cp z3-4.8.7-x64-ubuntu-16.04/include/* /usr/local/include
            rm -rf z3-4.8.7-x64-ubuntu-16.04
            z3 --version

      - checkout
      - add_ssh_keys
      - run: git submodule sync
      - run: git submodule update --init

  cabal_build_and_test:
    description: "Build the project and run the tests"
    parameters:
      allow_test_failures:
        type: boolean
        default: false
      cabal_update_command:
        type: string
        default: "cabal v2-update"
      ghc_version:
        type: string
        default: "8.10.7"
      project_file:
        type: string
        default: "cabal.project"
      extra_test_flags:
        type: string
        default: ""
      liquid_runner:
        type: string
        default: "--liquid-runner=cabal v2-run liquidhaskell -- "
      ghc_options:
        type: string
        default: "--ghc-options=\"+RTS -M2G -RTS\""
      setup_test_extra_steps:
        type: string
        default: ""
    steps:
      - setup_project
      - run: git ls-tree HEAD liquid-fixpoint > liquid-fixpoint-commit
      - restore_cache:
          keys:
            - cabal-cache-v3-{{ checksum "liquidhaskell.cabal" }}-{{ checksum "<< parameters.project_file >>" }}-{{ checksum "liquid-fixpoint-commit" }}
            - cabal-cache-v3-{{ checksum "liquidhaskell.cabal" }}-{{ checksum "<< parameters.project_file >>" }}
      - run:
          name: Dependencies
          command: |
            wget https://downloads.haskell.org/~ghcup/x86_64-linux-ghcup
            chmod +x ./x86_64-linux-ghcup
            ./x86_64-linux-ghcup install ghc << parameters.ghc_version >>
            ./x86_64-linux-ghcup set ghc << parameters.ghc_version >>
            ./x86_64-linux-ghcup install cabal 3.6.2.0
            export PATH=~/.ghcup/bin:$PATH
            echo 'export PATH=~/.ghcup/bin:$PATH' >> $BASH_ENV
            << parameters.cabal_update_command >>
            cabal v2-clean
            cabal v2-build --project-file << parameters.project_file >> --flag include --flag devel -j2 --enable-tests all
      - save_cache:
          key: cabal-cache-v3-{{ checksum "liquidhaskell.cabal" }}-{{ checksum "<< parameters.project_file >>" }}-{{ checksum "liquid-fixpoint-commit" }}
          paths:
            - ~/.cabal/store
            - ~/.ghcup
            - ./dist-newstyle
      - run:
          name: Setup Test
          command: |
            mkdir -p /tmp/junit/cabal
            << parameters.setup_test_extra_steps >>
      - run:
          name: Test
          command: |
            (liquidhaskell_datadir=$PWD cabal v2-test -j1 --project-file << parameters.project_file >> liquidhaskell:test << parameters.extra_test_flags >> --flag include --flag devel --test-show-details=streaming --test-option="<< parameters.liquid_runner >>" --test-options="-t 1200s --xml=/tmp/junit/cabal/main-test-results.xml") || (<<parameters.allow_test_failures>>)
            (liquidhaskell_datadir=$PWD cabal v2-test -j1 --project-file << parameters.project_file >> liquidhaskell:liquidhaskell-parser --flag include --flag devel --test-show-details=streaming --test-options="--xml=/tmp/junit/cabal/parser-test-results.xml") || (<<parameters.allow_test_failures>>)
          no_output_timeout: 30m
      - store_test_results:
          path: /tmp/junit/cabal
      - run:
          name: Compress artifacts
          command: tar cvzf logs.tar.gz tests/logs/cur
      - store_artifacts:
          path: logs.tar.gz

  stack_build_and_test:
    description: "Build and test the project using Stack"
    parameters:
      stack_yaml_file:
        type: string
        default: "stack.yaml"
      liquid_runner:
        type: string
        default: "stack --silent exec -- liquidhaskell -v0"
      extra_test_flags:
        type: string
        default: ""
      extra_build_flags:
        type: string
        default: ""
    steps:
      - run: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 8B1DA6120C2BF624
      - setup_project
      - run: git ls-tree HEAD liquid-fixpoint > liquid-fixpoint-commit
      - restore_cache:
          keys:
            - stack-cache-v1-{{ checksum "<< parameters.stack_yaml_file >>" }}-{{ checksum "liquidhaskell.cabal" }}-{{ checksum "liquid-fixpoint-commit" }}
            - stack-cache-v1-{{ checksum "<< parameters.stack_yaml_file >>" }}-{{ checksum "liquidhaskell.cabal" }}
            - stack-cache-v1-{{ checksum "<< parameters.stack_yaml_file >>" }}
      - run:
          name: Dependencies
          command: |
            wget -qO- https://get.haskellstack.org/ | sudo sh
            stack --no-terminal --stack-yaml << parameters.stack_yaml_file >> setup
            stack --no-terminal --stack-yaml << parameters.stack_yaml_file >> build -j2 --only-dependencies --test --no-run-tests << parameters.extra_build_flags >>
      - save_cache:
          key: stack-cache-v1-{{ checksum "<< parameters.stack_yaml_file >>" }}-{{ checksum "liquidhaskell.cabal" }}-{{ checksum "liquid-fixpoint-commit" }}
          paths:
            - ~/.stack
            - ./.stack-work
      - run:
          name: Test
          command: |
            stack --no-terminal --stack-yaml << parameters.stack_yaml_file >> clean
            mkdir -p /tmp/junit/stack
            stack --no-terminal --stack-yaml << parameters.stack_yaml_file >> test -j1 liquidhaskell:test << parameters.extra_build_flags >> << parameters.extra_test_flags >> --ta="--liquid-runner \"<< parameters.liquid_runner >>\"" --ta="-t 1200s --xml=/tmp/junit/stack/main-test-results.xml": #--liquid-opts='--cores=1'":
            stack --no-terminal --stack-yaml << parameters.stack_yaml_file >> test -j1 liquidhaskell:liquidhaskell-parser << parameters.extra_build_flags >> --ta="--xml=/tmp/junit/stack/parser-test-results.xml":
          no_output_timeout: 30m
      - run:
          name: Generate haddock
          command: |
            # stack haddock liquidhaskell --flag liquidhaskell:-devel --no-haddock-deps --haddock-arguments="--no-print-missing-docs --odir=$CIRCLE_ARTIFACTS"
            # skip if extra_build_flags are set
            [ ! -z "<< parameters.extra_build_flags >>" ] || stack --no-terminal --stack-yaml << parameters.stack_yaml_file >> haddock << parameters.extra_build_flags >> liquidhaskell  --no-haddock-deps --haddock-arguments="--no-print-missing-docs"
      - store_test_results:
          path: /tmp/junit/stack
      - run:
          name: Compress artifacts
          command: tar cvzf logs.tar.gz tests/logs/cur
      - store_artifacts:
          path: logs.tar.gz
      - run:
          name: Dist
          command: |
            # skip if extra_build_flags are set
            [ ! -z "<< parameters.extra_build_flags >>" ] || stack --no-terminal --stack-yaml << parameters.stack_yaml_file >> sdist

jobs:

  stack_810_legacy_executable:
    machine:
      image: ubuntu-2004:202107-02
    steps:
        - stack_build_and_test:
            stack_yaml_file: "stack.yaml"
            liquid_runner: "stack --silent exec -- liquid"
            extra_build_flags: "--flag liquidhaskell:include --flag liquid-platform:devel --flag liquidhaskell:no-plugin"

  stack_810:
    machine:
      image: ubuntu-2004:202107-02
    steps:
        - stack_build_and_test:
            stack_yaml_file: "stack.yaml"
            extra_test_flags: " liquid-platform:liquidhaskell "

  cabal_810:
    machine:
      image: ubuntu-2004:202107-02
    steps:
      - cabal_build_and_test:
          liquid_runner: "--liquid-runner=cabal -v0 v2-exec liquidhaskell -- -v0 \
                          -package-env=$(./scripts/generate_testing_ghc_env) \
                          -package=liquidhaskell -package=Cabal "

  cabal_900:
    machine:
      image: ubuntu-2004:202107-02
    steps:
      - cabal_build_and_test:
          ghc_version: "9.0.1"
          project_file: "cabal.ghc9.project"
          extra_test_flags: ' --test-options '' -p "$0 != \"Tests.Benchmarks.text.Data/Text/Foreign.hs\" && ! /Tests.Micro.typeclass-pos./"'' '
          liquid_runner: "--liquid-runner=cabal -v0 v2-exec --project-file cabal.ghc9.project liquidhaskell -- -v0 \
                          -package-env=$(./scripts/generate_testing_ghc_env cabal.ghc9.project) \
                          -package=liquidhaskell -package=Cabal "

workflows:
  version: 2
  build_stack_and_cabal:
    jobs:
      - stack_810_legacy_executable
      - stack_810
      - cabal_810
      - cabal_900