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 /src | |
| 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
Diffstat (limited to 'src')
| -rw-r--r-- | src/deliverable.c | 33 | ||||
| -rw-r--r-- | src/main.c | 2 | 
2 files changed, 19 insertions, 16 deletions
| 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); | 
