269 lines
11 KiB
YAML
269 lines
11 KiB
YAML
stages:
|
|
- Tests
|
|
- Documentation
|
|
- Release
|
|
- Build Release
|
|
- Other
|
|
|
|
variables:
|
|
project_name: "$CI_PROJECT_NAME"
|
|
SEMANTIC_RELEASE_PACKAGE: "$CI_PROJECT_NAME"
|
|
SECURE_ANALYZERS_PREFIX: "registry.gitlab.com/gitlab-org/security-products/analyzers"
|
|
SAST_EXCLUDED_ANALYZERS: ""
|
|
SAST_EXCLUDED_PATHS: "spec, test, tests, tmp"
|
|
SCAN_KUBERNETES_MANIFESTS: "false"
|
|
SECRETS_ANALYZER_VERSION: "3"
|
|
SECRET_DETECTION_EXCLUDED_PATHS: ""
|
|
|
|
image: docker.griefed.dev/griefed/baseimage-ubuntu-jdk-8:2.0.22
|
|
|
|
services:
|
|
- name: docker.griefed.dev/griefed/gitlab-ci-cd:2.2.12
|
|
alias: docker
|
|
|
|
workflow:
|
|
rules:
|
|
- if: '$CI_MERGE_REQUEST_EVENT_TYPE == "detached"'
|
|
when: never
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
when: never
|
|
- if: '$CI_COMMIT_TITLE =~ /^RELEASE:.+$/ && $CI_COMMIT_BRANCH' # && $CI_COMMIT_TAG == null
|
|
when: never
|
|
- when: always
|
|
|
|
Gradle Test:
|
|
stage: Tests
|
|
before_script:
|
|
- chmod +x gradlew
|
|
script:
|
|
- echo "**** Building ${CI_PROJECT_NAME} ****"
|
|
- "./gradlew build --info --full-stacktrace"
|
|
- echo "**** Listing build directory ****"
|
|
- LC_COLLATE=C ls -ahl --group-directories-first --color=auto build/jacoco/test
|
|
- LC_COLLATE=C ls -ahl --group-directories-first --color=auto build/libs
|
|
- cat build/jacoco/test/html/index.html | grep -o 'Total[^%]*%'
|
|
- echo "**** Renaming files to please the eye ****"
|
|
- mv build/libs/${CI_PROJECT_NAME}.jar build/libs/${CI_PROJECT_NAME}-$CI_COMMIT_REF_NAME.jar
|
|
coverage: '/Total.*?([0-9]{1,3})%/'
|
|
artifacts:
|
|
paths:
|
|
- build/libs/${CI_PROJECT_NAME}-$CI_COMMIT_REF_NAME.jar
|
|
- build/jacoco/test/jacocoTestReport.xml
|
|
- build/reports/tests/test
|
|
expire_in: 1 week
|
|
|
|
Generate Release:
|
|
stage: Release
|
|
needs:
|
|
- job: Gradle Test
|
|
artifacts: false
|
|
image: docker.griefed.dev/griefed/gitlab-ci-cd:2.2.12
|
|
script:
|
|
- npx semantic-release
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == "alpha" && $CI_COMMIT_TITLE !~ /^RELEASE:.+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
- if: '$CI_COMMIT_BRANCH == "beta" && $CI_COMMIT_TITLE !~ /^RELEASE:.+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
- if: '$CI_COMMIT_BRANCH == "main" && $CI_COMMIT_TITLE !~ /^RELEASE:.+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
|
|
Build Release:
|
|
stage: Build Release
|
|
before_script:
|
|
- echo "**** Running in $CI_JOB_ID ****"
|
|
- echo "**** Java location ****"
|
|
- which java
|
|
- echo "**** Java version ****"
|
|
- java -version
|
|
- echo "**** Allowing execution of gradlew ****"
|
|
- chmod +x gradlew
|
|
- echo "**** Ensure clean environment ****"
|
|
- "./gradlew clean"
|
|
script:
|
|
- echo "**** Building ${CI_PROJECT_NAME} ****"
|
|
- "./gradlew build -Pversion=${CI_COMMIT_TAG} --info -x test"
|
|
- echo "**** Listing build directory ****"
|
|
- LC_COLLATE=C ls -ahl --group-directories-first --color=auto build
|
|
- LC_COLLATE=C ls -ahl --group-directories-first --color=auto build/libs
|
|
- echo "**** Uploading packages ****"
|
|
- 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file build/libs/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.jar "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.jar"'
|
|
- 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file build/libs/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-javadoc.jar "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-javadoc.jar"'
|
|
- 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file build/libs/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-sources.jar "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-sources.jar"'
|
|
- echo "**** Create asset links ****"
|
|
- 'curl --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" --data tag_name="${CI_COMMIT_TAG}" --data name="${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.jar" --data url="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.jar" --data link_type="package" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${CI_COMMIT_TAG}/assets/links"'
|
|
- 'curl --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" --data tag_name="${CI_COMMIT_TAG}" --data name="${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-javadoc.jar" --data url="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-javadoc.jar" --data link_type="package" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${CI_COMMIT_TAG}/assets/links"'
|
|
- 'curl --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" --data tag_name="${CI_COMMIT_TAG}" --data name="${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-sources.jar" --data url="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-sources.jar" --data link_type="package" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${CI_COMMIT_TAG}/assets/links"'
|
|
rules:
|
|
- if: "$CI_COMMIT_TAG =~ /^\\d+\\.\\d+\\.\\d+(-beta|-alpha)\\.\\d+$/"
|
|
- if: "$CI_COMMIT_TAG =~ /^\\d+\\.\\d+\\.\\d+$/"
|
|
|
|
Sign Java Publication:
|
|
stage: Build Release
|
|
needs:
|
|
- job: Build Release
|
|
artifacts: false
|
|
optional: false
|
|
before_script:
|
|
- chmod +x gradlew
|
|
script:
|
|
- echo "**** Publishing Maven Artifacts ****"
|
|
- "./gradlew signMavenJavaPublication -Pversion=${CI_COMMIT_TAG} -x test --info --stacktrace"
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+-beta\.\d+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
cache:
|
|
- key:
|
|
files:
|
|
- build.gradle
|
|
- gradle/gradle-wrapper.properties
|
|
paths:
|
|
- .gradle
|
|
policy: pull
|
|
|
|
Publish GitHub:
|
|
stage: Build Release
|
|
needs:
|
|
- job: Sign Java Publication
|
|
optional: false
|
|
artifacts: true
|
|
before_script:
|
|
- chmod +x gradlew
|
|
script:
|
|
- echo "**** Publishing Maven Artifacts to GitHub ****"
|
|
- "./gradlew publishMavenJavaPublicationToGitHubPackagesRepository -Pversion=${CI_COMMIT_TAG} -x test --info --stacktrace"
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+-beta\.\d+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
cache:
|
|
- key:
|
|
files:
|
|
- build.gradle
|
|
- gradle/gradle-wrapper.properties
|
|
paths:
|
|
- .gradle
|
|
policy: pull
|
|
|
|
Publish GitLab:
|
|
stage: Build Release
|
|
needs:
|
|
- job: Sign Java Publication
|
|
optional: false
|
|
artifacts: true
|
|
before_script:
|
|
- chmod +x gradlew
|
|
script:
|
|
- echo "**** Publishing Maven Artifacts to GitLab ****"
|
|
- "./gradlew publishMavenJavaPublicationToMaven2Repository -Pversion=${CI_COMMIT_TAG} -x test --info --stacktrace"
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+-beta\.\d+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
cache:
|
|
- key:
|
|
files:
|
|
- build.gradle
|
|
- gradle/gradle-wrapper.properties
|
|
paths:
|
|
- .gradle
|
|
policy: pull
|
|
|
|
Publish GitGriefed:
|
|
stage: Build Release
|
|
needs:
|
|
- job: Sign Java Publication
|
|
optional: false
|
|
artifacts: true
|
|
before_script:
|
|
- chmod +x gradlew
|
|
script:
|
|
- echo "**** Publishing Maven Artifacts GitGriefed ****"
|
|
- "./gradlew publishMavenJavaPublicationToMavenRepository -Pversion=${CI_COMMIT_TAG} -x test --info --stacktrace"
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+-beta\.\d+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
cache:
|
|
- key:
|
|
files:
|
|
- build.gradle
|
|
- gradle/gradle-wrapper.properties
|
|
paths:
|
|
- .gradle
|
|
policy: pull
|
|
|
|
Publish OSSRH:
|
|
stage: Build Release
|
|
needs:
|
|
- job: Sign Java Publication
|
|
optional: false
|
|
artifacts: true
|
|
before_script:
|
|
- chmod +x gradlew
|
|
script:
|
|
- echo "**** Publishing Maven Artifacts to OSSRH ****"
|
|
- "./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository -Pversion=${CI_COMMIT_TAG} -x test --info --stacktrace"
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+-beta\.\d+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+$/ && $CI_SERVER_HOST == "git.griefed.de"'
|
|
cache:
|
|
- key:
|
|
files:
|
|
- build.gradle
|
|
- gradle/gradle-wrapper.properties
|
|
paths:
|
|
- .gradle
|
|
policy: pull
|
|
|
|
#Inform About Release:
|
|
# stage: Build Release
|
|
# image: docker.griefed.dev/griefed/gitlab-ci-cd:2.0.9
|
|
# needs:
|
|
# - job: Build Release
|
|
# artifacts: false
|
|
# script:
|
|
# - /discord.sh
|
|
# --webhook-url="$WEBHOOK_URL"
|
|
# --username "$CI_PROJECT_TITLE"
|
|
# --avatar "https://i.griefed.de/images/2020/11/18/Prosper_Docker_300x300.png"
|
|
# --text "There's been a new release for ${CI_PROJECT_TITLE}. The new version is ${CI_COMMIT_TAG} and is available at <${CI_PROJECT_URL}/-/releases/${CI_COMMIT_TAG}>"
|
|
# --title "New ${CI_PROJECT_TITLE} Release"
|
|
# --description "There's been a new release for ${CI_PROJECT_TITLE}. The new version is ${CI_COMMIT_TAG} and is available at ${CI_PROJECT_URL}/-/releases/${CI_COMMIT_TAG}"
|
|
# --color "0xC0FFEE"
|
|
# --url "${CI_PROJECT_URL}/-/releases/${CI_COMMIT_TAG}"
|
|
# --author "Griefed"
|
|
# --author-url "https://${CI_SERVER_HOST}/Griefed"
|
|
# --author-icon "https://i.griefed.de/images/2022/01/21/sam_1500x1500.th.jpg"
|
|
# --thumbnail "https://i.griefed.de/images/2020/11/18/Prosper_Docker_300x300.th.png"
|
|
# --field "Author;[Griefed](https://${CI_SERVER_HOST}/Griefed)"
|
|
# --field "Platform;[${CI_SERVER_HOST}](https://${CI_SERVER_HOST})"
|
|
# --footer "Released at $CI_JOB_STARTED_AT"
|
|
# --footer-icon "https://i.griefed.de/images/2022/01/21/start_generation.png"
|
|
# rules:
|
|
# - if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+-(alpha|beta)\.\d+$/'
|
|
# - if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+$/'
|
|
|
|
release_job:
|
|
stage: Release
|
|
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG && $CI_SERVER_HOST == "gitlab.com"'
|
|
script:
|
|
- echo "Running the release job to mirror release generation from parent repository."
|
|
release:
|
|
tag_name: $CI_COMMIT_TAG
|
|
name: 'Release $CI_COMMIT_TAG'
|
|
description: './CHANGELOG.md'
|
|
|
|
pages:
|
|
stage: Documentation
|
|
before_script:
|
|
- which java
|
|
- chmod +x gradlew
|
|
- "./gradlew clean"
|
|
script:
|
|
- "./gradlew javaDoc --info -x test"
|
|
- cp -Rf build/docs/javadoc public
|
|
- LC_COLLATE=C ls -ahl --group-directories-first --color=auto public
|
|
only:
|
|
- main
|
|
artifacts:
|
|
paths:
|
|
- public
|
|
expire_in: 1 week
|