diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-04-10 09:08:40 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-04-10 09:08:40 -0400 |
commit | 1acb82121be8d8be4d423aeb13e11597e5403ecf (patch) | |
tree | 8aa536b01fe898ba79434a5167efdc1d2a3c122e | |
parent | 8c5bf74101b05ed36941c772f34681a3b8e42e65 (diff) | |
download | stasis-1acb82121be8d8be4d423aeb13e11597e5403ecf.tar.gz |
Stop duplicating the jfrog authentication context for each upload context.
* We only need one
* RAM isn't peppered with auth data
* The artifactory URL has been consolidated and exposed as a template variable: deploy.jfrog.url
-rw-r--r-- | include/deliverable.h | 3 | ||||
-rw-r--r-- | src/deliverable.c | 33 | ||||
-rw-r--r-- | src/main.c | 2 |
3 files changed, 21 insertions, 17 deletions
diff --git a/include/deliverable.h b/include/deliverable.h index d712d08..04967c8 100644 --- a/include/deliverable.h +++ b/include/deliverable.h @@ -156,9 +156,10 @@ struct Delivery { } tests[1000]; ///< An array of tests struct Deploy { + struct JFRT_Auth jfrog_auth; + struct JFrog { struct StrList *files; - struct JFRT_Auth auth_ctx; struct JFRT_Upload upload_ctx; char *repo; char *dest; diff --git a/src/deliverable.c b/src/deliverable.c index c535c06..5112d09 100644 --- a/src/deliverable.c +++ b/src/deliverable.c @@ -1617,59 +1617,60 @@ int delivery_init_artifactory(struct Delivery *ctx) { int delivery_artifact_upload(struct Delivery *ctx) { int status = 0; + if (jfrt_auth_init(&ctx->deploy.jfrog_auth)) { + fprintf(stderr, "Failed to initialize Artifactory authentication context\n"); + return -1; + } + for (size_t i = 0; i < sizeof(ctx->deploy.jfrog) / sizeof(*ctx->deploy.jfrog); i++) { if (!ctx->deploy.jfrog[i].files || !ctx->deploy.jfrog[i].dest) { break; } jfrt_upload_init(&ctx->deploy.jfrog[i].upload_ctx); - char *repo = getenv("OMC_JF_REPO"); - if (repo) { - ctx->deploy.jfrog[i].repo = strdup(repo); - } else if (globals.jfrog.repo) { - ctx->deploy.jfrog[i].repo = strdup(globals.jfrog.repo); - } else { + if (!globals.jfrog.repo) { msg(OMC_MSG_WARN, "Artifactory repository path is not configured!\n"); fprintf(stderr, "set OMC_JF_REPO environment variable...\nOr append to configuration file:\n\n"); fprintf(stderr, "[deploy:artifactory]\nrepo = example/generic/repo/path\n\n"); status++; break; + } else if (!ctx->deploy.jfrog[i].repo) { + ctx->deploy.jfrog[i].repo = strdup(globals.jfrog.repo); } - if (isempty(ctx->deploy.jfrog[i].repo) || !strlen(ctx->deploy.jfrog[i].repo)) { + if (!ctx->deploy.jfrog[i].repo || isempty(ctx->deploy.jfrog[i].repo) || !strlen(ctx->deploy.jfrog[i].repo)) { // Unlikely to trigger if the config parser is working correctly msg(OMC_MSG_ERROR, "Artifactory repository path is empty. Cannot continue.\n"); status++; break; } - if (jfrt_auth_init(&ctx->deploy.jfrog[i].auth_ctx)) { - continue; - } - ctx->deploy.jfrog[i].upload_ctx.workaround_parent_only = true; ctx->deploy.jfrog[i].upload_ctx.build_name = ctx->info.build_name; ctx->deploy.jfrog[i].upload_ctx.build_number = ctx->info.build_number; char files[PATH_MAX]; + char dest[PATH_MAX]; // repo + remote dir - if (jfrog_cli_rt_ping(&ctx->deploy.jfrog[i].auth_ctx)) { - msg(OMC_MSG_ERROR | OMC_MSG_L2, "Unable to contact artifactory server: %s\n", ctx->deploy.jfrog[i].auth_ctx.url); + if (jfrog_cli_rt_ping(&ctx->deploy.jfrog_auth)) { + msg(OMC_MSG_ERROR | OMC_MSG_L2, "Unable to contact artifactory server: %s\n", ctx->deploy.jfrog_auth.url); return -1; } if (strlist_count(ctx->deploy.jfrog[i].files)) { for (size_t f = 0; f < strlist_count(ctx->deploy.jfrog[i].files); f++) { + memset(dest, 0, sizeof(dest)); memset(files, 0, sizeof(files)); + snprintf(dest, sizeof(dest) - 1, "%s/%s", ctx->deploy.jfrog[i].repo, ctx->deploy.jfrog[i].dest); snprintf(files, sizeof(files) - 1, "%s", strlist_item(ctx->deploy.jfrog[i].files, f)); - status += jfrog_cli_rt_upload(&ctx->deploy.jfrog[i].auth_ctx, &ctx->deploy.jfrog[i].upload_ctx, files, ctx->deploy.jfrog[i].dest); + status += jfrog_cli_rt_upload(&ctx->deploy.jfrog_auth, &ctx->deploy.jfrog[i].upload_ctx, files, dest); } } } if (!status && ctx->deploy.jfrog[0].files && ctx->deploy.jfrog[0].dest) { - jfrog_cli_rt_build_collect_env(&ctx->deploy.jfrog[0].auth_ctx, ctx->deploy.jfrog[0].upload_ctx.build_name, ctx->deploy.jfrog[0].upload_ctx.build_number); - jfrog_cli_rt_build_publish(&ctx->deploy.jfrog[0].auth_ctx, ctx->deploy.jfrog[0].upload_ctx.build_name, ctx->deploy.jfrog[0].upload_ctx.build_number); + jfrog_cli_rt_build_collect_env(&ctx->deploy.jfrog_auth, ctx->deploy.jfrog[0].upload_ctx.build_name, ctx->deploy.jfrog[0].upload_ctx.build_number); + jfrog_cli_rt_build_publish(&ctx->deploy.jfrog_auth, ctx->deploy.jfrog[0].upload_ctx.build_name, ctx->deploy.jfrog[0].upload_ctx.build_number); } return status; @@ -132,6 +132,7 @@ void globals_free() { guard_strlist_free(&globals.pip_packages); guard_free(globals.jfrog.arch); guard_free(globals.jfrog.os); + guard_free(globals.jfrog.url); guard_free(globals.jfrog.repo); guard_free(globals.jfrog.version); guard_free(globals.jfrog.cli_major_ver); @@ -256,6 +257,7 @@ int main(int argc, char *argv[]) { tpl_register("conda.installer_arch", &ctx.conda.installer_arch); tpl_register("conda.installer_platform", &ctx.conda.installer_platform); tpl_register("deploy.jfrog.repo", &globals.jfrog.repo); + tpl_register("deploy.jfrog.url", &globals.jfrog.url); tpl_register("deploy.docker.registry", &ctx.deploy.docker.registry); tpl_register("workaround.tox_posargs", &globals.workaround.tox_posargs); |