Skip to content

Continuous Integration

Kai Pastor edited this page Oct 9, 2020 · 27 revisions

Branch: release

Azure DevOps test Azure DevOps coverage GitHub Release Date GitHub Release Version

Branch: master

Azure DevOps test Azure DevOps coverage GitHub Last Commit Date GitHub Commits

Branch: dev

Azure DevOps test Azure DevOps coverage GitHub Last Commit Date GitHub Commits

About

The OpenOrienteering Mapper and Superbuild Github repositories use continuous integration via Azure Pipelines on:

https://dev.azure.com/OpenOrienteering/Mapper

Builds are triggered automatically for commits to regular branches and for pull requests. Pull requests build results are reported back to Github as "Check" results.

"Collaborators" may trigger builds for pull requests manually from comments with the following command:

/AzurePipelines run

CI Configurations

Build Android macOS Linux clazy Linux coverage Windows MinGW
Target OS Android macOS Linux Linux Windows
Target Arch arm v7, arm64, x86, x86_64 x64 x64 x64 x32, x64
Host OS image macOS 10.14 macOS 10.14 Ubuntu 18.04 Ubuntu 18.04 Windows Server 2019
SDK NDK r19c XCode 10.3 Ubuntu Ubuntu MSYS2
Compiler clang AppleClang clazy 1.5 gcc 7.4.0 gcc 10.0.0
Libraries Superbuild Superbuild Superbuild Superbuild Superbuild
Qt 5.12 5.12 5.12 5.12 5.12
Generator Unix Makefiles Unix Makefiles Unix Makefiles Ninja MSYS Makefiles
Config Release Release RelWithDebInfo Debug+Coverage Release
Sanitzer no no no ubsan no
Analyzers no no clang-tidy, iwyu no no
Tests run no yes yes yes yes
Licensing Superbuild Superbuild Superbuild Superbuild Superbuild
Artifacts APK DMG deb , PDF deb ZIP, EXE

Testing the binary artifacts

Android

The CI build creates an unsigned APK. Before installing to a device, it must be signed. Developers may use their developer certificate, which is usually protected by the passphrase android:

$ SDK_APTH/build-tools/VERSION/apksigner sign --ks ~/.android/debug.keystore install-release-unsigned.apk

Signing with the OpenOrienteering certificate is implemented in the release step. Since GH releases from CI are created as drafts, it is possible to create a properly signed APK this way even without making it public.

CI Implementation Notes

CI scripts are stored in the ci directory. Each pipeline has some configuration variables which may be edited permanently or when queueing manually.

The Superbuild repository CI build creates "Pipeline Artifacts" with all dependencies for building Mapper for Android arm-v7 (on macOS), macOS, Ubuntu 16.04 and Windows (MinGW). The Mapper repository CI downloads these artifacts, thus limiting the build time to Mapper itself. Tests are run for the native builds (macOS, Ubuntu, Windows). The actual "buildId" of the superbuild pipeline artifacts is a configuration variable in the Mapper pipeline. It should refer to a build which is released to Github (i.e. has its sources published) and is retained on Azure.