-
Tobias Arens authoredTobias Arens authored
.gitlab-ci.yml 7.35 KiB
#
# PeTrack - Software for tracking pedestrians movement in videos
# Copyright (C) 2023 Forschungszentrum Jülich GmbH, IAS-7
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
stages:
- build_environment
- pre-build-checks
- build
- test
- build_installer
- deploy
###############################################################################
# Linux CI
###############################################################################
# Build environment for building and testing the program. Uses the Dockerfile
# from the repository
build_container:
stage: build_environment
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/container/ubuntu/Dockerfile --destination $CI_REGISTRY_IMAGE:${CI_COMMIT_REF_SLUG}_linux
rules:
- changes:
- container/ubuntu/Dockerfile
pre-build-checks:
image: $CI_REGISTRY_IMAGE:${CI_COMMIT_REF_SLUG}_linux
stage: pre-build-checks
script:
- scripts/check-format-cpp.sh
- python3 scripts/check-license-header.py .
# Build petrack and petrack unit_tests
build_linux:
image: $CI_REGISTRY_IMAGE:${CI_COMMIT_REF_SLUG}_linux
stage: build
script:
- mkdir build
- cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_UNIT_TESTS=ON -DFAIL_ON_WARNINGS=ON -G Ninja
- cmake --build .
artifacts:
paths:
- "./build/"
expire_in: 2 hrs
# Execute unit tests
unit_test_linux:
image: $CI_REGISTRY_IMAGE:${CI_COMMIT_REF_SLUG}_linux
stage: test
script:
- cd build/tests/unit_test
- ./petrack_tests -platform offscreen -r junit -o unit_test_report.xml
artifacts:
when: always
paths:
- build/tests/unit_test/unit_test_report.xml
reports:
junit: "build/tests/unit_test/unit_test_report.xml"
needs: ["build_linux"]
# Execute regression tests
regression_test_linux:
image: $CI_REGISTRY_IMAGE:${CI_COMMIT_REF_SLUG}_linux
stage: test
script:
- cd tests/regression_test/tests
- python3 -m pytest --path=../../../build/petrack --junitxml=pytest_report.xml | tee "RegressionTestLog.txt"
artifacts:
when: on_failure
paths:
- "tests/regression_test/tests/RegressionTestLog.txt"
reports:
junit: "tests/regression_test/tests/pytest_report.xml"
needs: ["build_linux"]
###############################################################################
# Windows CI
###############################################################################
# Build petrack and petrack unit_tests
build_windows:
stage: build
tags:
- windows
script:
- mkdir -Force build
- $env:Path += ";C:\Program Files\CMake\bin"
- cd build
- cmake -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_UNIT_TESTS=ON -DUSE_3RD_PARTY=ON -DFAIL_ON_WARNINGS=ON ..
- cmake --build . -- -j6
artifacts:
paths:
- "./build"
expire_in: 2 hrs
needs: []
# Execute unit tests
unit_test_windows:
stage: test
tags:
- windows
script:
- cd build/tests/unit_test
- ./petrack_tests.exe -r junit -o unit_test_report.xml
artifacts:
when: always
paths:
- build/tests/unit_test/unit_test_report.xml
reports:
junit: "build/tests/unit_test/unit_test_report.xml"
needs: ["build_windows"]
# Ggf. muss man nicht in den Ordner der Testskripte verzweigen, da PyTest auch rekusrsiv in Unterorndern nach tests sucht
regression_test_windows:
stage: test
tags:
- windows
script:
- cd tests/regression_test/tests
- python -m pytest --junitxml=pytest_report.xml | Tee-Object -FilePath "RegressionTestLog.txt"
artifacts:
when: on_failure
paths:
- "tests/regression_test/tests/RegressionTestLog.txt"
reports:
junit: "tests/regression_test/tests/pytest_report.xml"
needs: ["build_windows"]
build_installer_windows:
stage: build_installer
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
tags:
- windows
script:
- $env:Path += ";C:\Program Files\CMake\bin"
- cd build
- cpack -C Release
artifacts:
paths:
- "build/petrack-installer-*"
expire_in: 2hrs
dependencies: ["build_windows"]
make_release_windows:
image: $CI_REGISTRY/ped-dyn-emp/petrack/alpine
stage: deploy
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
needs: ["build_installer_windows"]
script:
- cd build
- winInst=$(echo petrack-installer-*)
- curl -k -T $winInst -u "${SCIEBO_WIN_INSTALLER_PATH}:" https://fz-juelich.sciebo.de/public.php/webdav/$winInst --fail-with-body
###############################################################################
# MacOS CI
###############################################################################
# Build petrack and petrack unit_tests
build_macos:
stage: build
tags:
- macos
script:
- mkdir build
- cd build
- cmake -G Ninja ..
-DBUILD_BUNDLE=ON
-DBUILD_UNIT_TESTS=ON
-DFAIL_ON_WARNINGS=ON
-DCatch2_DIR=$Catch2_DIR
-Dtrompeloeil_DIR=$trompeloeil_DIR
-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0
- cmake --build .
- cpack -C Release -G DragNDrop --verbose
- rm -r petrack.app
- find _CPack_Packages/ -type d -name "petrack.app" | xargs -I _ cp -r _ petrack.app
artifacts:
paths:
- "build/"
- "build/petrack-installer-*"
expire_in: 2 hrs
needs: []
# Execute unit tests
unit_test_macos:
stage: test
tags:
- macos
script:
- cd build/tests/unit_test
- ./petrack_tests -r junit -o unit_test_report.xml
artifacts:
when: always
paths:
- build/tests/unit_test/unit_test_report.xml
reports:
junit: "build/tests/unit_test/unit_test_report.xml"
needs: ["build_macos"]
# Execute regression tests
regression_test_macos:
stage: test
tags:
- macos
script:
- cd tests/regression_test/tests
- python3 -m pytest --path=../../../build/petrack.app/Contents/MacOS/petrack --junitxml=pytest_report.xml | tee "RegressionTestLog.txt"
artifacts:
when: on_failure
paths:
- "tests/regression_test/tests/RegressionTestLog.txt"
reports:
junit: "tests/regression_test/tests/pytest_report.xml"
needs: ["build_macos"]
make_release_macos:
image: $CI_REGISTRY/ped-dyn-emp/petrack/alpine
stage: deploy
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
script:
- cd build
- macosInst=$(echo petrack-installer-*)
- curl -k -T $macosInst -u "${SCIEBO_MACOS_INSTALLER_PATH}:" https://fz-juelich.sciebo.de/public.php/webdav/$macosInst --fail-with-body
dependencies: ["build_macos"]