aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@users.noreply.github.com>2024-07-06 09:49:51 -0400
committerGitHub <noreply@github.com>2024-07-06 09:49:51 -0400
commit8ce824ac4b2f526331093a7150e643700efd4d20 (patch)
tree99e27dee24e82d78941ded4c510e1bac57c3f015 /include
parentabe87056faa6ed02aff3bbf77c1fd78b713a0864 (diff)
downloadstasis-8ce824ac4b2f526331093a7150e643700efd4d20.tar.gz
Add github.c and github.h (#9)
* Add github.c and github.h * Implements get_github_release_notes() * Remove unused variables * Fix circular dependency on tplfunc_frame * Remove predeclaration of tplfunc_frame * tpl_register_func accepts pointer to void instead * tpl_register_func sets maximum number of arguments * Frame is generated within tpl_register_func * Improve template function error handling and return/output management * Remove redundant extern statement * Include github.h and template_func_proto.h in core.h * Expose get_github_release_notes_tplfunc_entrypoint function to template engine * Add template_func_proto.c and template_func_proto.h * Replace free() with guard variant * Fix test_template::test_tpl_register_func * Fix tests * Fix tests * cmd should be at least PATH_MAX in size. * Magic number caused failure to install conda with a long installation path * Implement get_github_release_notes_auto function that bases release note data off test contexts * Disable overwriting releases by default * Add automatic release note generation function call to release_notes.md.in * Fix test_tpl_register_func() * Add enough space for tar command plus a path * Fix circular include * Github functions do not require access to core.h anyway * Add comments to union * Update README to mention template function availability * Add EnvCtl structure * Add runtime checks to avoid running all the way to the end only to be met with a configuration error. * Rename GITHUB to GH * Development docs pre-rough-draft
Diffstat (limited to 'include')
-rw-r--r--include/core.h13
-rw-r--r--include/delivery.h7
-rw-r--r--include/github.h10
-rw-r--r--include/template.h52
-rw-r--r--include/template_func_proto.h9
5 files changed, 72 insertions, 19 deletions
diff --git a/include/core.h b/include/core.h
index ac9ae2f..d065096 100644
--- a/include/core.h
+++ b/include/core.h
@@ -38,6 +38,8 @@
#include "relocation.h"
#include "wheel.h"
#include "junitxml.h"
+#include "github.h"
+#include "template_func_proto.h"
#define guard_runtime_free(X) do { if (X) { runtime_free(X); X = NULL; } } while (0)
#define guard_strlist_free(X) do { if ((*X)) { strlist_free(X); (*X) = NULL; } } while (0)
@@ -57,6 +59,11 @@
} \
} while (0)
+struct EnvCtl {
+ unsigned flags;
+ const char *name[10];
+};
+
struct STASIS_GLOBAL {
bool verbose; //!< Enable verbose output
bool always_update_base_environment; //!< Update base environment immediately after activation
@@ -65,6 +72,7 @@ struct STASIS_GLOBAL {
bool enable_docker; //!< Enable docker image builds
bool enable_artifactory; //!< Enable artifactory uploads
bool enable_testing; //!< Enable package testing
+ bool enable_overwrite; //!< Enable release file clobbering
struct StrList *conda_packages; //!< Conda packages to install after initial activation
struct StrList *pip_packages; //!< Pip packages to install after initial activation
char *tmpdir; //!< Path to temporary storage directory
@@ -85,8 +93,13 @@ struct STASIS_GLOBAL {
char *repo;
char *url;
} jfrog;
+ struct EnvCtl envctl[];
};
extern struct STASIS_GLOBAL globals;
+
+#define STASIS_ENVCTL_PASSTHRU 0 << 1
+#define STASIS_ENVCTL_REQUIRED 1 << 1
+#define STASIS_ENVCTL_REDACT 2 << 1
extern const char *VERSION;
extern const char *AUTHOR;
extern const char *BANNER;
diff --git a/include/delivery.h b/include/delivery.h
index 971705f..969c803 100644
--- a/include/delivery.h
+++ b/include/delivery.h
@@ -391,4 +391,11 @@ int *bootstrap_build_info(struct Delivery *ctx);
int delivery_dump_metadata(struct Delivery *ctx);
+/**
+ * Determine whether a release on-disk matches the release name in use
+ * @param ctx Delivery context
+ * @return 0=no, 1=yes
+ */
+int delivery_exists(struct Delivery *ctx);
+
#endif //STASIS_DELIVERY_H
diff --git a/include/github.h b/include/github.h
new file mode 100644
index 0000000..cebeabf
--- /dev/null
+++ b/include/github.h
@@ -0,0 +1,10 @@
+#ifndef STASIS_GITHUB_H
+#define STASIS_GITHUB_H
+
+#include <curl/curl.h>
+
+#define STASIS_GITHUB_API_VERSION "2022-11-28"
+
+int get_github_release_notes(const char *api_token, const char *repo, const char *tag, const char *target_commitish, char **output);
+
+#endif //STASIS_GITHUB_H \ No newline at end of file
diff --git a/include/template.h b/include/template.h
index ba62667..e3d83fb 100644
--- a/include/template.h
+++ b/include/template.h
@@ -40,28 +40,42 @@ char *tpl_render(char *str);
*/
int tpl_render_to_file(char *str, const char *filename);
-struct tplfunc_frame *tpl_getfunc(char *key);
-struct tplfunc_frame;
-typedef int tplfunc(struct tplfunc_frame *frame, void *result);
+typedef int tplfunc(void *frame, void *data_out);
+
struct tplfunc_frame {
- char *key;
- tplfunc *func;
- int argc;
+ char *key; ///< Name of the function
+ tplfunc *func; ///< Pointer to the function
+ void *data_in; ///< Pointer to internal data (can be NULL)
+ int argc; ///< Maximum number of arguments to accept
union {
- char **t_char_refptr;
- char *t_char_ptr;
- void *t_void_ptr;
- int *t_int_ptr;
- unsigned *t_uint_ptr;
- float *t_float_ptr;
- double *t_double_ptr;
- char t_char;
- int t_int;
- unsigned t_uint;
- float t_float;
- double t_double;
+ char **t_char_refptr; ///< &pointer
+ char *t_char_ptr; ///< pointer
+ void *t_void_ptr; ///< pointer to void
+ int *t_int_ptr; ///< pointer to int
+ unsigned *t_uint_ptr; ///< pointer to unsigned int
+ float *t_float_ptr; ///< pointer to float
+ double *t_double_ptr; ///< pointer to double
+ char t_char; ///< type of char
+ int t_int; ///< type of int
+ unsigned t_uint; ///< type of unsigned int
+ float t_float; ///< type of float
+ double t_double; ///< type of double
} argv[10]; // accept up to 10 arguments
};
-void tpl_register_func(char *key, struct tplfunc_frame *frame);
+
+/**
+ * Register a template function
+ * @param key function name to expose to "func:" interface
+ * @param tplfunc_ptr pointer to function of type tplfunc
+ * @param argc number of function arguments to accept
+ */
+void tpl_register_func(char *key, void *tplfunc_ptr, int argc, void *data_in);
+
+/**
+ * Get the function frame associated with a template function
+ * @param key function name
+ * @return tplfunc_frame structure
+ */
+struct tplfunc_frame *tpl_getfunc(char *key);
#endif //STASIS_TEMPLATE_H
diff --git a/include/template_func_proto.h b/include/template_func_proto.h
new file mode 100644
index 0000000..212759c
--- /dev/null
+++ b/include/template_func_proto.h
@@ -0,0 +1,9 @@
+#ifndef TEMPLATE_FUNC_PROTO_H
+#define TEMPLATE_FUNC_PROTO_H
+
+#include "template.h"
+
+int get_github_release_notes_tplfunc_entrypoint(void *frame, void *data_out);
+int get_github_release_notes_auto_tplfunc_entrypoint(void *frame, void *data_out);
+
+#endif //TEMPLATE_FUNC_PROTO_H \ No newline at end of file