diff --git a/cmd/osbuild-worker/jobimpl-osbuild.go b/cmd/osbuild-worker/jobimpl-osbuild.go index 52ab08113..00d5529e3 100644 --- a/cmd/osbuild-worker/jobimpl-osbuild.go +++ b/cmd/osbuild-worker/jobimpl-osbuild.go @@ -310,6 +310,23 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error { return nil } } + + // Explicitly check that none of the job dependencies failed. + // This covers mainly the case when there are more than one job dependencies. + for idx := 0; idx < job.NDynamicArgs(); idx++ { + var jobResult worker.JobResult + err = job.DynamicArgs(idx, &jobResult) + if err != nil { + osbuildJobResult.JobError = clienterrors.WorkerClientError(clienterrors.ErrorParsingDynamicArgs, "Error parsing dynamic args") + return err + } + + if jobResult.JobError != nil { + osbuildJobResult.JobError = clienterrors.WorkerClientError(clienterrors.ErrorJobDependency, "Job dependency failed") + return nil + } + } + // copy pipeline info to the result osbuildJobResult.PipelineNames = args.PipelineNames diff --git a/internal/worker/clienterrors/errors.go b/internal/worker/clienterrors/errors.go index 4831f1ba4..22d865374 100644 --- a/internal/worker/clienterrors/errors.go +++ b/internal/worker/clienterrors/errors.go @@ -20,13 +20,13 @@ const ( ErrorInvalidConfig ClientErrorCode = 17 ErrorOldResultCompatible ClientErrorCode = 18 ErrorEmptyManifest ClientErrorCode = 19 - - ErrorDNFDepsolveError ClientErrorCode = 20 - ErrorDNFMarkingErrors ClientErrorCode = 21 - ErrorDNFOtherError ClientErrorCode = 22 - ErrorRPMMDError ClientErrorCode = 23 - ErrorEmptyPackageSpecs ClientErrorCode = 24 - ErrorDNFRepoError ClientErrorCode = 25 + ErrorDNFDepsolveError ClientErrorCode = 20 + ErrorDNFMarkingErrors ClientErrorCode = 21 + ErrorDNFOtherError ClientErrorCode = 22 + ErrorRPMMDError ClientErrorCode = 23 + ErrorEmptyPackageSpecs ClientErrorCode = 24 + ErrorDNFRepoError ClientErrorCode = 25 + ErrorJobDependency ClientErrorCode = 26 ) type ClientErrorCode int @@ -72,6 +72,8 @@ func GetStatusCode(err *Error) StatusCode { return JobStatusUserInputError case ErrorManifestDependency: return JobStatusUserInputError + case ErrorJobDependency: + return JobStatusUserInputError case ErrorEmptyPackageSpecs: return JobStatusUserInputError case ErrorEmptyManifest: @@ -87,6 +89,8 @@ func (e *Error) HasDependencyError() bool { return true case ErrorManifestDependency: return true + case ErrorJobDependency: + return true default: return false }