stages:
  - test
  - build
  - docu

.before_script_template: &before_script_template
  before_script:
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_interfaces
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_hardware
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_controller
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_ddetection
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_trajectory
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_reconstruction
    - apt-get update && apt-get install -y wget python3-pip
    - rosdep install --from-paths . -y --ignore-src
    - colcon build --merge-install

rq-pytests:
  stage: test
  image: ros:humble
  tags: 
    - ros2
  cache:
    key: cache-$CI_COMMIT_REF_SLUG
    paths:
      - install
  <<: *before_script_template
  script:
    - source ./install/setup.bash
    - pip3 install pytest pytest-cov netCDF4 ros2-numpy Pillow pyometiff scipy
    - python3 -m pytest ./rq_controller/test/ --cov=rq_controller --cov-report term --cov-report xml:controller_coverage.xml --junitxml=controller_report.xml --cov-report html:controller_cov_html
  coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'

  artifacts:
    when: always
    paths:
      - controller_report.xml
      - controller_cov_html
    reports:
      junit: controller_report.xml
      coverage_report:
        coverage_format: cobertura
        path: controller_coverage.xml

rq-pytests-communication:
  stage: test
  image: ros:humble
  tags: 
    - ros2
  cache:
    key: cache-$CI_COMMIT_REF_SLUG
    paths:
      - install
  dependencies:
    - rq-pytests
  script:
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_workflow
    - colcon build --merge-install
    - source ./install/setup.bash
    - apt-get update && apt-get install -y python3-pip
    - pip3 install pytest pytest-cov netCDF4 ros2-numpy Pillow pyometiff scipy
    - pip3 install -r ./rq_workflow/requirements.txt
    - ros2 launch ./rq_workflow/launch/echo_launch.py &
    - python3 -m pytest ./rq_workflow/test/ --junitxml=workflow_report.xml
  artifacts:
    when: always
    paths:
      - workflow_report.xml
    reports:
        junit: workflow_report.xml

  
build-ros:
  stage: build
  image: ros:humble
  tags: 
    - ros2
  cache:
    key: cache-$CI_COMMIT_REF_SLUG
    paths:
      - install
  dependencies:
    - rq-pytests
  script:
    - source ./install/setup.bash
  artifacts:
    when: always
    paths:
      - install
    name: ubuntu_humble

build-ros-win64:
  stage: build
  image: swittl/humble_win64
  tags:
    - windows
  script:
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_interfaces
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_hardware
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_controller
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_ddetection
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_trajectory
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@mygit.th-deg.de/roboct/robo_quality/rq_reconstruction
#    - 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\Common7\\Tools\\VsDevCmd.bat'
    - C:\dev\ros2_humble\setup.ps1
    - colcon build --merge-install
  cache:
    key: "${CI_COMMIT_REF_SLUG}_windows"
    paths:
      - .cache

  artifacts:
    when: always
    paths:
      - install
    name: win64_humble


create-docu:
  stage: docu
  image: ros:humble
  tags: 
    - ros2
  cache:
    key: cache-$CI_COMMIT_REF_SLUG
    paths:
      - install
  dependencies:
    - rq-pytests
  before_script:
    - apt-get update && apt-get install -y wget python3-pip libgl1-mesa-glx 
    - pip3 install pdoc3 netCDF4 ros2-numpy Pillow pyometiff scipy open3d pathfinding3d
    - git clone https://github.com/wittlsn/aRTist-PythonLib.git -b artist_thd_wip
    - pip3 install ./aRTist-PythonLib/
  script:
    - source ./install/setup.bash
    - mkdir -p doc
    - python3 -m pdoc --html rq_controller -o=./doc/rq_controller -c show_source_code=True
    - python3 -m pdoc --html rq_hardware -o=./doc/rq_hardware -c show_source_code=True
  artifacts:
    when: always
    paths:
      - doc
    name: rq_docstrings
