Alexsander de Souza has proposed merging ~alexsander-souza/maas/+git/maas-release-tools:maintenance_versions_fixes into ~maas-committers/maas/+git/maas-release-tools:main.
Requested reviews: MAAS Committers (maas-committers) For more details, see: https://code.launchpad.net/~alexsander-souza/maas/+git/maas-release-tools/+merge/438934 -- Your team MAAS Committers is requested to review the proposed merge of ~alexsander-souza/maas/+git/maas-release-tools:maintenance_versions_fixes into ~maas-committers/maas/+git/maas-release-tools:main.
diff --git a/maas_release_tools/launchpad.py b/maas_release_tools/launchpad.py index cea786e..c99938a 100644 --- a/maas_release_tools/launchpad.py +++ b/maas_release_tools/launchpad.py @@ -182,7 +182,9 @@ class LaunchpadActions: milestone = self.get_milestone(name) was_active = milestone.is_active if not was_active: - self.logger.info(f"marking milestone {name} as temporarily active") + self.logger.warning( + f"marking milestone {name} as temporarily active" + ) if not self.dry_run: milestone.is_active = True if not was_active: diff --git a/maas_release_tools/maasci.py b/maas_release_tools/maasci.py index 980f6b4..c145342 100644 --- a/maas_release_tools/maasci.py +++ b/maas_release_tools/maasci.py @@ -13,6 +13,7 @@ JJB_SECTION = "maas-integration-ci" JJB_REV_RE = re.compile(r"^.+-g\.(?P<gitrev>[0-9a-z]{9})(-.*)?$") JJB_FAILURE = "FAILURE" +JJB_SKIP = "SKIPPED" class JenkinsConnectionFailed(Exception): @@ -56,6 +57,8 @@ class JenkinsActions: def get_last_build_result_for_rev( self, job_name: str, rev: str ) -> Tuple[str, str]: + if self.dry_run: + return JJB_SKIP, "(skipped)" try: job = self._jenkins.get_job_info(job_name) for build in job["builds"]: diff --git a/maas_release_tools/scripts/release_status.py b/maas_release_tools/scripts/release_status.py index 0edf5fc..2475ca6 100644 --- a/maas_release_tools/scripts/release_status.py +++ b/maas_release_tools/scripts/release_status.py @@ -42,6 +42,7 @@ from ..maasci import ( JJB_CONFIG, JJB_FAILURE, JJB_SECTION, + JJB_SKIP, ) from ..makefile import Makefile from ..version import get_branch_setup_version, ReleaseVersion @@ -106,11 +107,13 @@ class ReleasePreparer: launchpad: LaunchpadActions, jenkins: JenkinsActions, keep_going: bool, + has_qa_approval: bool, ): self.launchpad = launchpad self.jenkins = jenkins self.version = version self.keep_going = keep_going + self.has_qa_approval = has_qa_approval self.snapstore_auth = snapstore_auth @property @@ -673,6 +676,8 @@ class PackagesCopiedToReleasePPA(MAASPPA, PPACopyMixin): ) def check(self) -> tuple[bool, str | None]: + if self.ppa_type == "stable" and not self.preparer.has_qa_approval: + return (False, "Missing Solutions QA approval") if ( self.ppa_type == "candidate" and not self.preparer.version.new_series @@ -703,6 +708,11 @@ class PackagesCopiedToReleasePPA(MAASPPA, PPACopyMixin): ) def fix(self, doit: bool = False) -> tuple[bool, list[str]]: + if self.ppa_type == "stable" and not self.preparer.has_qa_approval: + return False, [ + "Send an email to <solutions...@lists.canonical.com> request the test of this version", + "After their approval, run this tool with `--sol-qa-approval`", + ] if self.source_ppa is None: return False, self.how_to_create_ppa( self.source.ppa_owner, self.source.name @@ -941,12 +951,26 @@ class SnapsInChannel(SnapsUploaded): set(BUILD_ARCHS).difference(released_archs) ) if self.missing_archs: - return False, ( - f"Missing releases for: {', '.join(self.missing_archs)}" - ) + if ( + self.channel.endswith("/stable") + and not self.preparer.has_qa_approval + ): + return (False, "Missing Solutions QA approval") + else: + return False, ( + f"Missing releases for: {', '.join(self.missing_archs)}" + ) return True, None def fix(self, doit=False): + if ( + self.channel.endswith("/stable") + and not self.preparer.has_qa_approval + ): + return False, [ + "Send an email to <solutions...@lists.canonical.com> request the test of this version", + "After their approval, run this tool with `--sol-qa-approval`", + ] steps = [] revision_map, _ = self._get_revisions() @@ -1092,6 +1116,12 @@ class BugMovedToMilestone(ReleaseStep): def title(self): return "Bugs moved to Milestone on Launchpad" + def skip(self) -> bool: + return ( + self.preparer.version.final_version + == self.preparer.version.version + ) + def check(self) -> tuple[bool, str | None]: tag_name = self.preparer.version.final_version try: @@ -1179,8 +1209,10 @@ class SystemIntegrationTests(ReleaseStep): if result == JJB_FAILURE: return ( False, - "Last build has failed (this is not a fatal error)", + "Last build has failed", ) + elif result == JJB_SKIP: + return (True, "System Integration checking disabled by user") except JenkinsConnectionFailed: return ( False, @@ -1190,8 +1222,7 @@ class SystemIntegrationTests(ReleaseStep): return True, None def fix(self, doit: bool = False) -> tuple[bool, list[str]]: - # Not fatal - return True, [f"check {self._url}"] + return False, [f"check {self._url}"] class UsnBuilderUpdated(ReleaseStep): @@ -1318,12 +1349,24 @@ def parse_args(): help="Don't execute actions", ) parser.add_argument( + "--sol-qa-approval", + action="store_true", + dest="sol_qa_approval", + help="SolQA has given the thumbs up", + ) + parser.add_argument( "--launchpad-credentials", default=None, type=FileType(), help="Launchpad credentials file", ) parser.add_argument( + "--jenkins-skip", + action="store_true", + dest="jenkins_skip", + help="Skip System Integration Tests checks", + ) + parser.add_argument( "--jenkins-config", default=JJB_CONFIG, type=FileType(), @@ -1357,7 +1400,7 @@ def main(): dry_run=args.dry_run, ) jenkins = JenkinsActions( - dry_run=args.dry_run, + dry_run=args.jenkins_skip, jenkins_config=args.jenkins_config, server_section=args.jenkins_section, ) @@ -1368,6 +1411,7 @@ def main(): launchpad=launchpad, jenkins=jenkins, keep_going=args.keep_going, + has_qa_approval=args.sol_qa_approval, ) preparer.steps = [ MAASVersion(preparer),
-- Mailing list: https://launchpad.net/~sts-sponsors Post to : sts-sponsors@lists.launchpad.net Unsubscribe : https://launchpad.net/~sts-sponsors More help : https://help.launchpad.net/ListHelp