Control your c++ code using this continuous integration template.
cit - is a project template for development of C++ codebase. It aggregates linters, static and dynamic analysis tools in single, ready to use template.
-
Explore capabilities of automatic tools and their impact on development
-
Give users of project unified access to linters and analysis tools
-
Showcase techniques of testing different properties of codebase
-
Provide reproducible builds and environments through docker and nix
-
Encourage responsible attitude towards the development of quality software
This project is under development, expect changes in api, setup and tools. It uses opinionated set of rules and conventions for project, fill free to change configuration files to best fit your personal needs. You can fork and play with it, contributions to the source code, issues and requests are welcome.
-
Nix used to reproducibly build tar archive with docker image containing all linters:
nix build -f ci/nix/docker_build.nix --enforce-determinism --repeat 1 --keep-failed
-
You can check that produced result has same hash sum as result produced by ci:
sha256sum result
-
Docker image than loaded from result:
docker load < result
-
To run all linters checks run inside that container use docker_run.sh script with all.sh script as argument:
ci/docker/docker_run.sh ci/checks/all.sh
-
To run more specific checks use docker_run.sh script with name of script from ci/checks:
ci/docker/docker_run.sh ci/checks/md_files_style.sh
-
To run interactive shell inside docker image:
ci/docker/run_shell.sh
-
If you don’t want to build docker image, you can load prepared docker image from docker hub:
ci/docker/docker_pull.sh
See GitHub workflows for usage details.
-
online services
- GitHub actions - check/build/run tests
- Codecov - verify code coverage of tests
- lgtm - build and analyze source code
- dependabot - check dependencies
-
git
-
licenses
- reuse - Apache-2.0
-
files and directories
- ls-lint - MIT
-
spelling
-
cpp static analysis
- clang - warnings as errors checks - Apache 2.0
- clang-format - NCSA
- clang-tidy - NCSA
- cppcheck - GPLv3.0
- cpplint - BSD 3-clause
- gcc - warnings as errors checks - GPLv3.0
-
cpp dynamic analysis
-
cpp examples of library usage
-
cmake
- cmake-format GPLv3.0
- cmake-lint GPLv3.0
-
shell
- shellcheck - GPLv3.0
-
nix
- nixpkgs-fmt - Apache-2.0
- nix-linter - BSD 3-clause
- nix-shell - LGPL-2.1 License
-
md files
-
yaml
- yamllint - GPLv3.0
-
cpp tools
- jscpd - MIT
- valgrind - GPLv2.0
- libFuzzer - NCSA
- doxygen - GPLv2.0
- standardese - MIT
- mull - Apache-2.0
- mutate_cpp - MIT
- rapidcheck - BSD-2-Clause
- clazy - LGPLv2
- pvs studio
-
cpp compilers
-
ci environments
- MacOS
- Windows
-
examples of library usage
-
gui testing
- SikuliX1 - MIT
-
reproducible builds testing
- sha256sum - GPL-3.0
-
unified console commands
-
approval testing
- ApprovalTests.cpp - Apache-2.0
-
microbenchmarking
-
compile time benchmarking
-
wiki about project
-
logo and illustrations
-
stable release versions and tags
-
roadmap
Big thanks to contributors. You can see contributors in credits.
cit template released under the terms of the MIT license. See license for more information.