image: reg.handtruth.com/roots/kotlin/build

stages:
  - build
  - testPlatform
  - testGroup
  - test
  - analysis
  - package
  - deploy

cache:
  paths:
    - .gradle

variables:
  GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
  GIT_SUBMODULE_STRATEGY: normal
  GRADLE: ./gradlew -Pci --console=plain --no-daemon --max-workers=1 --stacktrace

assemble:
  stage: build
  script:
    - $GRADLE assemble
  artifacts: &artifacts
    paths:
      - build
      - 'modules/*/build'

.test: &test
  script:
    - $GRADLE $CI_JOB_NAME
  artifacts: *artifacts

.platformTest: &platformTest
  <<: *test
  stage: testPlatform
  needs:
    - assemble
  artifacts:
    reports:
      junit:
        - 'modules/*/build/test-results/$CI_JOB_NAME/TEST-*.xml'

jvmTest: *platformTest

jsBrowserTest: *platformTest

jsNodeTest: *platformTest

linuxX64Test: *platformTest

testDebugUnitTest: *platformTest

testReleaseUnitTest: *platformTest

.groupTest: &groupTest
  <<: *test
  stage: testGroup

jsTest:
  <<: *groupTest
  needs:
    - jsNodeTest
    - jsBrowserTest

androidTest:
  stage: testGroup
  needs:
    - testDebugUnitTest
    - testReleaseUnitTest
  script:
    - $GRADLE test
  artifacts: *artifacts

allTest:
  <<: *test
  stage: test
  needs:
    - jvmTest
    - jsTest
    - androidTest
    - linuxX64Test
  cache:
    policy: pull

lint:
  stage: test
  script:
    - $GRADLE ktlintCheck
  needs:
    - assemble
  cache:
    policy: pull

androidLint:
  stage: test
  script:
    - $GRADLE lint
  needs:
    - assemble
  cache:
    policy: pull

coverage:
  stage: analysis
  script:
    - $GRADLE rootTestCoverageReport
    - cat build/reports/jacoco/rootTestCoverageReport/html/index.html || true
  coverage: "/Total.*?([0-9]{1,3})%/"
  artifacts: *artifacts
  needs:
    - jvmTest

mavenSnapshot:
  stage: package
  script:
    - $GRADLE publish
  needs:
    - assemble
  cache:
    policy: pull

mavenRelease:
  stage: package
  script:
    - $GRADLE publishToMavenLocal
  tags: [ package ]
  only: [ tags ]
  needs:
    - assemble
  cache:
    policy: pull

pages:
  stage: package
  script:
    - $GRADLE gitlabPagesCreate
  only: [ tags ]
  needs:
    - coverage
  artifacts:
    paths:
      - public
  cache:
    policy: pull