Envvar Naming Scopes
The scope of an environment variable can be derived from its name. Therefore, it is important to follow the correct naming scheme to enable easy and proper identification. This is important when either:
-
A new local envvar is introduced.
-
A new global envvar is added to an existing local envvar.
Envvar Definition
-
A variable that is only used in a particular service is a local envvar.
-
A variable that is used in more than one service is a global envvar.
-
If applicapable, a global envvar has a local counterpart.
-
Variables that are not limited to any service are by definition global.
Naming Scope
Global Envvars
A global envvar always starts with OCIS_ like OCIS_LOG_FILE.
Note that this envvar is the global representation of the local example from above.
To get a list of global envvars used in all services, see the Global Environment Variables table in the ocis admin documentation.
Lifecycle of Envvars
The envvar struct tag contains at maximum the following key/value pairs to document the lifecycle of a config variable:
-
introductionVersion -
deprecationVersion -
removalVersion -
deprecationInfo -
deprecationReplacement
Introduce New Envvars
-
If a new envvar is introduced, the entire structure must be added, including the
introductionVersionfield. Note that 'introduced' means, that the new envvar was not present in any of the services.-
During development, set the
introductionVersionto a short, alphabetic code name that represents the upcoming release such asreleaseXor the project name for that release such asDaledda. -
This identifier stays constant until the release receives its final production semantic-version number.
-
Although the CI checks the semver string when a PR is created, you can perform this check upfront manually by entering the following command from the ocis root. Note that this script will only check if the annotation follow the rules but does not print out which envvars have a non semver annotation.
.make/check-env-var-annotations.sh
Note that there is a more sophisticated script in the ownCloud documentation repository named
identify_envvar_placeholder_names.shwhich is able to identify all envvars that do not have a semver annotation defined. Search for this file in the README for more details which opens when clicking on the link.The doc helper scripts render these alphabetic identifiers verbatim. They appear in the next (master) branch of the admin documentation exactly as they are entered.
-
-
See the Set the Correct IntroductionVersion documentation before starting a new release candidate.
Adding Envvars to Existing Ones
If an envvar has been introduced with a particular release, the introductionVersion got a semver value accordingly. If an additional envvar is added to this existing one such as a global envvar, the introduction version must not be changed.
Deprecate Existing Envvars
See the deprecation rules documentation for more details.
Separating Multiple Envvars
When multiple envvars are defined for one purpose like a global and local one, use ; (semicolon) to properly separate the envvars in go code. Though it is possible to separate with , (comma) according go rules, the current implementation of the docs generation process only recognizes semicolons as separator.