image: maven:3.6-jdk-8

#cache:
#    paths:
#    - $HOME/.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: "-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: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true -Dmaven.repo.local=/tmp/.m2/repository"

  SKIP_DEPENDENCIES: "false"
  AUTO_DEPLOY_TO_PRODUCTION: "false"

stages:
- build_sde
- build_est
- test
- deploy
#- documentation
#- release

sde_build_test_job:
    only:
      refs:
      - master
      variables:
      - $SKIP_DEPENDENCIES == "false"

    
    stage: build_sde
    environment: staging
    script:
    - "curl -X POST -F token=d1ce830095dc9201851e948eb160f4 -F ref=master --form variables[SKIP_DEPENDENCIES]=true https://gitlab.fbk.eu/api/v4/projects/393/trigger/pipeline"

est_build_test_job:
    only:
      refs:
      - master
      variables:
      - $SKIP_DEPENDENCIES == "false"
    
    stage: build_est
    environment: staging
    script:
    - "curl -X POST -F token=951497a03a4073902aa28ab8d9c2d3 -F ref=master --form variables[SKIP_DEPENDENCIES]=true https://gitlab.fbk.eu/api/v4/projects/1159/trigger/pipeline"

maven_build_and_test:
    only:
      refs:
      - master
  
    stage: test
    environment: staging
    script:
    - "export DISPLAY=:0.0; cd org.polarsys.chess.parent; mvn $MAVEN_CLI_OPTS -P Neon-Java8,DevelopmentUpdateSite clean install"
  
.deploy_to_production_update_site: &deploy_to_production_update_site
    dependencies:
    - maven_build_and_test
    variables:
       GIT_STRATEGY: none
       UPDATE_SITE_MOUNT_DIR: "/tmp/www_ci"
       UPDATE_SITE_PROD_TARGET_DIR:  "html/tools/aida_chess"
       REPOSITORY_TO_COPY: "org.polarsys.chess.parent/releng/eu.fbk.tools.aida.chess.repository/target/repository"
       
    stage: deploy
    environment: staging
    script:
    - echo "Deploy to production update site"
    - mkdir -p $UPDATE_SITE_MOUNT_DIR
    - sshfs -o nonempty -o umask=0777 es@es-static.fbk.eu:/ $UPDATE_SITE_MOUNT_DIR
    - mkdir -p $UPDATE_SITE_MOUNT_DIR/$UPDATE_SITE_PROD_TARGET_DIR
    - cp -r ${REPOSITORY_TO_COPY}/* $UPDATE_SITE_MOUNT_DIR/$UPDATE_SITE_PROD_TARGET_DIR
    - chmod -R 0777 $UPDATE_SITE_MOUNT_DIR/$UPDATE_SITE_PROD_TARGET_DIR
    - fusermount -uz $UPDATE_SITE_MOUNT_DIR
    only:
      refs:
      - master
    
automatic_deploy_to_production_update_site:
    << : *deploy_to_production_update_site
    only:
      variables:
      - $AUTO_DEPLOY_TO_PRODUCTION == "true"
    
manual_to_production_update_site:
    << : *deploy_to_production_update_site
    when: manual
    only:
      variables:
      - $AUTO_DEPLOY_TO_PRODUCTION == "false"
    