blob: 641fb855606c7cfc98d1dc559710f222ff11e46d [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 Kupietzeed972d2025-09-19 08:52:24 +020022 image: eclipse-temurin:22-jdk-alpine
23 before_script:
24 - apk add --no-cache maven
25 - export MAVEN_OPTS="$MAVEN_OPTS"
26 script:
Marc Kupietz717ded62025-09-19 12:20:42 +020027 - mvn $MAVEN_CLI_OPTS clean test package
Marc Kupietzeed972d2025-09-19 08:52:24 +020028 artifacts:
29 reports:
30 junit:
31 - target/surefire-reports/TEST-*.xml
32 paths:
33 - target/surefire-reports/
Marc Kupietz717ded62025-09-19 12:20:42 +020034 - target/*.jar
Marc Kupietzeed972d2025-09-19 08:52:24 +020035 expire_in: 1 week
36 only:
37 - pushes
38 - merge_requests
39
Marc Kupietz36163a12025-10-20 15:29:49 +020040# Build Docker image stage - runs automatically for tags and is manually triggerable otherwise
Marc Kupietzeed972d2025-09-19 08:52:24 +020041build-docker:
42 stage: build
Marc Kupietz713484b2026-02-12 11:06:27 +010043 image: docker:latest
Marc Kupietzeed972d2025-09-19 08:52:24 +020044 services:
Marc Kupietz713484b2026-02-12 11:06:27 +010045 - docker:dind
Marc Kupietzeed972d2025-09-19 08:52:24 +020046 before_script:
47 - apk add --no-cache xz
48 script:
Marc Kupietz36163a12025-10-20 15:29:49 +020049 - |
50 if [ -n "$CI_COMMIT_TAG" ]; then
51 export BUILD_SUFFIX="$CI_COMMIT_TAG"
52 export VERSIONED_IMAGE_NAME="$DOCKER_IMAGE_NAME-$BUILD_SUFFIX"
53 export ARTIFACT_NAME="kalamar-plugin-export-$BUILD_SUFFIX.tar.xz"
54 docker build -t "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" -t "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" -t "$DOCKER_IMAGE_NAME:latest" .
55 docker save "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" "$DOCKER_IMAGE_NAME:latest" | xz -c > "$ARTIFACT_NAME"
56 else
57 export BUILD_SUFFIX="$CI_COMMIT_SHORT_SHA"
58 export VERSIONED_IMAGE_NAME="$DOCKER_IMAGE_NAME-$BUILD_SUFFIX"
59 export ARTIFACT_NAME="kalamar-plugin-export-$BUILD_SUFFIX.tar.xz"
60 docker build -t "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" -t "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" .
61 docker save "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" | xz -c > "$ARTIFACT_NAME"
62 fi
63 - ls -lh "$ARTIFACT_NAME"
Marc Kupietzeed972d2025-09-19 08:52:24 +020064 artifacts:
Marc Kupietz36163a12025-10-20 15:29:49 +020065 name: "kalamar-plugin-export-$BUILD_SUFFIX.tar.xz"
Marc Kupietzeed972d2025-09-19 08:52:24 +020066 paths:
67 - "*.tar.xz"
68 expire_in: 30 days
Marc Kupietz36163a12025-10-20 15:29:49 +020069 rules:
70 - if: "$CI_COMMIT_TAG"
71 when: on_success
72 - when: manual
Marc Kupietzeed972d2025-09-19 08:52:24 +020073 allow_failure: false
74
75# Security scan stage (optional)
76security-scan:
77 stage: build
78 image: eclipse-temurin:22-jdk-alpine
79 before_script:
80 - apk add --no-cache maven
81 script:
82 - mvn $MAVEN_CLI_OPTS clean compile
83 allow_failure: true
84 when: manual
85
Marc Kupietzfee5adc2025-11-07 10:42:08 +010086# Deploy stage - push Docker image to Docker Hub
Marc Kupietzeed972d2025-09-19 08:52:24 +020087deploy:
88 stage: deploy
Marc Kupietzfee5adc2025-11-07 10:42:08 +010089 image: docker:latest
90 services:
91 - docker:dind
Marc Kupietzeed972d2025-09-19 08:52:24 +020092 before_script:
Marc Kupietzfee5adc2025-11-07 10:42:08 +010093 - echo "$DOCKERHUB_TOKEN" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin
Marc Kupietzeed972d2025-09-19 08:52:24 +020094 script:
Marc Kupietzfee5adc2025-11-07 10:42:08 +010095 - |
96 # Load the built image from artifact
97 docker load -i "kalamar-plugin-export-$CI_COMMIT_TAG.tar.xz"
98 # Push the version-tagged image
99 docker push "$DOCKER_IMAGE_NAME:$CI_COMMIT_TAG"
100 # Tag and push the latest tag
101 docker tag "$DOCKER_IMAGE_NAME:$CI_COMMIT_TAG" "$DOCKER_IMAGE_NAME:latest"
102 docker push "$DOCKER_IMAGE_NAME:latest"
103 rules:
Marc Kupietz29085562026-02-12 12:08:56 +0100104 - if: '$CI_COMMIT_TAG =~ /^(v|[0-9])/'
Marc Kupietzfee5adc2025-11-07 10:42:08 +0100105 when: manual
Marc Kupietzeed972d2025-09-19 08:52:24 +0200106 allow_failure: false
Marc Kupietzfee5adc2025-11-07 10:42:08 +0100107 dependencies:
108 - build-docker