-
Notifications
You must be signed in to change notification settings - Fork 137
DevOps
- Tutorials, images etc... are stored in the Wiki (to avoid
storing large binary files in the repository). The Wiki
is a separate repository (
geogram.wiki
).
Syntax for YAML files is very tricky, tabs versus spaces, like in Makefiles !
- use YAML Lint online before pushing workflows.
- In emacs,
<esc> <x> whitespace-mode
to display spaces and tabs differently. Emacs create a tab by default on each newline (there is probably a YAML mode for emacs that avoid this but I did not find it...) - In emacs, to avoid automatic tabs when creating new lines (which
breaks YAML files most of the time), add the following line
(setq-default indent-tabs-mode nil)
to your.emacs
Geogram uses the following workflows:
- Build: builds geogram on Linux,Windows,MacOS on each push and launches test suite. Test results are published here
- Nightly: builds geogram on Linux,Windows,MacOS each night and launches test suite under Valgrind. Test results are published here
- Doxygen: (manually triggered) generates the programmer's reference manual and publishes it here
- Release: (manually triggered) generates Geogram releases (deb, rpm, Geogram PSMs) and publishes them to the latest release.
- The Doxygen documentation is hosted by GitHub Pages.
- GitHub Pages are configured in the "Pages' category of project settings. The Source is the "gh-pages" branch, root directory.
- The pages are generated using a manually triggered action
(
workflow_dispatch
). To push the generated HTML pages to thegh-pages
, it usesJamesIves/github-pages-deploy-action@v4
, that has an option to clear the history (which we want to do, no need to keep history of generated stuff). - Test results are also pushed to
gh-pages
, but usingpeaceiris/actions-gh-pages@v3
that works under Linux/Mac/Windows (JamesIves
only works under Linux).
Non-regression tests are based on RobotFramework and some extensions that were written by Thierry Valentin (RIP my friend, miss you...), initially for Jenkins (ported them to a github action). Latest test results are posted here.
To run the tests manually/locally:
- build geogram
$ cd geogram
$ ./configure.sh
$ cd build/xxxx
$ make -j 4
- install robotframework
$ pip3 install robotframework
- get test data
$ cd geogram/tests
$ git clone https://github.com/BrunoLevy/geogram.data.git .)
- run the tests
$ ./build/xxxx/tests/runpybot.sh --include=TESTCATEGORY tests/
where TESTCATEGORY
is one of smoke
,daily_valgrind
, weekly_valgrind
(see Tags
in .robot
files)
Optionally, memory checking, bound checking, coverage analysis can be selected using additional flags
passed to runpybot.sh
:
- --with-valgrind
- --with-callgrind
- --with-gcov
The same --with-xxx=1
option needs to be passed before to configure.sh
. Note the =1
(without it it does not work,
configure.sh
tests for its presence).
To use ASan (address sanitizer):
./configure.sh Linux64-gcc-dynamic --with-asan=1
(cd build/Linux64-gcc-dynamic-Debug; make -j 4)
./build/Linux64-gcc-dynamic-Release/tests/runpybot.sh --with-asan --include=smoke tests/
- check that the PSMs still compile and work
- in
CMakeLists.txt
,set(VORPALINE_VERSION_RC FALSE)
, commit, push - check continuous integration results
- create the release (see howto), Choose a tag dropdown, select Create a new tag. Make sure the release was set as the latest release.
- run release workflow (generates precompiled Linux packages and PSMs)
- run doxygen workflow (generates programmer's reference manual here)
- run emscripten workflow (generates online demo)
- For each PSM, update sources, and create new version
- Graphite:
$ git clone https://github.com/BrunoLevy/GraphiteThree.git
$ cd geogram
$ git pull origin main
$ cd ..
$ git add geogram
$ git commit -a
$ git push
- in
CMakeLists.txt
, increment version number andset(VORPALINE_VERSION_RC TRUE)