aboutsummaryrefslogtreecommitdiff
path: root/include/deliverable.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/deliverable.h')
-rw-r--r--include/deliverable.h280
1 files changed, 211 insertions, 69 deletions
diff --git a/include/deliverable.h b/include/deliverable.h
index 613d0e8..918453a 100644
--- a/include/deliverable.h
+++ b/include/deliverable.h
@@ -1,6 +1,4 @@
-//
-// Created by jhunk on 10/5/23.
-//
+/// @file deliverable.h
#ifndef OHMYCAL_DELIVERABLE_H
#define OHMYCAL_DELIVERABLE_H
@@ -22,116 +20,260 @@
#define DELIVERY_PLATFORM_CONDA_INSTALLER 2
#define DELIVERY_PLATFORM_RELEASE 3
-#define INSTALL_PKG_CONDA 1 << 1
-#define INSTALL_PKG_CONDA_DEFERRED 1 << 2
-#define INSTALL_PKG_PIP 1 << 3
-#define INSTALL_PKG_PIP_DEFERRED 1 << 4
+#define INSTALL_PKG_CONDA 1 << 1 ///< Toggle conda package installation
+#define INSTALL_PKG_CONDA_DEFERRED 1 << 2 ///< Toggle deferred conda package installation
+#define INSTALL_PKG_PIP 1 << 3 ///< Toggle pip package installation
+#define INSTALL_PKG_PIP_DEFERRED 1 << 4 ///< Toggle deferred package installation from source
-#define DEFER_CONDA 0
-#define DEFER_PIP 1
+#define DEFER_CONDA 0 ///< Build conda packages
+#define DEFER_PIP 1 ///< Build python packages
+/*! \struct Delivery
+ * \brief A structure describing a full delivery object
+ */
struct Delivery {
+ /*! \struct System
+ * \brief System information
+ */
struct System {
char *arch;
+ ///< System CPU architecture ident
char platform[DELIVERY_PLATFORM_MAX][DELIVERY_PLATFORM_MAXLEN];
+ ///< System platform name
} system;
+ /*! \struct Storage
+ * \brief Storage paths
+ */
struct Storage {
- char *delivery_dir;
- char *conda_install_prefix;
- char *conda_artifact_dir;
- char *conda_staging_dir;
- char *conda_staging_url;
- char *wheel_artifact_dir;
- char *wheel_staging_dir;
- char *wheel_staging_url;
- char *build_dir;
- char *build_recipes_dir;
- char *build_sources_dir;
- char *build_testing_dir;
+ char *delivery_dir; ///< Delivery artifact output directory
+ char *conda_install_prefix; ///< Path to install Conda
+ char *conda_artifact_dir; ///< Base path to store compiled conda packages
+ char *conda_staging_dir; ///< Base path to copy compiled conda packages
+ char *conda_staging_url; ///< URL to access compiled conda packages
+ char *wheel_artifact_dir; ///< Base path to store compiled wheel packages (Unused)
+ char *wheel_staging_dir; ///< Base path to copy compiled wheel packages (Unused)
+ char *wheel_staging_url; ///< URL to access compiled wheel packages (Unused)
+ char *build_dir; ///< Base path to store source code and recipes
+ char *build_recipes_dir; ///< Path to store conda recipes
+ char *build_sources_dir; ///< Path to store source code
+ char *build_testing_dir; ///< Path to store test data (Unused)
} storage;
+
+ /*! \struct Meta
+ * \brief Metadata related to the delivery
+ */
struct Meta {
- // delivery name
- char *name;
- // delivery version
- char *version;
- // build iteration
- int rc;
- // version of python to use
- char *python;
- // shortened python identifier
- char *python_compact;
- // URL to previous final configuration
- char *based_on;
- // hst, jwst, roman
- char *mission;
- // HST uses codenames
- char *codename;
- // is this a final release?
- bool final;
- // keep going, or don't
- bool continue_on_error;
+ char *name; ///< delivery name
+ char *version; ///< delivery version
+ int rc; ///< build iteration
+ char *python; ///< version of python to use
+ char *python_compact; ///< shortened python identifier
+ char *based_on; ///< URL to previous final configuration
+ char *mission; ///< hst, jwst, roman
+ char *codename; ///< HST uses codenames
+ bool final; ///< is this a final release?
+ bool continue_on_error; ///< keep going, or don't
} meta;
+ /*! \struct Info
+ * \brief Release information (name & datetime)
+ */
struct Info {
- // The fully combined release string
- char *release_name;
+ char *release_name; ///< The fully combined release string
struct tm *time_info;
- time_t time_now;
+ time_t time_now; ///< Time stamp for when OMC execution started
} info;
+ /*! \struct Conda
+ * \brief Conda configuration
+ *
+ * This includes lists describing packages to be delivered
+ */
struct Conda {
- char *installer_baseurl;
- char *installer_name;
- char *installer_version;
- char *installer_platform;
- char *installer_arch;
- char *tool_version;
- char *tool_build_version;
- // packages to install
- struct StrList *conda_packages;
- // conda recipes to be built
- struct StrList *conda_packages_defer;
- // packages to install
- struct StrList *pip_packages;
- // packages to be built
- struct StrList *pip_packages_defer;
+ char *installer_baseurl; ///< URL describing where Conda will be downloaded from
+ char *installer_name; ///< Name of installer (Miniconda3, Miniforge3, etc)
+ char *installer_version; ///< Version of installer
+ char *installer_platform; ///< Platform/OS target of installer
+ char *installer_arch; ///< CPU architecture target of installer
+ char *tool_version; ///< Installed version of conda
+ char *tool_build_version; ///< Installed version of "build" package
+ struct StrList *conda_packages; ///< Conda packages to deliver
+ struct StrList *conda_packages_defer; ///< Conda recipes to be built for delivery
+ struct StrList *pip_packages; ///< Python packages to install (pip)
+ struct StrList *pip_packages_defer; ///< Python packages to be built for delivery
} conda;
- // global runtime variables
+ /*! \struct Runtime
+ * \brief Global runtime variables
+ */
struct Runtime {
- RuntimeEnv *environ;
+ RuntimeEnv *environ; ///< Environment variables
} runtime;
+ /*! \struct Test
+ * \brief Test information
+ */
struct Test {
- char *name;
- char *version;
- char *repository;
- char *script;
- char *build_recipe;
- // test-specific runtime variables
- struct Runtime runtime;
- } tests[1000];
+ char *name; ///< Name of package
+ char *version; ///< Version of package
+ char *repository; ///< Git repository of package
+ char *script; ///< Commands to execute
+ char *build_recipe; ///< Conda recipe to build (optional)
+ struct Runtime runtime; ///< Environment variables specific to the test context
+ } tests[1000]; ///< An array of tests
};
+/**
+ * Initializes a Deliver structure
+ * @param ctx pointer to Delivery context
+ * @param ini pointer to INIFILE describing a delivery
+ * @param cfg pointer to INIFILE describing extra configuration data
+ * @return `0` on success
+ * @return Non-zero on error
+ */
int delivery_init(struct Delivery *ctx, struct INIFILE *ini, struct INIFILE *cfg);
+
+/**
+ * Free memory allocated by delivery_init()
+ * @param ctx pointer to Delivery context
+ */
void delivery_free(struct Delivery *ctx);
+
+/**
+ * Print Delivery metadata
+ * @param ctx pointer to Delivery context
+ */
void delivery_meta_show(struct Delivery *ctx);
+
+/**
+ * Print Delivery conda configuration
+ * @param ctx pointer to Delivery context
+ */
void delivery_conda_show(struct Delivery *ctx);
+
+/**
+ * Print Delivery tests
+ * @param ctx pointer to Delivery context
+ */
void delivery_tests_show(struct Delivery *ctx);
+
+/**
+ * Build Conda recipes associated with the Delivery
+ * @param ctx pointer to Delivery context
+ * @return 0 on success
+ * @return Non-zero on error
+ */
int delivery_build_recipes(struct Delivery *ctx);
+
+/**
+ * Produce a list of wheels built for the Delivery (Unused)
+ * @param ctx pointer to Delivery context
+ * @return pointer to StrList
+ * @return NULL on error
+ */
struct StrList *delivery_build_wheels(struct Delivery *ctx);
+
+/**
+ * Copy wheel packages to artifact storage
+ * @param ctx pointer to Delivery context
+ * @return 0 on success
+ * @return Non-zero on error
+ */
int delivery_index_wheel_artifacts(struct Delivery *ctx);
+
+/**
+ * Generate a header block that is applied to delivery artifacts
+ * @param ctx pointer to Delivery context
+ * @return header on success
+ * @return NULL on error
+ */
char *delivery_get_spec_header(struct Delivery *ctx);
+
+/**
+ * Finalizes a delivery artifact for distribution
+ * @param ctx poitner to Delivery context
+ * @param filename path to delivery artifact (Conda YAML file)
+ */
void delivery_rewrite_spec(struct Delivery *ctx, char *filename);
+
+/**
+ * Copy compiled wheels to artifact storage
+ * @param ctx pointer to Delivery context
+ * @return 0 on success
+ * @return Non-zero on error
+ */
int delivery_copy_wheel_artifacts(struct Delivery *ctx);
+
+/**
+ * Copy built Conda packages to artifact storage
+ * @param ctx poitner to Delivery context
+ * @return 0 on success
+ * @return Non-zero on error
+ */
int delivery_copy_conda_artifacts(struct Delivery *ctx);
+
+/**
+ * Retrieve Conda installer
+ * @param installer_url URL to installation script
+ */
void delivery_get_installer(char *installer_url);
+
+/**
+ * Generate URL based on Delivery context
+ * @param delivery pointer to Delivery context
+ * @param result pointer to char
+ * @return in result
+ */
void delivery_get_installer_url(struct Delivery *delivery, char *result);
+
+/**
+ * Install packages based on Delivery context
+ * @param ctx pointer to Delivery context
+ * @param conda_install_dir path to install Conda
+ * @param env_name name of Conda environment to create
+ * @param type INSTALL_PKG_CONDA
+ * @param type INSTALL_PKG_CONDA_DEFERRED
+ * @param type INSTALL_PKG_PIP
+ * @param type INSTALL_PKG_PIP_DEFERRED
+ * @param manifest pointer to array of StrList (package list(s))
+ */
void delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, char *env_name, int type, struct StrList *manifest[]);
+
+/**
+ * Update "conda index" on Conda artifact storage
+ * @param ctx pointer to Delivery context
+ * @return 0 on success
+ * @return Non-zero on error
+ */
int delivery_index_conda_artifacts(struct Delivery *ctx);
+
+/**
+ * Execute Delivery test array
+ * @param ctx pointer to Delivery context
+ */
void delivery_tests_run(struct Delivery *ctx);
+
+/**
+ * Determine which packages are to be installed directly from conda or pip,
+ * and which packages need to be built locally
+ * @param ctx pointer to Delivery context
+ * @param type DEFER_CONDA (filter conda packages)
+ * @param type DEFER_PIP (filter python packages)
+ */
void delivery_defer_packages(struct Delivery *ctx, int type);
+
+/**
+ * Configure and activate a Conda installation based on Delivery context
+ * @param ctx pointer to Delivery context
+ * @param conda_install_dir path to Conda installation
+ */
void delivery_conda_enable(struct Delivery *ctx, char *conda_install_dir);
+
+/**
+ * Install Conda
+ * @param install_script path to Conda installation script
+ * @param conda_install_dir path to install Conda
+ */
void delivery_install_conda(char *install_script, char *conda_install_dir);
#endif //OHMYCAL_DELIVERABLE_H