-
Notifications
You must be signed in to change notification settings - Fork 147
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. They are pushed to another repository geogram.CI to the
gh-pages
pages, using peaceiris/action-gh-pages. To do that, a SSHACTION_DEPLOY_KEY
is used, as explained here. Publishing CI results in a separate repo prevents geogram repo from growing too much (CI test results take some space !). Note that the continuous action wipes the history, but the previous config (with everything in geogram's gh-pages) made it impossible to keep generated doc and test results while wiping test result history. - 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.
- Emscripten: (manually triggered) generates Geogram on-line demos and publishes them to
geogram.run
(using a SSHACTION_DEPLOY_KEY_RUN
).
- 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)