| |
@@ -2,9 +2,9 @@
|
| |
|
| |
Each module has a **name**, and one or more **streams** that usually represent a major version of the application, language stack, or other software in the module. To simplify their installation, modules can define **profiles** representing a specific use case. Modules are built out of SRPM packages that have a name and one or more branches.
|
| |
|
| |
- **Example 1:** A Node.js module could be named "nodejs", with three streams "6", "8" and "10", and two profiles "default" and "devel". This module would include a single package in each stream named "nodejs", branched as "6", "8", and "10".
|
| |
+ **Example 1:** A Node.js module could be named "nodejs", with three streams "6", "8" and "10", and two profiles "default" and "devel". This module would include a single package in each stream named "nodejs", branched as "stream-nodejs-6", "stream-nodejs-8", and "stream-nodejs-10".
|
| |
|
| |
- **Example 2:** Another one, PostgreSQL, could be named as "postgresql", its two streams could be "9.6" and "10", because that's where the upstream compatibility is, and its profiles could include "client" and "server". Both streams could be built out of two packages. One named "postgresql", having branches "9.6" and "10", which would be the main package; and another one named "python-pgsql", having a single branch "latest", which would always bind to the right version of the database during build, and would provide Python bindings.
|
| |
+ **Example 2:** Another one, PostgreSQL, could be named as "postgresql", its two streams could be "9.6" and "10", because that's where the upstream compatibility is, and its profiles could include "client" and "server". Both streams could be built out of two packages. One named "postgresql", having branches "stream-postgresql-9.6" and "stream-postgresql-10", which would be the main package; and another one named "python-pgsql", having a single branch "stream-postgresql-latest", which would always bind to the right version of the database during build, and would provide Python bindings.
|
| |
|
| |
== Module name
|
| |
A module usually represents an application, a language stack, or any other logical collection of packages. Module name should represent the name of the software it ships. Using lowercase, hyphen-separated names is preferable. Some examples could include "nodejs", "golang", "golang-ecosystem", or "cri-o".
|
| |
@@ -13,11 +13,13 @@
|
| |
|
| |
== Module stream name
|
| |
|
| |
- The module stream name is assigned by creating a branch of that name in DistGit and building from it. The Module Build Service will automatically set the stream name of the resulting module to match.
|
| |
+ The module streams should be discoverable and distinguishable from the other branches. Therefore whatever stream name is chosen, it should be stored in DistGit with "stream-" prefix followed by module name. For example, having "nodejs" module with stream "10", the DistGit branch should be "stream-nodejs-10".
|
| |
+
|
| |
+ There are several options to choose suitable module stream names:
|
| |
|
| |
=== Option 1: Major version
|
| |
|
| |
- A stream usually represents a major version of the software, and should follow the versioning of the major upstream component included in the module. Consideration should be given to the upstream community’s adherence to API (or even ABI) stability on the versions of their software. In other words, some communities will maintain stability on the X branch, many the Y branch, and some even the Z branch. As a result, the branch names should reflect that stability. For example, most communities are stable on the Y branch so the branch name should be "X.Y". (e.g. mariadb:10.2) included in the module.
|
| |
+ A stream usually represents a major version of the software, and should follow the versioning of the major upstream component included in the module. Consideration should be given to the upstream community’s adherence to API (or even ABI) stability on the versions of their software. In other words, some communities will maintain stability on the X branch, many the Y branch, and some even the Z branch. As a result, the stream names should reflect that stability. For example, most communities are stable on the Y branch so the stream name should be "X.Y". (e.g. mariadb:10.2) included in the module.
|
| |
|
| |
Compatibility on non-technical factors should be also considered. For example, a package that maintains exactly the same API but has a significant visual and UX overhaul probably belongs in a new stream. Or to put it another way, human interaction is an interface too.
|
| |
|
| |
@@ -65,11 +67,11 @@
|
| |
|
| |
== Package branch name
|
| |
|
| |
- Packages included in modules should be branched in a similar manner as modules. So instead of having one branch for release (such as "f27", "f28, etc.), using upstream major versions as branches is recommended. Please read the Module stream name section above for guidance.
|
| |
+ Packages included in modules should be branched in a similar manner as modules. So instead of having one branch for release (such as "f27", "f28, etc.), using "stream-" prefix followed by module name and upstream major versions as branches is recommended. Please read the Module stream name section above for guidance.
|
| |
|
| |
- The exact branching should be chosen with consideration given to the upstream community’s adherence to API/ABI stability on the versions of their software. In other words, in the context of X.Y.Z style naming, some communities will maintain stability on the X branch, many the Y branch, and some even the Z branch. As a result, the branch names should reflect that stability. For example, most communities are stable on the Y branch so the branch name should be "X.Y". While this rule is focusing on examples using X.Y.Z style naming, CalVer (http://calver.org/), or other versioning schemes, should be faithfully reflected using the same guidance regarding which branches to create.
|
| |
+ The exact branching should be chosen with consideration given to the upstream community’s adherence to API/ABI stability on the versions of their software. In other words, in the context of X.Y.Z style naming, some communities will maintain stability on the X branch, many the Y branch, and some even the Z branch. As a result, the branch names should reflect that stability. For example, if Node.js community is stable on the X branch so the branch name should be "stream-nodejs-X". While this rule is focusing on examples using X.Y.Z style naming, CalVer (http://calver.org/), or other versioning schemes, should be faithfully reflected using the same guidance regarding which branches to create.
|
| |
|
| |
- For "rolling release" projects that don’t change their API/ABI (e.g. Python’s timezone database, `pytz`) a single "stable" branch is appropriate.
|
| |
+ For "rolling release" projects that don’t change their API/ABI (e.g. Python’s timezone database, `pytz`) a single "stable" branch with correct prefix is appropriate.
|
| |
|
| |
|
| |
|
| |
The guideline currently recommends using upstream major versions as branches. This is not acceptable, because this works just for simplest cases, such as there is module "nodejs" shipping single package "nodejs". It does not work for even slightly more complex cases when module "nodejs" includes not just "nodejs" package, but also lets say "npm" package. Having Node.js versioned brachnes in "npm" is wrong. Not mentioning that if I'll have "mynodejs" module, using both "nodejs" and "npm" and probably also other packages, the versions will be already occupied by "nodejs" module.
IOW, the modular packages must live in "stream-module-version" branches by default. This avoids conflicts and provides more understanding why "npm" package has some branches.