
stages:
  - build-and-test


.build-and-test:

  cache:
    # https://docs.gitlab.com/ee/ci/caching/#share-caches-across-jobs-in-different-branches
    key: one-key-to-rule-them-all
    paths:
      - .apt
      - .ccache

  before_script:
    # Apt cache configuration.
    - rm -rf /var/cache/apt/archives || true
    - rm -f /etc/apt/apt.conf.d/docker-clean  # Remove docker-clean script to avoid cache deletion.
    - mkdir .apt || true
    - ln -s "$CI_PROJECT_DIR/.apt" /var/cache/apt/archives

    # Update apt info.
    - apt-get update

    # Ccache configuration and introspection.
    - apt-get install ccache --yes
    - ccache --set-config=cache_dir="$CI_PROJECT_DIR/.ccache"
    - ccache --max-size=20G
    - ccache --show-stats

    # Ice configuration to run in Docker.
    - export ICE_DEFAULT_HOST="127.0.0.1"
    - export ICE_RUN_AS_ROOT="true"

    # Activate Axii.
    - source /axii/scripts/install_axii.sh

  script:
    # Create workspace.
    - axii workspace create ~/workspace workspace
    - axii workspace activate workspace
    - _axii_auto_env_refresh

    # Use workspace configuration from project.
    - cp "$CI_PROJECT_DIR/.gitlab/ci/armarx-workspace.json" "$ARMARX_WORKSPACE/armarx-workspace.json"
    - cat "$ARMARX_WORKSPACE/armarx-workspace.json"

    - axii workspace env
    - _axii_auto_env_refresh

    - echo "Workspace information:"
    - axii workspace list-modules
    - axii workspace list-modules --deps
    - axii workspace info

    - export PROJECT_MODULE="armarx/RobotAPI"
    - export PROJECT_PATH_IN_WORKSPACE="$armarx__RobotAPI__PATH"

    # Symlink project directory into Axii workspace.
    - mkdir -p "$(dirname $PROJECT_PATH_IN_WORKSPACE)"
    - ln -s "$CI_PROJECT_DIR" "$PROJECT_PATH_IN_WORKSPACE"

    # Fix "CMake Error in CMakeLists.txt: Imported target "VirtualRobot" includes non-existent path "/usr/lib/include"
    # (caused by at least dmp)
    - mkdir -p /usr/lib/include

    # Upgrade.
    - axii workspace system --accept-apt-install
    - axii workspace update --prefer-https
    - axii workspace upgrade -m "$PROJECT_MODULE"

    - ccache --show-stats

    # Try starting Ice.
    - armarx switch docker_test --ice-host 127.0.0.1 --ice-port 10000 --ice-default-host 127.0.0.1 --mongo-host 127.0.0.1 --mongo-port 10001
    - armarx profile
    - armarx status || true
    #- armarx start
    # armarx status
    #- armarx stop

    # Test.
    # ToDo: Add and use `axii ws test -m "$PROJECT_MODULE"`
    - cd "$PROJECT_PATH_IN_WORKSPACE/build"
    - ctest --output-on-failure --output-junit "$CI_PROJECT_DIR/report.xml" .

  artifacts:
    reports:
      junit: report.xml


build-and-test-bionic:
  stage: build-and-test
  extends: .build-and-test

  image: git.h2t.iar.kit.edu:5050/sw/armarx/meta/axii:latest-bionic


build-and-test-jammy:
  stage: build-and-test
  extends: .build-and-test

  image: git.h2t.iar.kit.edu:5050/sw/armarx/meta/axii:latest-jammy
