blob: c808099d9938031a9e4364b1ae160ac66ca7f8e6 [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
43 image: docker:24.0.5
44 services:
45 - docker:24.0.5-dind
46 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
86# Deploy stage (placeholder for actual deployment)
87deploy:
88 stage: deploy
89 image: alpine:latest
90 before_script:
91 - apk add --no-cache curl
92 script:
93 - curl --version
94 only:
95 - tags
96 when: manual
97 allow_failure: false