diff options
Diffstat (limited to 'src/lib/core')
-rw-r--r-- | src/lib/core/delivery_artifactory.c | 17 | ||||
-rw-r--r-- | src/lib/core/delivery_docker.c | 2 | ||||
-rw-r--r-- | src/lib/core/delivery_init.c | 30 | ||||
-rw-r--r-- | src/lib/core/globals.c | 1 | ||||
-rw-r--r-- | src/lib/core/str.c | 32 | ||||
-rw-r--r-- | src/lib/core/utils.c | 22 |
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); +} + |