| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 1 | # 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 | |
| 4 | stages: |
| Marc Kupietz | 717ded6 | 2025-09-19 12:20:42 +0200 | [diff] [blame] | 5 | - test-and-build |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 6 | - build |
| 7 | - deploy |
| 8 | |
| 9 | variables: |
| 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 |
| 15 | cache: |
| 16 | paths: |
| 17 | - .m2/repository/ |
| 18 | |
| Marc Kupietz | 717ded6 | 2025-09-19 12:20:42 +0200 | [diff] [blame] | 19 | # Test and build stage - runs on all pushes |
| 20 | test-and-build: |
| 21 | stage: test-and-build |
| Marc Kupietz | 95968cc | 2026-02-14 17:00:47 +0100 | [diff] [blame] | 22 | image: maven:3-eclipse-temurin-21 |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 23 | before_script: |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 24 | - export MAVEN_OPTS="$MAVEN_OPTS" |
| 25 | script: |
| Marc Kupietz | 717ded6 | 2025-09-19 12:20:42 +0200 | [diff] [blame] | 26 | - mvn $MAVEN_CLI_OPTS clean test package |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 27 | artifacts: |
| 28 | reports: |
| 29 | junit: |
| 30 | - target/surefire-reports/TEST-*.xml |
| 31 | paths: |
| 32 | - target/surefire-reports/ |
| Marc Kupietz | 717ded6 | 2025-09-19 12:20:42 +0200 | [diff] [blame] | 33 | - target/*.jar |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 34 | expire_in: 1 week |
| 35 | only: |
| 36 | - pushes |
| 37 | - merge_requests |
| 38 | |
| Marc Kupietz | 36163a1 | 2025-10-20 15:29:49 +0200 | [diff] [blame] | 39 | # Build Docker image stage - runs automatically for tags and is manually triggerable otherwise |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 40 | build-docker: |
| 41 | stage: build |
| Marc Kupietz | 713484b | 2026-02-12 11:06:27 +0100 | [diff] [blame] | 42 | image: docker:latest |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 43 | services: |
| Marc Kupietz | 713484b | 2026-02-12 11:06:27 +0100 | [diff] [blame] | 44 | - docker:dind |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 45 | before_script: |
| 46 | - apk add --no-cache xz |
| 47 | script: |
| Marc Kupietz | 36163a1 | 2025-10-20 15:29:49 +0200 | [diff] [blame] | 48 | - | |
| 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 Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 63 | artifacts: |
| Marc Kupietz | 36163a1 | 2025-10-20 15:29:49 +0200 | [diff] [blame] | 64 | name: "kalamar-plugin-export-$BUILD_SUFFIX.tar.xz" |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 65 | paths: |
| 66 | - "*.tar.xz" |
| 67 | expire_in: 30 days |
| Marc Kupietz | 36163a1 | 2025-10-20 15:29:49 +0200 | [diff] [blame] | 68 | rules: |
| 69 | - if: "$CI_COMMIT_TAG" |
| 70 | when: on_success |
| 71 | - when: manual |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 72 | allow_failure: false |
| 73 | |
| 74 | # Security scan stage (optional) |
| 75 | security-scan: |
| 76 | stage: build |
| Marc Kupietz | 95968cc | 2026-02-14 17:00:47 +0100 | [diff] [blame] | 77 | image: maven:3-eclipse-temurin-21 |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 78 | before_script: |
| Marc Kupietz | 95968cc | 2026-02-14 17:00:47 +0100 | [diff] [blame] | 79 | - export MAVEN_OPTS="$MAVEN_OPTS" |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 80 | script: |
| 81 | - mvn $MAVEN_CLI_OPTS clean compile |
| 82 | allow_failure: true |
| 83 | when: manual |
| 84 | |
| Marc Kupietz | fee5adc | 2025-11-07 10:42:08 +0100 | [diff] [blame] | 85 | # Deploy stage - push Docker image to Docker Hub |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 86 | deploy: |
| 87 | stage: deploy |
| Marc Kupietz | fee5adc | 2025-11-07 10:42:08 +0100 | [diff] [blame] | 88 | image: docker:latest |
| 89 | services: |
| 90 | - docker:dind |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 91 | before_script: |
| Marc Kupietz | fee5adc | 2025-11-07 10:42:08 +0100 | [diff] [blame] | 92 | - echo "$DOCKERHUB_TOKEN" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 93 | script: |
| Marc Kupietz | fee5adc | 2025-11-07 10:42:08 +0100 | [diff] [blame] | 94 | - | |
| 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 Kupietz | 2908556 | 2026-02-12 12:08:56 +0100 | [diff] [blame] | 103 | - if: '$CI_COMMIT_TAG =~ /^(v|[0-9])/' |
| Marc Kupietz | fee5adc | 2025-11-07 10:42:08 +0100 | [diff] [blame] | 104 | when: manual |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 105 | allow_failure: false |
| Marc Kupietz | fee5adc | 2025-11-07 10:42:08 +0100 | [diff] [blame] | 106 | dependencies: |
| 107 | - build-docker |