stages:
  - verify
  - deploy

default:
  # Default image
  image: registry.orekit.org/orekit/ci-utils/maven:3.9.6-eclipse-temurin-11

  # Cache downloaded dependencies and plugins between builds.
  # To keep cache across branches add 'key: "$CI_JOB_REF_NAME"'
  cache:
    paths:
      - .m2/repository

variables:
  # This will supress any download for dependencies and plugins or upload messages which would clutter the console log.
  # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  # As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used
  # when running from the command line.
  # `installAtEnd` and `deployAtEnd` are only effective with recent version of the corresponding plugins.
  MAVEN_CLI_OPTS: "-s .CI/maven-settings.xml --batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  SONAR_PROJECT_KEY: "${CI_PROJECT_NAMESPACE}:${CI_PROJECT_NAME}"
  SONAR_PROJECT_NAME: "${CI_PROJECT_TITLE} (${CI_PROJECT_NAMESPACE}:${CI_PROJECT_NAME})"
  TARGET_URL_PREFIX: "cochise@ganymede.orekit.org:/var/www/mvn-sites/site-rugged"

verify:
  stage: verify
  script:
    - mvn $MAVEN_CLI_OPTS checkstyle:check verify site
    - test -z "$SONAR_TOKEN" || mvn $MAVEN_CLI_OPTS sonar:sonar
          -Dsonar.host.url=${SONAR_HOST_URL}
          -Dsonar.login=${SONAR_TOKEN}
          -Dsonar.branch.name=${CI_COMMIT_REF_NAME}
          -Dsonar.projectKey="$SONAR_PROJECT_KEY"
          -Dsonar.projectName="$SONAR_PROJECT_NAME"
          -Dsonar.qualitygate.wait=true
  artifacts:
    paths:
      - target/*.jar
      - target/site
    reports:
      junit:
        - target/surefire-reports/*.xml

verify:warning:
  stage: verify
  script:
    - echo "Please, configure SonarQube by following steps described in the contribution guide:"
    - echo "https://www.orekit.org/site-rugged-development/contributing.html"
    - exit 1
  allow_failure: true
  rules:
    - if: $SONAR_TOKEN == null

# On main branches (develop, release-*, master)
# the produced artifacts are deployed on the Nexus of the project
# (https://packages.orekit.org/)
deploy:artifacts:
  stage: deploy
  script:
    - mvn $MAVEN_CLI_OPTS javadoc:jar source:jar deploy -DskipTests=true -Pci-deploy
  artifacts:
    paths:
      - target/*.jar
  only:
    - master@orekit/rugged
    - /^release-[.0-9]+$/@orekit/rugged
    - develop@orekit/rugged

deploy:site:
  stage: deploy
  before_script:
    # Prepare the SSH environment required to push documentation onto the server
    - eval $(ssh-agent -s)
    - echo "$SSH_SECRET_KEY" | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - cp $SSH_KNOWN_HOSTS ~/.ssh/known_hosts
  script:
    - PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
    - rsync -rz --links --checksum --no-perms --chmod=u=rwX,go=rX --delete-after
            target/site/ ${TARGET_URL_PREFIX}-${PROJECT_VERSION}
  only:
    - master@orekit/rugged
    - /^release-[.0-9]+$/@orekit/rugged
    - develop@orekit/rugged