diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-02-23 17:16:18 -0500 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-02-23 17:19:56 -0500 |
commit | 6f41f11cc268faa09e8b4123bf0d995b5fb964e2 (patch) | |
tree | fe18c65217aaaa014b399d94099804a9d5f83557 /src/deliverable.c | |
parent | 8deba7c9840d3cbccf215bf52584ddfe0d848ce4 (diff) | |
download | stasis-6f41f11cc268faa09e8b4123bf0d995b5fb964e2.tar.gz |
Implement initial driver code for docker builds
Diffstat (limited to 'src/deliverable.c')
-rw-r--r-- | src/deliverable.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/deliverable.c b/src/deliverable.c index e1179a4..1860ee6 100644 --- a/src/deliverable.c +++ b/src/deliverable.c @@ -1574,3 +1574,55 @@ int delivery_mission_render_files(struct Delivery *ctx) { return 0; } + +int delivery_docker(struct Delivery *ctx) { + if (!docker_capable(&ctx->docker.capabilities)) { + return -1; + } + char args[PATH_MAX]; + size_t total_tags = strlist_count(ctx->docker.tags); + size_t total_build_args = strlist_count(ctx->docker.build_args); + + if (!total_tags) { + fprintf(stderr, "error: at least one docker image tag must be defined\n"); + return -1; + } + + // Append image tags to command + for (size_t i = 0; i < total_tags; i++) { + char *tag = strlist_item(ctx->docker.tags, i); + sprintf(args + strlen(args), " -t \"%s\" ", tag); + } + + // Append build arguments to command (i.e. --build-arg "key=value" + for (size_t i = 0; i < total_build_args; i++) { + char *build_arg = strlist_item(ctx->docker.build_args, i); + if (!build_arg) { + break; + } + sprintf(args + strlen(args), " --build-arg \"%s\" ", build_arg); + } + + // Build the image + if (docker_build(ctx->storage.delivery_dir, args, ctx->docker.capabilities.build)) { + return -1; + } + + // Test the image + // All tags point back to the same image so test the first one we see + // regardless of how many are defined + char *tag = NULL; + tag = strlist_item(ctx->docker.tags, 0); + if (docker_script(tag, "source /etc/profile\npython -m pip freeze\nmamba info", 0)) { + // test failed -- don't save the image + return -1; + } + + // Test successful, save image + if (docker_save(basename(tag), ctx->storage.delivery_dir)) { + // save failed + return -1; + } + + return 0; +}
\ No newline at end of file |