aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md208
1 files changed, 208 insertions, 0 deletions
diff --git a/README.md b/README.md
index c098e82..2de1a24 100644
--- a/README.md
+++ b/README.md
@@ -9,3 +9,211 @@ OMC aims to consolidate the steps required to build, test, and deploy calibratio
- libcurl
- rsync
+# Installation
+
+Download the source code
+
+```shell
+git clone https://github.com/jhunkeler/ohmycal.git
+cd ohmycal
+```
+
+Create and enter the build directory
+
+```shell
+mkdir build
+cd build
+```
+
+Run cmake
+
+```shell
+cmake .. -DCMAKE_INSTALL_PREFIX="$HOME/programs/ohmycal"
+```
+
+Compile and install ohmycal
+
+```shell
+make
+make install
+```
+
+# Configuration
+
+## Environment variables
+
+| Name | Purpose | Example |
+|------------------------------|-------------------------------------------------------|-----------------------------------------------------------------------------|
+| TMPDIR | Change default path to store temporary data | ```export TMPDIR=/new/tmp``` |
+| OMC_SYSCONFDIR | Change default path to search for configuration files | ```export OMC_SYSCONFDIR=/my/shared/config/path``` |
+| OMC_JF_ARTIFACTORY_URL | Artifactory service URL (ending in `/artifactory`) | ```export OMC_JF_ARTIFACTORY_URL=https://myserver.domain.tld/artifactory``` |
+| OMC_JF_ACCESS_TOKEN | Artifactory Access Token | ```export OMC_JF_ACCESS_TOKEN=$(cat /token/file)``` |
+| OMC_JF_USER | Artifactory username | ```export OMC_JF_USER=myusername``` |
+| OMC_JF_PASSWORD | Artifactory password | ```export OMC_JF_PASSWORD=$(cat /my/password)``` |
+| OMC_JF_SSH_KEY_PATH | Path to SSH public key file | ```export OMC_JF_SSH_KEY_PATH=~/.ssh/id_rsa_artifactory.pub``` |
+| OMC_JF_SSH_PASSPHRASE | Password associated with SSH public key file | ```export OMC_JF_SSH_PASSPHRASE=$(cat /my/password)``` |
+| OMC_JF_CLIENT_CERT_CERT_PATH | Path to OpenSSL cert files | ```export OMC_JF_CLIENT_CERT_PATH=/path/to/cert/dir``` |
+| OMC_JF_CLIENT_CERT_KEY_PATH | OpenSSL key file (in cert path) | ```export OMC_JF_CLIENT_CERT_KEY_PATH=artifactory.pem``` |
+| OMC_JF_REPO | Artifactory "generic" repository to write to | ```export OMC_JF_REPO=omc``` |
+
+# Variable expansion
+
+## Template strings
+
+Template strings can be accessed using the `{{ subject.key }}` notation in any Ohmycal configuration file.
+
+| Name | Purpose |
+|----------------------------|------------------------------------|
+| meta.name | Delivery name |
+| meta.version | Delivery version |
+| meta.codename | Delivery codename |
+| meta.mission | Delivery mission |
+| meta.python | Python version (e.g. 3.11) |
+| meta.python_compact | Python (e.g. 311) |
+| info.time_str_epoch | UNIX Epoch timestamp |
+| info.release_name | Rendered delivery release name |
+| info.build_name | Rendered delivery build name |
+| info.build_number | Rendered delivery build number |
+| storage.tmpdir | Ohymcal temp directory |
+| storage.delivery_dir | Ohmycal delivery output directory |
+| storage.conda_artifact_dir | Ohmycal conda package directory |
+| storage.wheel_artifact_dir | Ohmycal wheel package directory |
+| storage.build_sources_dir | Ohmycal sources directory |
+| conda.installer_name | Conda distribution name |
+| conda.installer_version | Conda distribution version |
+| conda.installer_platform | Conda target platform |
+| conda.installer_arch | Conda target architecture |
+| conda.installer_baseurl | Conda installer URL |
+| system.arch | System CPU Architecture |
+| system.platform | System Platform (OS) |
+| deploy.repo | Artifactory destination repository |
+
+The template engine also provides an interface to environment variables using the `{{ env:VARIABLE_NAME }}` notation.
+
+```ini
+[meta]
+name = {{ env:MY_DYNAMIC_DELIVERY_NAME }}
+version = {{ env:MY_DYNAMIC_DELIVERY_VERSION }}
+python = {{ env:MY_DYNAMIC_PYTHON_VERSION }}
+```
+
+## Runtime strings
+
+Alternatively, one may expand environment variables using the `${VARIABLE_NAME}` notation.
+Note: Environment variable expansion is not rendered in `[test:*].script` keys.
+
+```ini
+[meta]
+name = ${MY_DYNAMIC_DELIVERY_NAME}
+version = ${MY_DYNAMIC_DELIVERY_VERSION}
+python = ${MY_DYNAMIC_PYTHON_VERSION}
+```
+
+# Delivery files
+
+## Sections
+
+All configuration section names and keys are _case-sensitive_.
+
+### meta
+
+| Key | Type | Purpose | Required |
+|----------|---------|-----------------------------------------------------------------|----------|
+| mission | String | Mission rule directory to use | Y |
+| name | String | Name of the delivery | Y |
+| version | String | Version of delivery | Y |
+| codename | String | Release code name (HST-only) | N |
+| rc | Integer | Release candidate level (i.e. delivery iteration) | Y |
+| final | Boolean | Toggle final delivery logic (possibly deprecated in the future) | N |
+| based_on | String | A conda environment YAML file/URL to use as a baseline | N |
+| python | String | Version of Python to base delivery on | Y |
+
+### conda
+
+| Key | Type | Purpose | Required |
+|--------------------|--------|----------------------------|----------|
+| installer_name | String | Conda distribution name | Y |
+| installer_version | String | Conda distribution version | Y |
+| installer_platform | String | Conda target platform | Y |
+| installer_arch | String | Conda target architecture | Y |
+| installer_baseurl | String | Conda installer URL | Y |
+| conda_packages | List | Conda packages to install | N |
+| pip_packages | List | Pypi packages to install | N |
+
+### runtime
+
+Environment variables exported are _global_ to all programs executed by ohmycal. There is no limit to the number of environment variables that can be set.
+
+| Key | Type | Purpose | Required |
+|------------------------|--------|------------------------------------------------------------|----------|
+| _arbitrary name_ | String | Export environment variables to build and test environment | N |
+| _artitrary_name ... N_ | - | - | - |
+
+### test:_name_
+
+Sections starting with `test:` will be used during the testing phase of the ohmycal pipeline. Where the value of `name` following the colon is an arbitrary value, and only used for reporting which test-run is executing. Section names must be unique.
+
+| Key | Type | Purpose | Required |
+|--------------|--------|-------------------------------------------------------|----------|
+| build_recipe | String | Git repository path to package's conda recipe | N |
+| repository | String | Git repository path or URL to clone | Y |
+| version | String | Git commit or tag to check out | Y |
+| runtime | List | Export environment variables specific to test context | Y |
+| script | List | Body of a shell script that will execute the tests | Y |
+
+### deploy:artifactory:_name_
+
+Sections starting with `deploy:artifactory:` will define the upload behavior of build and test artifacts to Artifactory. Where the value of `name` is an arbitrary value, and only used for reporting. Section names must be unique.
+
+| Key | Type | Purpose | Required |
+|-------|--------|----------------------------------------|----------|
+| files | List | `jf`-compatible wildcard path | Y |
+| dest | String | Remote artifactory path to store files | Y |
+
+# Mission files
+
+Mission rules are defined in the `OMC_SYCONFDIR/mission` directory. Each mission configuration file shares the same name as the directory. To create a new mission, `example`, the directory structure will be as follows:
+
+```text
+OMC_SYSCONFDIR/
+ mission/
+ example/
+ example.ini
+ supporting_text.md.in
+```
+
+## Sections
+
+### meta
+
+| Key | Type | Purpose | Required |
+|------------------|--------|-----------------------------------------------------------|----------|
+| release_fmt | String | A string containing one or more release format specifiers | Y |
+| build_name_fmt | String | - | Y |
+| build_number_fmt | String | - | Y |
+
+#### Release format specifiers
+
+| Formatter | Purpose |
+|-----------|----------------------------------|
+| %n | Delivery name |
+| %c | Delivery codename |
+| %r | Delivery RC level |
+| %R | Delivery RC level (final-aware) |
+| %v | Delivery version |
+| %m | Mission name |
+| %P | Python version (i.e. 3.11) |
+| %p | Compact Python version (i.e. 311 |
+| %a | System CPU Architecture |
+| %o | System Platform (OS) |
+| %t | UNIX Epoch timestamp |
+
+### template:filename
+
+Sections starting with `template:` will make use of the built-in template engine, replacing any strings in `filename`, relative to the mission directory, with expanded data values. The output will be written to `destination`.
+
+```ini
+# example.ini
+[template:supporting_text.md.in]
+destination = {{ storage.delivery_dir }}/output_filename.md
+```