| 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. |