blob: 2e612af0586d5a46803b079fd27e8c4a404fcdaf [file] [log] [blame]
Development Conventions
=======================
ONF has many (over 300) software repositories as of 2022, and to effectively
develop across all of these projects, the following development conventions are
used.
Strategy
--------
The general strategy for ONF software development is as follows:
Make it easy to start contributing to any repo
""""""""""""""""""""""""""""""""""""""""""""""
A convention we've embraced in nearly all repos is to have a ``Makefile`` in
their base directory, which has a few common targets:
* ``make help``: Get a list of ``make`` targets
* ``make build`` run
* ``make test`` run all tests, as they'd be run in CI by a
Most ``Makefiles`` use the GNU Make syntax variant.
Automated tests should be identical for the developer and automation
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
The CI test runner (Jenkins or similar) that performs automated testing should
run the same tests in the same way that a developer would on their local
system, by running ``make test``. There should be no (or very rare) cases where
a test will pass locally but fail in CI.
Additionally, this greatly simplifies the configuration of the test runner - it
only needs to run ``make test``. In some cases, it may be necessary for the
Makefile to include commands that generate Jenkins-consumable output, such as
test results (usually in JUnit, xUnit, or TAP formats) or coverage information
(usually in Cobertura XML format).
Style, formatting, linting, license compliance should be automated
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Code review should be about the structure and design of the code, and should
To that end, automated tools should be used that verify and conform the code to
a specific convention and standard:
* Formatting tools such as ``go fmt``, ``black`` and similar should be used to
conform code to style guidelines
* Linting tools such as ``pylint``, ``yamllint``
In the documentation space, spelling and other checks should also be performed.
Versioning and Releasing Software
---------------------------------
Versioning software and performing releases are fundamentally for two audiences:
1. Providing compatibility claims about
2. Developers who use the
Two common and recommended versioning schemes are;
* SemVer
* CalVer
Division of responsibilities
""""""""""""""""""""""""""""
Automated tools should perform low-level versioning tasks like creating tags on
repos.