diff --git a/scripts/fullbuildpipeline.py b/scripts/fullbuildpipeline.py index 2c0737cebbb644317999458c2a168aec7a605280..b82d75017f598bf61b5434361e889940123b7172 100755 --- a/scripts/fullbuildpipeline.py +++ b/scripts/fullbuildpipeline.py @@ -11,9 +11,12 @@ class FullBuildPipeline: self.project = project self.commit_sha = commit_sha self.upstream_pipeline = self.__get_upstream_pipeline() - self.build_pipelines = self.__get_build_pipelines() - def __get_upstream_pipeline(self) -> ProjectPipeline: + self.build_pipelines = None + if self.upstream_pipeline: + self.build_pipelines = self.__get_build_pipelines() + + def __get_upstream_pipeline(self, retry=1) -> ProjectPipeline: """ Get upstream (main) pipeline for the specified commit in the repository. @@ -26,7 +29,7 @@ class FullBuildPipeline: ) if not pipelines_for_commit: - return {} + return None # For the main branch we have two types of pipelines: short and full. # The short one just retriggers the full pipeline and does not contain any artifacts. @@ -39,6 +42,12 @@ class FullBuildPipeline: if p.source != "push": build_pipeline = p + # If the previous pipeline was canceled and a new one has not yet been created, + # wait for 10 seconds and then try again. + if build_pipeline.status == "canceled" and retry: + time.sleep(10) + return self.__get_upstream_pipeline(retry=0) + return build_pipeline def __get_build_pipelines(self) -> dict[str, tuple[ProjectPipelineJob]]: @@ -104,7 +113,8 @@ class FullBuildPipeline: try: jobs = self.build_pipelines[pipeline_name] except KeyError: - return None + print(f"Failed to get build jobs for '{pipeline_name}' pipeline") + return () for job in jobs: if fnmatch.fnmatch(job.name, job_filter): diff --git a/scripts/handle_artifacts.py b/scripts/handle_artifacts.py index dea6ea456c1d1e4eaecbf373da0181227b90063f..56cd75afd09e00f0b21ad7ed77b00dc263eec6f4 100755 --- a/scripts/handle_artifacts.py +++ b/scripts/handle_artifacts.py @@ -60,10 +60,10 @@ def main(): latest_successful_build_sha = None for commit in manifest_commits: - if ( - FullBuildPipeline(manifest_project, commit.id).upstream_pipeline.status - != "success" - ): + pipeline = FullBuildPipeline(manifest_project, commit.id) + if not pipeline.upstream_pipeline: + continue + if pipeline.upstream_pipeline.status != "success": continue else: latest_successful_build_sha = commit.id @@ -88,7 +88,11 @@ def main(): for commit in manifest_commits: full_build_pipeline = FullBuildPipeline(manifest_project, commit.id) + if not full_build_pipeline.upstream_pipeline: + continue + print(f"Full pipeline: {full_build_pipeline.upstream_pipeline}") + for pipelinejob in full_build_pipeline.get_jobs(): if pipelinejob.status != "success":