blob: c808099d9938031a9e4364b1ae160ac66ca7f8e6 [file] [log] [blame]
# GitLab CI/CD Pipeline for Kalamar-Plugin-Export
# This pipeline runs tests on pushes and builds Docker containers on tag pushes and manual triggers
stages:
- test-and-build
- build
- deploy
variables:
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version"
DOCKER_IMAGE_NAME: "korap/kalamar-plugin-export"
# Cache Maven dependencies
cache:
paths:
- .m2/repository/
# Test and build stage - runs on all pushes
test-and-build:
stage: test-and-build
image: eclipse-temurin:22-jdk-alpine
before_script:
- apk add --no-cache maven
- export MAVEN_OPTS="$MAVEN_OPTS"
script:
- mvn $MAVEN_CLI_OPTS clean test package
artifacts:
reports:
junit:
- target/surefire-reports/TEST-*.xml
paths:
- target/surefire-reports/
- target/*.jar
expire_in: 1 week
only:
- pushes
- merge_requests
# Build Docker image stage - runs automatically for tags and is manually triggerable otherwise
build-docker:
stage: build
image: docker:24.0.5
services:
- docker:24.0.5-dind
before_script:
- apk add --no-cache xz
script:
- |
if [ -n "$CI_COMMIT_TAG" ]; then
export BUILD_SUFFIX="$CI_COMMIT_TAG"
export VERSIONED_IMAGE_NAME="$DOCKER_IMAGE_NAME-$BUILD_SUFFIX"
export ARTIFACT_NAME="kalamar-plugin-export-$BUILD_SUFFIX.tar.xz"
docker build -t "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" -t "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" -t "$DOCKER_IMAGE_NAME:latest" .
docker save "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" "$DOCKER_IMAGE_NAME:latest" | xz -c > "$ARTIFACT_NAME"
else
export BUILD_SUFFIX="$CI_COMMIT_SHORT_SHA"
export VERSIONED_IMAGE_NAME="$DOCKER_IMAGE_NAME-$BUILD_SUFFIX"
export ARTIFACT_NAME="kalamar-plugin-export-$BUILD_SUFFIX.tar.xz"
docker build -t "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" -t "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" .
docker save "$DOCKER_IMAGE_NAME:$BUILD_SUFFIX" "$VERSIONED_IMAGE_NAME:$BUILD_SUFFIX" | xz -c > "$ARTIFACT_NAME"
fi
- ls -lh "$ARTIFACT_NAME"
artifacts:
name: "kalamar-plugin-export-$BUILD_SUFFIX.tar.xz"
paths:
- "*.tar.xz"
expire_in: 30 days
rules:
- if: "$CI_COMMIT_TAG"
when: on_success
- when: manual
allow_failure: false
# Security scan stage (optional)
security-scan:
stage: build
image: eclipse-temurin:22-jdk-alpine
before_script:
- apk add --no-cache maven
script:
- mvn $MAVEN_CLI_OPTS clean compile
allow_failure: true
when: manual
# Deploy stage (placeholder for actual deployment)
deploy:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache curl
script:
- curl --version
only:
- tags
when: manual
allow_failure: false