image: openjdk:11-jdk-slim stages: - build - test - package - publish before_script: - echo "---------- Start CI ----------" - export GRADLE_USER_HOME=`pwd`/.gradle - chmod +x gradlew - echo "------ commit tag ---------------" - echo $CI_COMMIT_TAG - echo $CI_COMMIT_REF_NAME cache: paths: - .gradle/wrapper - .gradle/caches build: stage: build script: - echo "---------- build stage ----------" - ./gradlew assemble artifacts: paths: - build/libs/*.jar expire_in: 1 week test: stage: test image: docker:latest services: - docker:dind dependencies: - build before_script: - echo "---------- BEFORE -------------" - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - echo "---------- TEST -------------" - apk update && apk add bash openjdk11 - export JAVA_HOME=/usr/lib/jvm/java-11-openjdk - docker build --pull -t "$CI_REGISTRY_IMAGE" . - docker run --privileged -dit --name provs_test -v /var/run/docker.sock:/var/run/docker.sock $CI_REGISTRY_IMAGE - docker inspect -f '{{.State.Running}}' provs_test - ./gradlew -x assemble test -Dtestdockerwithoutsudo=true -DexcludeTags=containertest artifacts: when: on_failure paths: - build/reports/tests/test reports: junit: build/test-results/test/TEST-*.xml publish-snapshot: stage: publish script: - ./gradlew -x assemble -x test jar - ./gradlew -x assemble -x test publish artifacts: paths: - build/libs/*.jar expire_in: 2 months .fatjars: stage: package rules: # Do no allow manually triggered pipelines to prevent duplicates! # Instead rerun the pipeline created with the last push - if: $CI_PIPELINE_SOURCE != "push" when: never # Only execute when a valid version tag like v1.0, 2.3 or similar is given # Required is always one point like 1.0 - if: $CI_COMMIT_TAG =~ /^v[0-9]+[.][0-9]+([.][0-9]+)?$/ before_script: - echo $CI_JOB_ID # Writing FATJAR_JOB_ID variable to environment file, as variable is needed in the release stage. - echo FATJAR_JOB_ID=$CI_JOB_ID >> generate_executables.env script: - echo "---------- create fatjar ----------" - ./gradlew fatJarLatest - ./gradlew fatJarK3s artifacts: paths: - 'build/libs/provs.jar' - 'build/libs/provs-server.jar' reports: # To ensure we've access to this file in the next stage dotenv: generate_executables.env expire_in: 6 months uberjarjar: stage: package rules: - if: $CI_PIPELINE_SOURCE != "push" when: never - if: $CI_COMMIT_TAG =~ /^release-[0-9]+[.][0-9]+([.][0-9]+)?$/ script: - ./gradlew -x assemble -x test -x jar uberjarServer - ./gradlew -x assemble -x test -x jar uberjarDesktop - cd build/libs/ - find . -type f -exec sha256sum {} \; | sort > sha256sum.lst - find . -type f -exec sha512sum {} \; | sort > sha512sum.lst artifacts: paths: - 'build/libs/provs-desktop.jar' - 'build/libs/provs-server.jar' - 'build/libs/sha256sum.lst' - 'build/libs/sha512sum.lst' expire_in: never release: image: registry.gitlab.com/gitlab-org/release-cli:latest stage: publish rules: - if: $CI_PIPELINE_SOURCE != "push" when: never - if: $CI_COMMIT_TAG =~ /^release-[0-9]+[.][0-9]+([.][0-9]+)?$/ artifacts: paths: - 'build/libs/provs-desktop.jar' - 'build/libs/provs-server.jar' - 'build/libs/sha256sum.lst' - 'build/libs/sha512sum.lst' script: - apk --no-cache add curl - | release-cli create --name "Release $CI_COMMIT_TAG" --tag-name $CI_COMMIT_TAG \ --assets-link "{\"name\":\"provs-desktop.jar\",\"url\":\"https://gitlab.com/domaindrivenarchitecture/provs/-/jobs/${CI_JOB_ID}/artifacts/file/build/libs/provs-desktop.jar\"}" \ --assets-link "{\"name\":\"provs-server.jar\",\"url\":\"https://gitlab.com/domaindrivenarchitecture/provs/-/jobs/${CI_JOB_ID}/artifacts/file/build/libs/provs-server.jar\"}" \ --assets-link "{\"name\":\"sha256sum.lst\",\"url\":\"https://gitlab.com/domaindrivenarchitecture/provs/-/jobs/${CI_JOB_ID}/artifacts/file/build/libs/sha256sum.lst\"}" \ --assets-link "{\"name\":\"sha512sum.lst\",\"url\":\"https://gitlab.com/domaindrivenarchitecture/provs/-/jobs/${CI_JOB_ID}/artifacts/file/build/libs/sha512sum.lst\"}" \ after_script: - echo "---------- End CI ----------"