# TODO: remove this as submodules aren't used anymore.
variables:
  GIT_SUBMODULE_STRATEGY: recursive

stages:
  - build_docker
  - build_and_deploy_docker
  - build_and_deploy_website
  - test


.docker: &docker
  image: docker:1.11
  services:
    - docker:dind

.docker_build: &docker_build
  script:
    - docker build -t $LIGO_REGISTRY_IMAGE:latest -f ./docker/Dockerfile .

.before_script: &before_script
  before_script:
    # Install dependencies
    # rsync is needed by opam to sync a package installed from a local directory with the copy in ~/.opam
    - apt-get update -qq
    - apt-get -y -qq install rsync libhidapi-dev libcap-dev libev-dev bubblewrap
    - wget https://github.com/ocaml/opam/releases/download/2.0.1/opam-2.0.1-x86_64-linux -O opam-2.0.1-x86_64-linux
    - cp opam-2.0.1-x86_64-linux /usr/local/bin/opam
    - chmod +x /usr/local/bin/opam
    - export PATH="/usr/local/bin${PATH:+:}${PATH:-}"

    # Initialise opam
    - printf '' | opam init --bare
    - eval $(opam config env)

    # Create switch
    - printf '' | opam switch create toto ocaml-base-compiler.4.06.1
    - eval $(opam config env)

    # Show versions and current switch
    - echo "$PATH"
    - opam --version
    - printf '' | ocaml
    - opam switch

local-dune-job:
  <<: *before_script
  stage: test
  script:
    - vendors/opam-repository-tools/rewrite-local-opam-repository.sh
    - opam repository add localrepo "file://$PWD/vendors/ligo-opam-repository-local-generated/"
    - opam install -y --build-test --deps-only ./src/
    - dune build -p ligo
    # TODO: also try instead from time to time:
    #- (cd ./src/; dune build -p ligo)
    - dune build @ligo-test
#   artifacts:
#     paths:
#       - src/ligo/bin/cli.ml

local-repo-job:
  <<: *before_script
  stage: test
  script:
    - vendors/opam-repository-tools/rewrite-local-opam-repository.sh
    - opam repository add localrepo "file://$PWD/vendors/ligo-opam-repository-local-generated/"
    #--build-test
    - opam install -y ligo

remote-repo-job:
  <<: *before_script
  stage: test
  script:
    # Add repository
    - opam repository add ligo-repository https://gitlab.com/ligolang/ligo.git
    - eval $(opam config env)
    - opam install -y ligo
    # Used in the IDE
    #- opam install -y user-setup
    #- opam install -y merlin
    #- opam install -y ocp-indent
    #- opam user-setup install
  only:
    - master

# Run a docker build without publishing to the registry
build-current-docker-image:
  stage: build_docker
  <<: *docker
  <<: *docker_build
  except:
    - master

# When a MR/PR is merged to master
# take the previous build and publish it to Docker Hub
build-and-publish-latest-docker-image:
  stage: build_and_deploy_docker
  <<: *docker
  <<: *docker_build
  after_script:
    - docker login -u $LIGO_REGISTRY_USER -p $LIGO_REGISTRY_PASSWORD
    - docker push $LIGO_REGISTRY_IMAGE:latest
  only:
    - master


pages:
  stage: build_and_deploy_website
  image: node:8
  before_script:
    - cd gitlab-pages/website
    - npm install
  script:
    - npm run build
    - pwd
    - cd ../..
    - pwd
    - cp -r gitlab-pages/website/build/ligo public
  artifacts:
    paths:
      - public
  only:
    - master