aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@users.noreply.github.com>2026-02-18 18:54:14 -0500
committerGitHub <noreply@github.com>2026-02-18 18:54:14 -0500
commitc7a6b5b8f7e535cc97fb1f8ed1ea2f55cdc28875 (patch)
treeb9c1b1215b03e59bf7b2aaf14ec12fd33fe2d3e1
parentd6b60205974136969212a2e415dadd773b471bc0 (diff)
parentbddde6dde420ae9d0bc6d8c2ad6865de7e90c73e (diff)
downloadstasis-c7a6b5b8f7e535cc97fb1f8ed1ea2f55cdc28875.tar.gz
Merge pull request #126 from jhunkeler/cibuildwheel
Use cibuildwheel
-rw-r--r--src/cli/stasis/stasis_main.c4
-rw-r--r--src/cli/stasis/system_requirements.c16
-rw-r--r--src/lib/core/utils.c1
-rw-r--r--src/lib/delivery/delivery_build.c20
4 files changed, 30 insertions, 11 deletions
diff --git a/src/cli/stasis/stasis_main.c b/src/cli/stasis/stasis_main.c
index 44ee6d7..633d014 100644
--- a/src/cli/stasis/stasis_main.c
+++ b/src/cli/stasis/stasis_main.c
@@ -309,6 +309,10 @@ static void install_build_package() {
msg(STASIS_MSG_ERROR | STASIS_MSG_L2, "'build' tool installation failed\n");
exit(1);
}
+ if (pip_exec("install cibuildwheel")) {
+ msg(STASIS_MSG_ERROR | STASIS_MSG_L2, "'cibuildwheel' tool installation failed\n");
+ exit(1);
+ }
}
static void configure_package_overlay(struct Delivery *ctx, const char *env_name) {
diff --git a/src/cli/stasis/system_requirements.c b/src/cli/stasis/system_requirements.c
index d8d7df3..cb0ebd5 100644
--- a/src/cli/stasis/system_requirements.c
+++ b/src/cli/stasis/system_requirements.c
@@ -38,18 +38,18 @@ void check_system_requirements(struct Delivery *ctx) {
delivery_init_tmpdir(ctx);
}
- struct DockerCapabilities dcap;
- if (!docker_capable(&dcap)) {
+ if (!docker_capable(&ctx->deploy.docker.capabilities)) {
+ struct DockerCapabilities *dcap = &ctx->deploy.docker.capabilities;
msg(STASIS_MSG_L2 | STASIS_MSG_WARN, "Docker is broken\n");
- msg(STASIS_MSG_L3, "Available: %s\n", dcap.available ? "Yes" : "No");
- msg(STASIS_MSG_L3, "Usable: %s\n", dcap.usable ? "Yes" : "No");
- msg(STASIS_MSG_L3, "Podman [Docker Emulation]: %s\n", dcap.podman ? "Yes" : "No");
+ msg(STASIS_MSG_L3, "Available: %s\n", dcap->available ? "Yes" : "No");
+ msg(STASIS_MSG_L3, "Usable: %s\n", dcap->usable ? "Yes" : "No");
+ msg(STASIS_MSG_L3, "Podman [Docker Emulation]: %s\n", dcap->podman ? "Yes" : "No");
msg(STASIS_MSG_L3, "Build plugin(s): ");
- if (dcap.usable) {
- if (dcap.build & STASIS_DOCKER_BUILD) {
+ if (dcap->usable) {
+ if (dcap->build & STASIS_DOCKER_BUILD) {
printf("build ");
}
- if (dcap.build & STASIS_DOCKER_BUILD_X) {
+ if (dcap->build & STASIS_DOCKER_BUILD_X) {
printf("buildx ");
}
puts("");
diff --git a/src/lib/core/utils.c b/src/lib/core/utils.c
index 2cfebdf..00d747f 100644
--- a/src/lib/core/utils.c
+++ b/src/lib/core/utils.c
@@ -1017,6 +1017,7 @@ static int read_vcs_records(const size_t line, char **data) {
// Ignore file comment(s)
if (startswith(data_local, "#") || startswith(data_local, ";")) {
// continue
+ guard_free(data_local);
return 1;
}
diff --git a/src/lib/delivery/delivery_build.c b/src/lib/delivery/delivery_build.c
index c5093d4..2f31b33 100644
--- a/src/lib/delivery/delivery_build.c
+++ b/src/lib/delivery/delivery_build.c
@@ -168,10 +168,9 @@ struct StrList *delivery_build_wheels(struct Delivery *ctx) {
if (!pushd(srcdir)) {
char dname[NAME_MAX];
char outdir[PATH_MAX];
- char cmd[PATH_MAX * 2];
+ char *cmd = NULL;
memset(dname, 0, sizeof(dname));
memset(outdir, 0, sizeof(outdir));
- memset(cmd, 0, sizeof(outdir));
const int dep_status = check_python_package_dependencies(".");
if (dep_status) {
@@ -194,11 +193,26 @@ struct StrList *delivery_build_wheels(struct Delivery *ctx) {
return NULL;
}
- sprintf(cmd, "-m build -w -o %s", outdir);
+ if (asprintf(&cmd, "-m build -w -o %s", outdir) < 0) {
+ SYSERROR("%s", "Unable to allocate memory for build command");
+ return NULL;
+ }
+ if (!strcmp(ctx->system.platform[DELIVERY_PLATFORM], "Linux")
+ && globals.enable_docker
+ && ctx->deploy.docker.capabilities.usable) {
+ guard_free(cmd);
+ if (asprintf(&cmd, "-m cibuildwheel --output-dir %s --only cp%s-manylinux_%s",
+ outdir, ctx->meta.python_compact, ctx->system.arch) < 0) {
+ SYSERROR("%s", "Unable to allocate memory for cibuildwheel command");
+ return NULL;
+ }
+ }
+
if (python_exec(cmd)) {
fprintf(stderr, "failed to generate wheel package for %s-%s\n", ctx->tests[i].name,
ctx->tests[i].version);
guard_strlist_free(&result);
+ guard_free(cmd);
return NULL;
}
popd();