Skip to content
/ taskpp Public

An open source command-line task management application written in C++.

License

Notifications You must be signed in to change notification settings

kevr/taskpp

Repository files navigation

taskpp

An open source command-line task management application written in C++.

pipeline coverage license

With inspiration from taskell, taskpp is intended to support JSON imports and exports to integrate with Github and Gitlab APIs.

Q: Why isn't this being written in Rust?
A: I'm just beginning to learn Rust and I believe I can get more done in a cleaner fashion with C++, given my familiarity with it.

Q: C++ is old, what the hell?
A: Yes, it is. However, new standards in recent years have modernized C++ quite a bit; we'll be using C++20-supported compilers and stdlibs in this project.

Building

Some dependencies are required to build taskpp:

meson
ninja
gcc, clang (with C++ frontend, support for C++20)
gcovr (optional, for coverage)
lcov (optional, for html coverage)
gtest (required for testing)
libfmt
boost (program_options, filesystem)
doxygen (optional, for doc)
graphviz (optional, for doc)
git (required for meson project versioning; requires tags)

First, configure meson for the project:

$ meson builddir

Now that we have a build directory, we can compile the project:

$ ninja -C builddir

Installation

After Building, users can install the project to their system:

$ ninja -C builddir install

Testing

taskpp uses the Google Test framework to perform tests against our source code.

Code coverage is controlled by passing -Db_coverage=true to meson. -Dbuild_tests=true must be set to run tests:

$ meson -Db_coverage=true -Dbuild_tests=true builddir

First, Build the project. Next, run tests:

$ ninja -C builddir test

After running tests, produce coverage reports:

$ ninja -C builddir coverage-text
$ ninja -C builddir coverage-xml

Note: meson does not currently have a way to exclude source files from the coverage report. To cleanup coverage reports, kevr's meson patch can be used to add support for the GCOV_ARGS environment variable. We can then pass --exclude to gcovr via the new variable:

## with kevr's meson patch
## define GCOV_ARGS to exclude sources ending in .test.cpp
$ export GCOV_ARGS="--exclude '.*\.test\.cpp'"
$ ninja coverage-text -C builddir

Going out of our way to exclude .test.cpp files is a bit too cumbersome without the aforementioned patch merged into meson upstream. We would primarily like to do this because branch coverage in .test.cpp files can be sporadic and we care about it being properly exercised within real application source code.

Documentation

To build documentation for the project, run ninja's doc target:

$ ninja -C builddir doc

Doxygen will be used to generate documentation and store output in <project_root>/doxygen.

Community

Contributing

Developers wishing to contribute to the project are absolutely welcome to do so. Merge requests are welcomed at any time in our Gitlab repository.

If you're looking to find issues to help with, visit https://gitlab.com/kevr2d2/taskpp/issues to search for something you'd like to work on.

When it comes to modifying existing code, we require 100% coverage on any code that was touched (see Testing).

Assets

Licensing

taskpp is developed under the GPLv2 public license.

Copyright © 2022 Kevin Morris
Complete GPLv2 text can be found in LICENSE.

About

An open source command-line task management application written in C++.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Languages