aboutsummaryrefslogtreecommitdiff
path: root/src/lib/core
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@users.noreply.github.com>2024-12-07 19:53:44 -0500
committerGitHub <noreply@github.com>2024-12-07 19:53:44 -0500
commit456c5a481a7dabb53434a696488ac6eecb962d5b (patch)
tree8f4743a4cfdad61f9aeac0dffce050e5bd9eef1d /src/lib/core
parentbdadebfceffad22179b33948113b2bf82f02c1f7 (diff)
parent4c403d1f1318a163b017605c2af6d1a14c579f99 (diff)
downloadstasis-456c5a481a7dabb53434a696488ac6eecb962d5b.tar.gz
Merge pull request #74 from jhunkeler/with-indexer-tlc
Combined: indexer-tlc and clone-existing-directory
Diffstat (limited to 'src/lib/core')
-rw-r--r--src/lib/core/delivery_artifactory.c17
-rw-r--r--src/lib/core/delivery_docker.c2
-rw-r--r--src/lib/core/delivery_init.c30
-rw-r--r--src/lib/core/globals.c1
-rw-r--r--src/lib/core/str.c32
-rw-r--r--src/lib/core/utils.c22
6 files changed, 69 insertions, 35 deletions
diff --git a/src/lib/core/delivery_artifactory.c b/src/lib/core/delivery_artifactory.c
index b69615e..9ad5829 100644
--- a/src/lib/core/delivery_artifactory.c
+++ b/src/lib/core/delivery_artifactory.c
@@ -185,3 +185,20 @@ int delivery_mission_render_files(struct Delivery *ctx) {
return 0;
}
+int delivery_series_sync(struct Delivery *ctx) {
+ struct JFRT_Download dl = {0};
+
+ char *remote_dir = NULL;
+ if (asprintf(&remote_dir, "%s/%s/%s/(*)", globals.jfrog.repo, ctx->meta.mission, ctx->info.build_name) < 0) {
+ SYSERROR("%s", "Unable to allocate bytes for remote directory path");
+ return -1;
+ }
+
+ char *dest_dir = NULL;
+ if (asprintf(&dest_dir, "%s/{1}", ctx->storage.output_dir) < 0) {
+ SYSERROR("%s", "Unable to allocate bytes for destination directory path");
+ return -1;
+ }
+
+ return jfrog_cli_rt_download(&ctx->deploy.jfrog_auth, &dl, remote_dir, dest_dir);
+}
diff --git a/src/lib/core/delivery_docker.c b/src/lib/core/delivery_docker.c
index c170082..57015ad 100644
--- a/src/lib/core/delivery_docker.c
+++ b/src/lib/core/delivery_docker.c
@@ -92,7 +92,7 @@ int delivery_docker(struct Delivery *ctx) {
memset(rsync_cmd, 0, sizeof(rsync_cmd));
sprintf(rsync_cmd, "rsync -avi --progress '%s' '%s'", ctx->storage.wheel_artifact_dir, dest);
if (system(rsync_cmd)) {
- fprintf(stderr, "Failed to copy wheel artifactory to docker build directory\n");
+ fprintf(stderr, "Failed to copy wheel artifacts to docker build directory\n");
}
if (docker_build(ctx->storage.build_docker_dir, args, ctx->deploy.docker.capabilities.build)) {
diff --git a/src/lib/core/delivery_init.c b/src/lib/core/delivery_init.c
index 356a8ce..2fced03 100644
--- a/src/lib/core/delivery_init.c
+++ b/src/lib/core/delivery_init.c
@@ -309,7 +309,7 @@ int bootstrap_build_info(struct Delivery *ctx) {
}
int delivery_exists(struct Delivery *ctx) {
- int release_exists = 0;
+ int release_exists = DELIVERY_NOT_FOUND;
char release_pattern[PATH_MAX] = {0};
sprintf(release_pattern, "*%s*", ctx->info.release_name);
@@ -320,25 +320,27 @@ int delivery_exists(struct Delivery *ctx) {
}
struct JFRT_Search search = {.fail_no_op = true};
- release_exists = jfrog_cli_rt_search(&ctx->deploy.jfrog_auth, &search, globals.jfrog.repo, release_pattern);
- if (release_exists != 2) {
- if (!globals.enable_overwrite && !release_exists) {
- // --fail_no_op returns 2 on failure
- // without: it returns an empty list "[]" and exit code 0
- return 1; // found
- }
+ // release_exists error states:
+ // `jf rt search --fail_no_op` returns 2 on failure
+ // otherwise, search returns an empty list "[]" and returns 0
+ const int match = jfrog_cli_rt_search(&ctx->deploy.jfrog_auth, &search, globals.jfrog.repo, release_pattern);
+ if (!match) {
+ release_exists = DELIVERY_FOUND;
}
} else {
struct StrList *files = listdir(ctx->storage.delivery_dir);
- for (size_t i = 0; i < strlist_count(files); i++) {
+ const size_t files_count = strlist_count(files);
+
+ for (size_t i = 0; i < files_count; i++) {
char *filename = strlist_item(files, i);
- release_exists = fnmatch(release_pattern, filename, FNM_PATHNAME);
- if (!globals.enable_overwrite && !release_exists) {
- guard_strlist_free(&files);
- return 1; // found
+ const int match = fnmatch(release_pattern, filename, FNM_PATHNAME);
+ if (match == 0) {
+ release_exists = DELIVERY_FOUND;
+ break;
}
}
guard_strlist_free(&files);
}
- return 0; // not found
+
+ return release_exists;
}
diff --git a/src/lib/core/globals.c b/src/lib/core/globals.c
index 83465f1..0f0941a 100644
--- a/src/lib/core/globals.c
+++ b/src/lib/core/globals.c
@@ -37,6 +37,7 @@ struct STASIS_GLOBAL globals = {
.enable_docker = true, ///< Toggle docker usage
.enable_artifactory = true, ///< Toggle artifactory server usage
.enable_artifactory_build_info = true, ///< Toggle build-info uploads
+ .enable_artifactory_upload = true, ///< Toggle artifactory file uploads
.enable_testing = true, ///< Toggle [test] block "script" execution. "script_setup" always executes.
.enable_rewrite_spec_stage_2 = true, ///< Leave template stings in output files
.enable_parallel = true, ///< Toggle testing in parallel
diff --git a/src/lib/core/str.c b/src/lib/core/str.c
index 45fb60a..d774e72 100644
--- a/src/lib/core/str.c
+++ b/src/lib/core/str.c
@@ -162,7 +162,7 @@ char *join(char **arr, const char *separator) {
}
char *join_ex(char *separator, ...) {
- va_list ap; // Variadic argument list
+ va_list ap = {0}; // Variadic argument list
size_t separator_len = 0; // Length of separator string
size_t size = 0; // Length of output string
size_t argc = 0; // Number of arguments ^ "..."
@@ -174,13 +174,6 @@ char *join_ex(char *separator, ...) {
return NULL;
}
- // Initialize array
- argv = calloc(argc + 1, sizeof(char **));
- if (argv == NULL) {
- perror("join_ex calloc failed");
- return NULL;
- }
-
// Get length of the separator
separator_len = strlen(separator);
@@ -192,16 +185,21 @@ char *join_ex(char *separator, ...) {
// 5. Append `current` string to `argv` array
// 6. Update argument counter `argc`
va_start(ap, separator);
- for(argc = 0; (current = va_arg(ap, char *)) != NULL; argc++) {
- char **tmp = realloc(argv, (argc + 1) * sizeof(char *));
- if (tmp == NULL) {
- perror("join_ex realloc failed");
- GENERIC_ARRAY_FREE(argv);
- return NULL;
- }
- argv = tmp;
+ va_list ap_tmp = {0};
+ va_copy(ap_tmp, ap);
+ for(argc = 0; (current = va_arg(ap_tmp, char *)) != NULL; argc++) {}
+ va_end(ap_tmp);
+
+ // Initialize array
+ argv = calloc(argc + 1, sizeof(char **));
+ if (argv == NULL) {
+ perror("join_ex calloc failed");
+ return NULL;
+ }
+
+ for(size_t i = 0; i < argc && (current = va_arg(ap, char *)); i++) {
size += strlen(current) + separator_len;
- argv[argc] = strdup(current);
+ argv[i] = strdup(current);
}
va_end(ap);
diff --git a/src/lib/core/utils.c b/src/lib/core/utils.c
index 18731e6..aa4173c 100644
--- a/src/lib/core/utils.c
+++ b/src/lib/core/utils.c
@@ -766,7 +766,15 @@ struct StrList *listdir(const char *path) {
if (!strcmp(rec->d_name, ".") || !strcmp(rec->d_name, "..")) {
continue;
}
- strlist_append(&node, rec->d_name);
+ char *fullpath = join_ex("/", path, rec->d_name, NULL);
+ if (!fullpath) {
+ SYSERROR("%s", "Unable to allocate bytes to construct full path");
+ guard_strlist_free(&node);
+ closedir(dp);
+ return NULL;
+ }
+ strlist_append(&node, fullpath);
+ guard_free(fullpath);
}
closedir(dp);
return node;
@@ -791,8 +799,6 @@ int mkdirs(const char *_path, mode_t mode) {
char result[PATH_MAX] = {0};
int status = 0;
while ((token = strsep(&path, "/")) != NULL && !status) {
- if (token[0] == '.')
- continue;
strcat(result, token);
strcat(result, "/");
status = mkdir(result, mode);
@@ -850,3 +856,13 @@ int env_manipulate_pathstr(const char *key, char *path, int mode) {
return 0;
}
+int gen_file_extension_str(char *filename, const char *extension) {
+ char *ext_orig = strrchr(filename, '.');
+ if (!ext_orig) {
+ strcat(filename, extension);
+ return 0;
+ }
+
+ return replace_text(ext_orig, ext_orig, extension, 0);
+}
+