aboutsummaryrefslogtreecommitdiff
path: root/src/cli
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@users.noreply.github.com>2026-05-12 13:34:13 -0400
committerGitHub <noreply@github.com>2026-05-12 13:34:13 -0400
commitd8ee8c27444a56bb98dd8bd67a019a1e9efbcc10 (patch)
tree6ae1275a5f8e5794b917aac95c6cb1ab3f4cb6c5 /src/cli
parent4649a889a916aa377ebd3ca8f3daa9ac703baa34 (diff)
parent1d91efc28e30c8501428fec8ff6cd7b13dcdfb95 (diff)
downloadstasis-22c7a97286eddf86c3a5619ea19fef3b57dc5cbf.tar.gz
Merge pull request #139 from jhunkeler/bughunt-1002HEAD1.6.1master
Bughunt 0x1002
Diffstat (limited to 'src/cli')
-rw-r--r--src/cli/stasis/args.c2
-rw-r--r--src/cli/stasis/stasis_main.c35
-rw-r--r--src/cli/stasis/system_requirements.c91
-rw-r--r--src/cli/stasis_indexer/helpers.c7
-rw-r--r--src/cli/stasis_indexer/junitxml_report.c10
-rw-r--r--src/cli/stasis_indexer/readmes.c5
-rw-r--r--src/cli/stasis_indexer/stasis_indexer_main.c17
7 files changed, 109 insertions, 58 deletions
diff --git a/src/cli/stasis/args.c b/src/cli/stasis/args.c
index e1c49fe..eb096bc 100644
--- a/src/cli/stasis/args.c
+++ b/src/cli/stasis/args.c
@@ -59,7 +59,7 @@ static int get_option_max_width(struct option option[]) {
int i = 0;
int max = 0;
const int indent = 4;
- while (option[i].name != 0) {
+ while (option[i].name != NULL) {
int len = (int) strlen(option[i].name);
if (option[i].has_arg) {
len += indent;
diff --git a/src/cli/stasis/stasis_main.c b/src/cli/stasis/stasis_main.c
index b902a8a..fb4ed80 100644
--- a/src/cli/stasis/stasis_main.c
+++ b/src/cli/stasis/stasis_main.c
@@ -522,41 +522,6 @@ static void transfer_artifacts(struct Delivery *ctx) {
}
}
-static char *center_text(const char *s, const size_t maxwidth) {
- if (maxwidth < 2) {
- SYSERROR("maximum width must be greater than 0");
- return NULL;
- }
-
- if (maxwidth % 2 != 0) {
- SYSERROR("maximum width (%zu) must be even", maxwidth);
- return NULL;
- }
-
- const size_t s_len = strlen(s);
- if (s_len + 1 > maxwidth) {
- SYSERROR("length of input string (%zu) exceeds maximum width (%zu)", s_len, maxwidth);
- return NULL;
- }
-
- char *result = calloc(maxwidth + 1, sizeof(*result));
- if (!result) {
- SYSERROR("unable to allocate bytes for centered text string");
- return NULL;
- }
- const size_t middle = (maxwidth / 2) - s_len / 2;
- size_t i = 0;
- for (; i < middle; i++) {
- result[i] = ' ';
- }
- result[i++] = 'v';
- strncpy(&result[i], s, maxwidth - middle - 1);
- result[maxwidth - 1] = '\0';
-
- return result;
-}
-
-
int main(int argc, char *argv[]) {
struct Delivery ctx;
struct Process proc = {
diff --git a/src/cli/stasis/system_requirements.c b/src/cli/stasis/system_requirements.c
index 02889da..a48c113 100644
--- a/src/cli/stasis/system_requirements.c
+++ b/src/cli/stasis/system_requirements.c
@@ -3,20 +3,83 @@
void check_system_env_requirements() {
msg(STASIS_MSG_L1, "Checking environment\n");
globals.envctl = envctl_init();
- envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "TMPDIR");
- envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_ROOT");
- envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_SYSCONFDIR");
- envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_CPU_COUNT");
- envctl_register(&globals.envctl, STASIS_ENVCTL_REQUIRED | STASIS_ENVCTL_REDACT, callback_except_gh, "STASIS_GH_TOKEN");
- envctl_register(&globals.envctl, STASIS_ENVCTL_REQUIRED, callback_except_jf, "STASIS_JF_ARTIFACTORY_URL");
- envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_ACCESS_TOKEN");
- envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_JF_USER");
- envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_PASSWORD");
- envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_SSH_KEY_PATH");
- envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_SSH_PASSPHRASE");
- envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_CLIENT_CERT_CERT_PATH");
- envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_CLIENT_CERT_KEY_PATH");
- envctl_register(&globals.envctl, STASIS_ENVCTL_REQUIRED, callback_except_jf, "STASIS_JF_REPO");
+ if (!globals.envctl) {
+ SYSERROR("envctl_init failed");
+ exit(1);
+ }
+
+ int status = 0;
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "TMPDIR");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_ROOT");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_SYSCONFDIR");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_CPU_COUNT");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_REQUIRED | STASIS_ENVCTL_REDACT, callback_except_gh, "STASIS_GH_TOKEN");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_REQUIRED, callback_except_jf, "STASIS_JF_ARTIFACTORY_URL");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_ACCESS_TOKEN");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_JF_USER");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_PASSWORD");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_SSH_KEY_PATH");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_SSH_PASSPHRASE");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_CLIENT_CERT_CERT_PATH");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_CLIENT_CERT_KEY_PATH");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+ status = envctl_register(&globals.envctl, STASIS_ENVCTL_REQUIRED, callback_except_jf, "STASIS_JF_REPO");
+ if (status) {
+ SYSERROR("envctl_register failed");
+ exit(1);
+ }
+
envctl_do_required(globals.envctl, globals.verbose);
}
diff --git a/src/cli/stasis_indexer/helpers.c b/src/cli/stasis_indexer/helpers.c
index 097b0ca..92e2dd4 100644
--- a/src/cli/stasis_indexer/helpers.c
+++ b/src/cli/stasis_indexer/helpers.c
@@ -257,7 +257,7 @@ int get_files(struct StrList **out, const char *path, const char *pattern, ...)
return -1;
}
if ((size_t) len > sizeof(userpattern)) {
- SYSWARN("%s: userpattern truncated!", __FUNCTION__);
+ SYSWARN("userpattern truncated!");
}
va_end(args);
if (!strlen(userpattern)) {
@@ -297,7 +297,10 @@ int get_files(struct StrList **out, const char *path, const char *pattern, ...)
struct StrList *get_docker_images(struct Delivery *ctx, char *pattern) {
char *tarball = NULL;
- asprintf(&tarball, "%s*.tar*", pattern);
+ if (asprintf(&tarball, "%s*.tar*", pattern) < 0) {
+ SYSERROR("unable to allocate bytes for tarball pattern: %s", pattern);
+ return NULL;
+ }
if (!tarball) {
SYSERROR("Unable to allocate bytes for docker image wildcard pattern");
return NULL;
diff --git a/src/cli/stasis_indexer/junitxml_report.c b/src/cli/stasis_indexer/junitxml_report.c
index 073bb61..a7dcd06 100644
--- a/src/cli/stasis_indexer/junitxml_report.c
+++ b/src/cli/stasis_indexer/junitxml_report.c
@@ -30,7 +30,17 @@ static int write_report_output(struct Delivery *ctx, FILE *destfp, const char *x
}
char *bname_tmp = strdup(xmlfilename);
+ if (!bname_tmp) {
+ SYSERROR("unable to allocate bytes for temporary basename");
+ return -1;
+ }
+
char *bname = strdup(path_basename(bname_tmp));
+ if (!bname) {
+ SYSERROR("unable to allocate bytes for basename");
+ return -1;
+ }
+
if (endswith(bname, ".xml")) {
bname[strlen(bname) - 4] = 0;
}
diff --git a/src/cli/stasis_indexer/readmes.c b/src/cli/stasis_indexer/readmes.c
index de9e2f2..836df5c 100644
--- a/src/cli/stasis_indexer/readmes.c
+++ b/src/cli/stasis_indexer/readmes.c
@@ -101,10 +101,9 @@ int indexer_readmes(struct Delivery **ctx, const size_t nelem) {
fprintf(indexfp, "- Receipt: [STASIS input file](../config/%s.ini)\n", current->info.release_name);
char *pattern = NULL;
- asprintf(&pattern, "*%s*%s*",
+ if (asprintf(&pattern, "*%s*%s*",
current->info.build_number,
- strstr((*ctx)->rules.release_fmt, "%p") ? current->meta.python_compact : "" );
- if (!pattern) {
+ strstr((*ctx)->rules.release_fmt, "%p") ? current->meta.python_compact : "" ) < 0) {
SYSERROR("Unable to allocate bytes for pattern");
fclose(indexfp);
return -1;
diff --git a/src/cli/stasis_indexer/stasis_indexer_main.c b/src/cli/stasis_indexer/stasis_indexer_main.c
index 2bf72fd..e87122e 100644
--- a/src/cli/stasis_indexer/stasis_indexer_main.c
+++ b/src/cli/stasis_indexer/stasis_indexer_main.c
@@ -48,9 +48,9 @@ int indexer_combine_rootdirs(const char *dest, char **rootdirs, const size_t roo
if (!access(srcdir_with_output, F_OK)) {
srcdir = srcdir_with_output;
}
- snprintf(cmd + strlen(cmd), sizeof(cmd) - strlen(cmd), "'%s'/ ", srcdir);
+ snprintf(cmd + strlen(cmd), sizeof(cmd) - strlen(cmd) - non_format_len("'%s'/ "), "'%s'/ ", srcdir);
}
- snprintf(cmd + strlen(cmd), sizeof(cmd) - strlen(cmd), " %s/", destdir);
+ snprintf(cmd + strlen(cmd), sizeof(cmd) - strlen(cmd) - non_format_len(" %s/"), " %s/", destdir);
if (globals.verbose) {
puts(cmd);
@@ -304,7 +304,17 @@ int main(const int argc, char *argv[]) {
struct Delivery ctx = {0};
- printf(BANNER, VERSION, AUTHOR);
+ char *version = center_text(VERSION, strlen(STASIS_BANNER_HEADER));
+ if (!version) {
+ SYSERROR("%s", "version too long?");
+ version = strdup(VERSION);
+ if (!version) {
+ SYSERROR("%s", "unable to allocate uncentered fallback version string");
+ exit(1);
+ }
+ }
+ printf(BANNER, version, AUTHOR);
+ guard_free(version);
indexer_init_dirs(&ctx, workdir);
@@ -325,6 +335,7 @@ int main(const int argc, char *argv[]) {
mkdirs(ctx.storage.wheel_artifact_dir, 0755);
}
+ msg(STASIS_MSG_L1, "Configure Micromamba\n");
struct MicromambaInfo m;
if (micromamba_configure(&ctx, &m)) {
SYSERROR("Unable to configure micromamba");