From 1324ae5e59263a00396cb1a85eee7c7e7c05bf3c Mon Sep 17 00:00:00 2001 From: Aishwarya Mathuria Date: Wed, 8 May 2024 13:19:51 +0530 Subject: [PATCH] suite/run: Add a option to specify suite sha1 The option can be used to specify the workunit sha1, it will override the --suite-branch option if both are provided. If --suite-repo is specified, it will search for the --suite-sha1 in this repo otherwise it will look for the sha1 in the default suite repo. Signed-off-by: Aishwarya Mathuria --- scripts/suite.py | 2 ++ teuthology/suite/run.py | 31 ++++++++++++++++++++++--------- teuthology/suite/util.py | 4 ++-- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/scripts/suite.py b/scripts/suite.py index 4ac7d9cac..ed75ed41b 100644 --- a/scripts/suite.py +++ b/scripts/suite.py @@ -77,6 +77,8 @@ [default: qa] --suite-branch Use this suite branch instead of the ceph branch + --suite-sha1 The suite sha1 to use for the tests (overrides + --suite-branch) --suite-dir Use this alternative directory as-is when assembling jobs from yaml fragments. This causes to be ignored for scheduling diff --git a/teuthology/suite/run.py b/teuthology/suite/run.py index b69b80b58..1750bae8b 100644 --- a/teuthology/suite/run.py +++ b/teuthology/suite/run.py @@ -98,7 +98,7 @@ def create_initial_config(self): self.suite_repo_path = self.args.suite_dir else: self.suite_repo_path = util.fetch_repos( - suite_branch, test_name=self.name, dry_run=self.args.dry_run) + suite_branch, test_name=self.name, dry_run=self.args.dry_run, commit=suite_hash) teuthology_branch, teuthology_sha1 = self.choose_teuthology_branch() @@ -333,14 +333,27 @@ def choose_suite_branch(self): def choose_suite_hash(self, suite_branch): suite_repo_name = self.suite_repo_name - suite_repo_project_or_url = self.args.suite_repo or 'ceph-qa-suite' - suite_hash = util.git_ls_remote( - suite_repo_project_or_url, - suite_branch - ) - if not suite_hash: - exc = BranchNotFoundError(suite_branch, suite_repo_name) - util.schedule_fail(message=str(exc), name=self.name, dry_run=self.args.dry_run) + suite_hash = None + if self.args.suite_sha1: + suite_hash = self.args.suite_sha1 + if self.args.validate_sha1: + suite_hash = util.git_validate_sha1(suite_repo_name, suite_hash) + if not suite_hash: + exc = CommitNotFoundError( + self.args.suite_sha1, + '%s.git' % suite_repo_name + ) + util.schedule_fail(message=str(exc), name=self.name, dry_run=self.args.dry_run) + log.info("suite sha1 explicitly supplied") + else: + suite_repo_project_or_url = self.args.suite_repo or 'ceph-qa-suite' + suite_hash = util.git_ls_remote( + suite_repo_project_or_url, + suite_branch + ) + if not suite_hash: + exc = BranchNotFoundError(suite_branch, suite_repo_name) + util.schedule_fail(message=str(exc), name=self.name, dry_run=self.args.dry_run) log.info("%s branch: %s %s", suite_repo_name, suite_branch, suite_hash) return suite_hash diff --git a/teuthology/suite/util.py b/teuthology/suite/util.py index 7e1ae35cc..fb1c57f55 100644 --- a/teuthology/suite/util.py +++ b/teuthology/suite/util.py @@ -29,7 +29,7 @@ CONTAINER_FLAVOR = 'default' -def fetch_repos(branch, test_name, dry_run): +def fetch_repos(branch, test_name, dry_run, commit=None): """ Fetch the suite repo (and also the teuthology repo) so that we can use it to build jobs. Repos are stored in ~/src/. @@ -49,7 +49,7 @@ def fetch_repos(branch, test_name, dry_run): # We use teuthology's main branch in all cases right now if config.teuthology_path is None: fetch_teuthology('main') - suite_repo_path = fetch_qa_suite(branch) + suite_repo_path = fetch_qa_suite(branch, commit) except BranchNotFoundError as exc: schedule_fail(message=str(exc), name=test_name, dry_run=dry_run) return suite_repo_path