aboutsummaryrefslogtreecommitdiff
path: root/src/template_func_proto.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/template_func_proto.c')
-rw-r--r--src/template_func_proto.c50
1 files changed, 48 insertions, 2 deletions
diff --git a/src/template_func_proto.c b/src/template_func_proto.c
index 3cf66e4..9c325bb 100644
--- a/src/template_func_proto.c
+++ b/src/template_func_proto.c
@@ -74,7 +74,10 @@ int get_junitxml_file_entrypoint(void *frame, void *data_out) {
const struct Delivery *ctx = (const struct Delivery *) f->data_in;
char cwd[PATH_MAX] = {0};
- getcwd(cwd, PATH_MAX - 1);
+ if (!getcwd(cwd, PATH_MAX - 1)) {
+ SYSERROR("unable to determine current working directory: %s", strerror(errno));
+ return -1;
+ }
char nametmp[PATH_MAX] = {0};
strcpy(nametmp, cwd);
char *name = path_basename(nametmp);
@@ -96,7 +99,10 @@ int get_basetemp_dir_entrypoint(void *frame, void *data_out) {
const struct Delivery *ctx = (const struct Delivery *) f->data_in;
char cwd[PATH_MAX] = {0};
- getcwd(cwd, PATH_MAX - 1);
+ if (!getcwd(cwd, PATH_MAX - 1)) {
+ SYSERROR("unable to determine current working directory: %s", strerror(errno));
+ return -1;
+ }
char nametmp[PATH_MAX] = {0};
strcpy(nametmp, cwd);
char *name = path_basename(nametmp);
@@ -109,4 +115,44 @@ int get_basetemp_dir_entrypoint(void *frame, void *data_out) {
sprintf(*output, "%s/truth-%s-%s", ctx->storage.tmpdir, name, ctx->info.release_name);
return result;
+}
+
+int tox_run_entrypoint(void *frame, void *data_out) {
+ char **output = (char **) data_out;
+ struct tplfunc_frame *f = (struct tplfunc_frame *) frame;
+ const struct Delivery *ctx = (const struct Delivery *) f->data_in;
+
+ // Apply workaround for tox positional arguments
+ char *toxconf = NULL;
+ if (!access("tox.ini", F_OK)) {
+ if (!fix_tox_conf("tox.ini", &toxconf)) {
+ msg(STASIS_MSG_L3, "Fixing tox positional arguments\n");
+ *output = calloc(STASIS_BUFSIZ, sizeof(**output));
+ if (!*output) {
+ return -1;
+ }
+ char *basetemp_path = NULL;
+ if (get_basetemp_dir_entrypoint(f, &basetemp_path)) {
+ return -2;
+ }
+ char *jxml_path = NULL;
+ if (get_junitxml_file_entrypoint(f, &jxml_path)) {
+ guard_free(basetemp_path);
+ return -3;
+ }
+ const char *tox_target = f->argv[0].t_char_ptr;
+ const char *pytest_args = f->argv[1].t_char_ptr;
+ if (isempty(toxconf) || !strcmp(toxconf, "/")) {
+ SYSERROR("Unsafe toxconf path: '%s'", toxconf);
+ guard_free(basetemp_path);
+ guard_free(jxml_path);
+ return -4;
+ }
+ snprintf(*output, STASIS_BUFSIZ - 1, "\npip install tox && (tox -e py%s%s -c %s --root . -- --basetemp=\"%s\" --junitxml=\"%s\" %s ; rm -f '%s')\n", ctx->meta.python_compact, tox_target, toxconf, basetemp_path, jxml_path, pytest_args ? pytest_args : "", toxconf);
+
+ guard_free(jxml_path);
+ guard_free(basetemp_path);
+ }
+ }
+ return 0;
} \ No newline at end of file