From: Michael Tremer Date: Tue, 28 Jan 2025 16:29:05 +0000 (+0000) Subject: job: Send an API call once the job has finished X-Git-Tag: 0.9.30~315 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c003d0bbfdadc93c707e994b4d4997918af6360;p=pakfire.git job: Send an API call once the job has finished Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/buildservice.c b/src/pakfire/buildservice.c index be53e78e..67e602a4 100644 --- a/src/pakfire/buildservice.c +++ b/src/pakfire/buildservice.c @@ -657,49 +657,3 @@ ERROR: return r; } - -int pakfire_buildservice_job_finished(struct pakfire_buildservice* service, - const char* uuid, int success, const char* logfile, const char** packages) { - struct pakfire_xfer* xfer = NULL; - int r; - - // Create a new xfer - r = pakfire_buildservice_xfer_create(&xfer, service, "/api/v1/jobs/%s", uuid); - if (r) - goto ERROR; - - // Enable authentication - r = pakfire_xfer_auth(xfer); - if (r) - goto ERROR; - - // Has the job been successful? - r = pakfire_xfer_add_param(xfer, "success", "%s", (success) ? "true" : "false"); - if (r) - goto ERROR; - - // Logfile - if (logfile) { - r = pakfire_xfer_add_param(xfer, "logfile", "%s", logfile); - if (r) - goto ERROR; - } - - // Packages - for (const char** package = packages; *package; package++) { - r = pakfire_xfer_add_param(xfer, "package", "%s", *package); - if (r) - goto ERROR; - } - - // Send the request - r = pakfire_xfer_run_api_request(xfer, NULL); - if (r) - goto ERROR; - -ERROR: - if (xfer) - pakfire_xfer_unref(xfer); - - return r; -} diff --git a/src/pakfire/buildservice.h b/src/pakfire/buildservice.h index 06fe4c77..d39381fb 100644 --- a/src/pakfire/buildservice.h +++ b/src/pakfire/buildservice.h @@ -64,9 +64,4 @@ int pakfire_buildservice_create_repo(struct pakfire_buildservice* service, int pakfire_buildservice_delete_repo(struct pakfire_buildservice* service, const char* distro, const char* name); -// Jobs - -int pakfire_buildservice_job_finished(struct pakfire_buildservice* service, - const char* uuid, int success, const char* logfile, const char** packages); - #endif /* PAKFIRE_BUILDSERVICE_H */ diff --git a/src/pakfire/job.c b/src/pakfire/job.c index 4f4303b6..43dcf747 100644 --- a/src/pakfire/job.c +++ b/src/pakfire/job.c @@ -290,6 +290,71 @@ ERROR: return r; } +/* + Called when the job has finished with status as the error code. +*/ +static int pakfire_job_finished(struct pakfire_job* job, int status) { + struct pakfire_xfer* xfer = NULL; + char job_id[UUID_STR_LEN]; + int r; + + // Format the job ID as string + uuid_unparse(job->job_id, job_id); + + DEBUG(job->ctx, "Job %s has finished with status %d\n", job_id, status); + + // Check if we have any uploads - except for test builds + if (!(job->flags & PAKFIRE_JOB_TEST)) { + if (!job->uploads) { + ERROR(job->ctx, "There are no uploads\n"); + r = -EINVAL; + goto ERROR; + } + } + + // Create a new xfer + r = pakfire_job_xfer_create(&xfer, job, "/api/v1/jobs/%s/finished", job_id); + if (r < 0) + goto ERROR; + + // Enable authentication + r = pakfire_xfer_auth(xfer); + if (r < 0) + goto ERROR; + + // Has the job been successful? + r = pakfire_xfer_add_param(xfer, "success", "%s", (status == 0) ? "true" : "false"); + if (r < 0) + goto ERROR; + +#if 0 + // Logfile + if (logfile) { + r = pakfire_xfer_add_param(xfer, "logfile", "%s", logfile); + if (r) + goto ERROR; + } +#endif + + // Packages + for (char** upload = job->uploads; *upload; upload++) { + r = pakfire_xfer_add_param(xfer, "package", "%s", *upload); + if (r < 0) + goto ERROR; + } + + // Send the request + r = pakfire_xfer_run_api_request(xfer, NULL); + if (r < 0) + goto ERROR; + +ERROR: + if (xfer) + pakfire_xfer_unref(xfer); + + return r; +} + static int pakfire_job_crashed(struct pakfire_job* job, const siginfo_t* si) { struct pakfire_xfer* xfer = NULL; char job_id[UUID_STR_LEN]; @@ -420,7 +485,6 @@ static int pakfire_job_exited(sd_event_source* s, const siginfo_t* si, void* dat // Update state job->state = PAKFIRE_JOB_STATE_EXITED; - break; case CLD_KILLED: @@ -589,6 +653,11 @@ static int pakfire_job_child(struct pakfire_job* job) { // Run the build r = pakfire_build_exec(build, job->pkg, pakfire_job_result, job); + // Signal that the job has finished + r = pakfire_job_finished(job, r); + if (r < 0) + goto ERROR; + ERROR: if (build) pakfire_build_unref(build);