aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2024-04-10 09:20:18 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2024-04-10 09:20:18 -0400
commit6cab5d431e8de192af156efef21ef97efc3a8830 (patch)
tree2a4fb956628c4aee869a1a96b9beac89d67b200b
parent8c69a18b82be2e8179883b1d48cfb2fc0520b6f2 (diff)
downloadstasis-6cab5d431e8de192af156efef21ef97efc3a8830.tar.gz
Add check_system_requirements() helper
* Fail out early on error to avoid user frustration
-rw-r--r--src/main.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index 3bd5b47..754047d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -143,6 +143,44 @@ void globals_free() {
guard_free(globals.workaround.tox_posargs);
}
+static void check_system_requirements() {
+ const char *tools_required[] = {
+ "rsync",
+ NULL,
+ };
+
+ msg(OMC_MSG_L1, "Checking system requirements\n");
+ for (size_t i = 0; tools_required[i] != NULL; i++) {
+ if (!find_program(tools_required[i])) {
+ msg(OMC_MSG_L2 | OMC_MSG_ERROR, "'%s' must be installed.\n", tools_required[i]);
+ exit(1);
+ }
+ }
+
+ struct DockerCapabilities dcap;
+ if (!docker_capable(&dcap)) {
+ msg(OMC_MSG_L2 | OMC_MSG_WARN, "Docker is broken\n");
+ msg(OMC_MSG_L3, "Available: %s\n", dcap.available ? "Yes" : "No");
+ msg(OMC_MSG_L3, "Usable: %s\n", dcap.usable ? "Yes" : "No");
+ msg(OMC_MSG_L3, "Podman [Docker Emulation]: %s\n", dcap.podman ? "Yes" : "No");
+ msg(OMC_MSG_L3, "Build plugin(s): ");
+ if (dcap.usable) {
+ if (dcap.build & OMC_DOCKER_BUILD) {
+ printf("build ");
+ }
+ if (dcap.build & OMC_DOCKER_BUILD_X) {
+ printf("buildx ");
+ }
+ puts("");
+ } else {
+ printf("N/A\n");
+ }
+
+ // disable docker builds
+ globals.enable_docker = false;
+ }
+}
+
int main(int argc, char *argv[]) {
struct INIFILE *cfg = NULL;
struct INIFILE *ini = NULL;
@@ -230,6 +268,7 @@ int main(int argc, char *argv[]) {
printf(BANNER, VERSION, AUTHOR);
+ check_system_requirements();
msg(OMC_MSG_L1, "Setup\n");
// Expose variables for use with the template engine