Skip to content
Snippets Groups Projects
.gitlab-ci.yml 3.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • Stefan E. Funk's avatar
    Stefan E. Funk committed
    ###
    # PREPARATIONS
    ###
    
    # Some variables
    # TODO: Apply also as a template!
    
    variables:
    
      # Maven Settings
    
      MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
      MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version"
    
      # Maven deployment settings for Nexus, please use env vars in Settings -> CI/CD -> Variables.
    
      MAVEN_SETTINGS_PATH: ".m2/settings.xml"
      MAVEN_DEPLOY_OPTS: "--settings=$MAVEN_SETTINGS_PATH"
    
      # Semantic versioning commit and push vars (the TOKEN name and user)
      GIT_AUTHOR_EMAIL: ${GL_USER}@noreply.gitlab.gwdg.de
      GIT_AUTHOR_NAME: ${GL_USER}
      GIT_COMMITTER_EMAIL: ${GL_USER}@noreply.gitlab.gwdg.de
      GIT_COMMITTER_NAME: ${GL_USER}
    
    Stefan E. Funk's avatar
    Stefan E. Funk committed
    # Include Java settings from Gitlab templates repo.
    
    Stefan E. Funk's avatar
    Stefan E. Funk committed
    include:
    
    Stefan E. Funk's avatar
    Stefan E. Funk committed
      - project: 'dariah-de/gitlab-templates'
        ref: 'main'
        file: '/templates/.java.gitlab-ci.yml'
    
        file: '/templates/SBOM-Upload.gitlab-ci.yml'
    
    Stefan E. Funk's avatar
    Stefan E. Funk committed
    # Stages...
    
    stages:
    
      - prepare
      - test
      - build
      - deploy
    
    
    # Cache downloaded dependencies and plugins between builds.
    # To keep cache across branches add 'key: "$CI_JOB_NAME"'
    cache:
      key: $CI_JOB_NAME
      paths:
        - .m2/repository
    
    
    Stefan E. Funk's avatar
    Stefan E. Funk committed
    ###
    # JOBS
    ###
    
    
    # Get the project version from main POM file and store it to artifact.
    
    get-pom-version:
      stage: prepare
    
      only:
        - develop
    
    Stefan E. Funk's avatar
    Stefan E. Funk committed
      extends:
    
        - .get-pom-version-to-env
    
    # Semantic versioning: Update POM and CHANGELOG RELEASE files, TAG a new RELEASE version!
    prepare-release:
      stage: prepare
      rules:
      # Only run if branch "main" AND commit title IS NOT "1.2.3" (main commit with tag) AND DOES NOT START WITH "Prepare next development iteration" (main commit with new version)
        - if: $CI_COMMIT_REF_NAME == "main" && $CI_COMMIT_TITLE !~ /^[\d\.]+$/ && $CI_COMMIT_TITLE !~ /^Prepare next development iteration/
      image: maven:3.8.3-jdk-8
      extends:
    
        - .prepare-semantic-release
    
    
    # Build, validate, and package all the feature branches
    validate-java:
      stage: test
      except:
        - main
        - develop
        - tags
      image: maven:3.8.3-jdk-8
      script:
        - mvn $MAVEN_OPTS $MAVEN_CLI_OPTS $MAVEN_DEPLOY_OPTS -U clean validate package -Pdhrep.deb
      artifacts:
        reports:
          # Declare the JUnit reports (recursive pattern for multi-module projects)
          junit:
            - "**/target/*-reports/TEST-*.xml"
    
    
    # Build and deploy all the JARs to GWDG Nexus, and build all the DEBs and store DEBs to artifacts.
    
    # NOTE: "deploy" also triggers BOM creation!
    build-and-deploy-jars:
      stage: build
    
      image: maven:3.8.3-jdk-8
      only:
        - develop
    
      script:
    
        - mvn $MAVEN_OPTS $MAVEN_CLI_OPTS $MAVEN_DEPLOY_OPTS -U clean deploy -Pdhrep.deb -Psbom
    
        - cp target/bom.json .
    
      artifacts:
        paths:
    
          - ./oaipmh-webapp/target/*.deb
    
          - ./bom.json
        reports:
          # Declare the JUnit reports (recursive pattern for multi-module projects)
          junit:
            - "**/target/*-reports/TEST-*.xml"
    
    # Deploy DEB files to APTLY SNAPSHOT repository.
    deploy-snapshot-deb:
      stage: deploy
    
      only:
        - develop
      variables:
        PNAME: 'oaipmh-webapp'
        PPATH: '${PNAME}/target'
    
        PKEY: 'SNAPSHOT'
    
        APTLY_TARGET: 'indy-snapshots'
    
    Stefan E. Funk's avatar
    Stefan E. Funk committed
      extends:
        - .deploy-deb
    
    # Deploy DEB files to APTLY RELEASE repository.
    deploy-release-deb:
      stage: deploy
    
      only:
    
      variables:
        PNAME: 'oaipmh-webapp'
        PPATH: '${PNAME}/target'
    
        PKEY: '${PVERSION}'
    
        APTLY_TARGET: 'indy-releases'
    
    Stefan E. Funk's avatar
    Stefan E. Funk committed
      extends:
        - .deploy-deb