image: openjdk:8-alpine

stages:
    - test
    - build

test:gradle:
    stage: test
    coverage: '/Total.*?([0-9]{1,3})%/'
    before_script:
        - apk add --no-cache grep
    script:
        - ./gradlew codeCoverageReport
        # The actual output that will be parsed by the code coverage
        - grep -oP "Total.*?%" build/reports/jacoco/html/index.html
    cache:
        key: ${CI_COMMIT_REF_SLUG}
        paths:
            - $HOME/.gradle/caches/
            - $HOME/.gradle/wrapper/
            - .gradle
    only:
        - master
        - merge_requests
        - tags

test:ant:
    stage: test
    image: debian:buster-slim
    variables:
        SCALA: https://downloads.lightbend.com/scala/2.12.13/scala-2.12.13.deb
        LIBPREFIX: /usr/share/scala/lib
        LIB_SCALATEST: https://repo1.maven.org/maven2/org/scalatest/scalatest_2.12/3.0.4/scalatest_2.12-3.0.4.jar
        LIB_SCALACTIC: https://repo1.maven.org/maven2/org/scalactic/scalactic_2.12/3.0.4/scalactic_2.12-3.0.4.jar
    before_script:
        # Fix bug installing openjdk-11-jdk-headless's manuals
        - mkdir -p /usr/share/man/man1/
        - apt-get update -q
        - apt-get install -y wget gettext
            ant default-jdk-headless
            libmockito-java libhamcrest-java junit4
        # Install specific version of scala
        - wget -qO scala.deb "${SCALA}"
        - dpkg -i scala.deb
        # link to the scala libs with the name `ant test` expects
        - ln -s "${LIBPREFIX}/scala-xml_2.12-1.0.6.jar" "${LIBPREFIX}/scala-xml.jar"
        # Download required scala libs
        - wget -qO "${LIBPREFIX}/scalactic.jar" "${LIB_SCALACTIC}"
        - wget -qO "${LIBPREFIX}/scalatest.jar" "${LIB_SCALATEST}"
        # Point ant to the right directories
        - echo scalatest.libs=/usr/share/scala/lib > override.properties
        - echo junit.home=/usr/share/java >> override.properties
        - echo hamcrest.home=/usr/share/java >> override.properties
        - echo mockito.home=/usr/share/java >> override.properties
        - echo build.built-by=GitHub Actions >> override.properties
    script:
        - ant test
    only:
        - master
        - merge_requests
        - tags

# Make sure we can build a docker image
# It's cached for later jobs
build_docker:
    stage: build
    image: docker:24.0.7
    services:
        - docker:24.0.7-dind
    script:
        # Try to load latest branch image from local tar or from registry
        - docker load -i ci-exports/$CI_COMMIT_REF_SLUG.tar || docker pull $CI_REGISTRY_IMAGE:latest || true
        - docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:latest .
        - mkdir -p ci-exports/
        - echo docker save $CI_REGISTRY_IMAGE:latest > ci-exports/$CI_COMMIT_REF_SLUG.tar
    variables:
        # When using dind service, we need to instruct docker to talk with
        # the daemon started inside of the service. The daemon is available
        # with a network connection instead of the default
        # /var/run/docker.sock socket. Docker 19.03 does this automatically
        # by setting the DOCKER_HOST in
        # https://github.com/docker-library/docker/blob/d45051476babc297257df490d22cbd806f1b11e4/19.03/docker-entrypoint.sh#L23-L29
        #
        # The 'docker' hostname is the alias of the service container as described at
        # https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#accessing-the-services.
        #
        # Specify to Docker where to create the certificates, Docker will
        # create them automatically on boot, and will create
        # `/certs/client` that will be shared between the service and job
        # container, thanks to volume mount from config.toml
        DOCKER_TLS_CERTDIR: "/certs"
        # Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
        # DOCKER_HOST: tcp://docker:2376
    cache:
        # The same key should be used across branches
        key: "$CI_COMMIT_REF_SLUG"
        paths:
            - ci-exports/
    only:
        - master
        - merge_requests
        - tags

