| 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 | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 22 | image: eclipse-temurin:22-jdk-alpine |
| 23 | before_script: |
| 24 | - apk add --no-cache maven |
| 25 | - export MAVEN_OPTS="$MAVEN_OPTS" |
| 26 | script: |
| Marc Kupietz | 717ded6 | 2025-09-19 12:20:42 +0200 | [diff] [blame] | 27 | - mvn $MAVEN_CLI_OPTS clean test package |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 28 | artifacts: |
| 29 | reports: |
| 30 | junit: |
| 31 | - target/surefire-reports/TEST-*.xml |
| 32 | paths: |
| 33 | - target/surefire-reports/ |
| Marc Kupietz | 717ded6 | 2025-09-19 12:20:42 +0200 | [diff] [blame] | 34 | - target/*.jar |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 35 | expire_in: 1 week |
| 36 | only: |
| 37 | - pushes |
| 38 | - merge_requests |
| 39 | |
| Marc Kupietz | 36163a1 | 2025-10-20 15:29:49 +0200 | [diff] [blame] | 40 | # 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] | 41 | build-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 Kupietz | 36163a1 | 2025-10-20 15:29:49 +0200 | [diff] [blame] | 49 | - | |
| 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 Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 64 | artifacts: |
| Marc Kupietz | 36163a1 | 2025-10-20 15:29:49 +0200 | [diff] [blame] | 65 | name: "kalamar-plugin-export-$BUILD_SUFFIX.tar.xz" |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 66 | paths: |
| 67 | - "*.tar.xz" |
| 68 | expire_in: 30 days |
| Marc Kupietz | 36163a1 | 2025-10-20 15:29:49 +0200 | [diff] [blame] | 69 | rules: |
| 70 | - if: "$CI_COMMIT_TAG" |
| 71 | when: on_success |
| 72 | - when: manual |
| Marc Kupietz | eed972d | 2025-09-19 08:52:24 +0200 | [diff] [blame] | 73 | allow_failure: false |
| 74 | |
| 75 | # Security scan stage (optional) |
| 76 | security-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) |
| 87 | deploy: |
| 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 |