blob: d7c99c360b62e3267685695bc8617347d5543938 [file] [log] [blame]
Marc Kupietzeed972d2025-09-19 08:52:24 +02001# GitLab CI/CD Pipeline for Kalamar-Plugin-Export
2# This pipeline runs tests on pushes and builds Docker containers on tag pushes and manual triggers
3
4stages:
Marc Kupietz717ded62025-09-19 12:20:42 +02005 - test-and-build
Marc Kupietzeed972d2025-09-19 08:52:24 +02006 - build
7 - deploy
8
9variables:
10 MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
11 MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version"
12 DOCKER_IMAGE_NAME: "korap/kalamar-plugin-export"
13
14# Cache Maven dependencies
15cache:
16 paths:
17 - .m2/repository/
18
Marc Kupietz717ded62025-09-19 12:20:42 +020019# Test and build stage - runs on all pushes
20test-and-build:
21 stage: test-and-build
Marc Kupietz95968cc2026-02-14 17:00:47 +010022 image: maven:3-eclipse-temurin-21
Marc Kupietzeed972d2025-09-19 08:52:24 +020023 before_script:
Marc Kupietzeed972d2025-09-19 08:52:24 +020024 - export MAVEN_OPTS="$MAVEN_OPTS"
25 script:
Marc Kupietz717ded62025-09-19 12:20:42 +020026 - mvn $MAVEN_CLI_OPTS clean test package
Marc Kupietzeed972d2025-09-19 08:52:24 +020027 artifacts:
28 reports:
29 junit:
30 - target/surefire-reports/TEST-*.xml
31 paths:
32 - target/surefire-reports/
Marc Kupietz717ded62025-09-19 12:20:42 +020033 - target/*.jar
Marc Kupietzeed972d2025-09-19 08:52:24 +020034 expire_in: 1 week
35 only:
36 - pushes
37 - merge_requests
38
Marc Kupietz36163a12025-10-20 15:29:49 +020039# Build Docker image stage - runs automatically for tags and is manually triggerable otherwise
Marc Kupietzeed972d2025-09-19 08:52:24 +020040build-docker:
41 stage: build
Marc Kupietz713484b2026-02-12 11:06:27 +010042 image: docker:latest
Marc Kupietzeed972d2025-09-19 08:52:24 +020043 services:
Marc Kupietz713484b2026-02-12 11:06:27 +010044 - docker:dind
Marc Kupietzeed972d2025-09-19 08:52:24 +020045 before_script:
46 - apk add --no-cache xz
47 script:
Marc Kupietz36163a12025-10-20 15:29:49 +020048 - |
49 if [ -n "$CI_COMMIT_TAG" ]; then
50 export BUILD_SUFFIX="$CI_COMMIT_TAG"
51 export VERSIONED_IMAGE_NAME="$DOCKER_IMAGE_NAME-$BUILD_SUFFIX"
52 export ARTIFACT_NAME="kalamar-plugin-export-$BUILD_SUFFIX.tar.xz"
53 docker build -t "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" -t "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" -t "$DOCKER_IMAGE_NAME:latest" .
54 docker save "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" "$DOCKER_IMAGE_NAME:latest" | xz -c > "$ARTIFACT_NAME"
55 else
56 export BUILD_SUFFIX="$CI_COMMIT_SHORT_SHA"
57 export VERSIONED_IMAGE_NAME="$DOCKER_IMAGE_NAME-$BUILD_SUFFIX"
58 export ARTIFACT_NAME="kalamar-plugin-export-$BUILD_SUFFIX.tar.xz"
59 docker build -t "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" -t "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" .
60 docker save "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" | xz -c > "$ARTIFACT_NAME"
61 fi
62 - ls -lh "$ARTIFACT_NAME"
Marc Kupietzeed972d2025-09-19 08:52:24 +020063 artifacts:
Marc Kupietz36163a12025-10-20 15:29:49 +020064 name: "kalamar-plugin-export-$BUILD_SUFFIX.tar.xz"
Marc Kupietzeed972d2025-09-19 08:52:24 +020065 paths:
66 - "*.tar.xz"
67 expire_in: 30 days
Marc Kupietz36163a12025-10-20 15:29:49 +020068 rules:
69 - if: "$CI_COMMIT_TAG"
70 when: on_success
71 - when: manual
Marc Kupietzeed972d2025-09-19 08:52:24 +020072 allow_failure: false
73
74# Security scan stage (optional)
75security-scan:
76 stage: build
Marc Kupietz95968cc2026-02-14 17:00:47 +010077 image: maven:3-eclipse-temurin-21
Marc Kupietzeed972d2025-09-19 08:52:24 +020078 before_script:
Marc Kupietz95968cc2026-02-14 17:00:47 +010079 - export MAVEN_OPTS="$MAVEN_OPTS"
Marc Kupietzeed972d2025-09-19 08:52:24 +020080 script:
81 - mvn $MAVEN_CLI_OPTS clean compile
82 allow_failure: true
83 when: manual
84
Marc Kupietzfee5adc2025-11-07 10:42:08 +010085# Deploy stage - push Docker image to Docker Hub
Marc Kupietzeed972d2025-09-19 08:52:24 +020086deploy:
87 stage: deploy
Marc Kupietzfee5adc2025-11-07 10:42:08 +010088 image: docker:latest
89 services:
90 - docker:dind
Marc Kupietzeed972d2025-09-19 08:52:24 +020091 before_script:
Marc Kupietzfee5adc2025-11-07 10:42:08 +010092 - echo "$DOCKERHUB_TOKEN" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin
Marc Kupietzeed972d2025-09-19 08:52:24 +020093 script:
Marc Kupietzfee5adc2025-11-07 10:42:08 +010094 - |
95 # Load the built image from artifact
96 docker load -i "kalamar-plugin-export-$CI_COMMIT_TAG.tar.xz"
97 # Push the version-tagged image
98 docker push "$DOCKER_IMAGE_NAME:$CI_COMMIT_TAG"
99 # Tag and push the latest tag
100 docker tag "$DOCKER_IMAGE_NAME:$CI_COMMIT_TAG" "$DOCKER_IMAGE_NAME:latest"
101 docker push "$DOCKER_IMAGE_NAME:latest"
102 rules:
Marc Kupietz29085562026-02-12 12:08:56 +0100103 - if: '$CI_COMMIT_TAG =~ /^(v|[0-9])/'
Marc Kupietzfee5adc2025-11-07 10:42:08 +0100104 when: manual
Marc Kupietzeed972d2025-09-19 08:52:24 +0200105 allow_failure: false
Marc Kupietzfee5adc2025-11-07 10:42:08 +0100106 dependencies:
107 - build-docker