def get_urls(self, version: str, buildvariant_name: Optional[str] = None) -> EvgURLInfo: """Return multiversion urls for a given version (as binary version or commit hash or evergreen_version_id).""" evg_version = evergreen_conn.get_evergreen_version( self.evg_api, version) if evg_version is None: git_tag, commit_hash = github_conn.get_git_tag_and_commit( self.github_oauth_token, version) LOGGER.info("Found git attributes.", git_tag=git_tag, commit_hash=commit_hash) evg_version = evergreen_conn.get_evergreen_version( self.evg_api, commit_hash) if evg_version is None: return EvgURLInfo() if not buildvariant_name: evg_project = evg_version.project_identifier LOGGER.debug("Found evergreen project.", evergreen_project=evg_project) try: major_minor_version = re.findall(r"\d+\.\d+", evg_project)[-1] except IndexError: major_minor_version = "master" buildvariant_name = self.get_buildvariant_name(major_minor_version) LOGGER.debug("Found buildvariant.", buildvariant_name=buildvariant_name) if buildvariant_name not in evg_version.build_variants_map: raise ValueError( f"Buildvariant {buildvariant_name} not found in evergreen. " f"Available buildvariants can be found in {config.SETUP_MULTIVERSION_CONFIG}." ) urls = evergreen_conn.get_compile_artifact_urls( self.evg_api, evg_version, buildvariant_name, ignore_failed_push=self.ignore_failed_push) return EvgURLInfo(urls=urls, evg_version_id=evg_version.version_id)
def test_version_by_evergreen_version_id_found(self, mock_evg_api, mock_version): evergreen_version_id = "61419efc61837d4ce457132b" def version_by_id_side_effect(ref): if ref == evergreen_version_id: mock_version.version_id = evergreen_version_id return mock_version raise HTTPError() mock_evg_api.version_by_id.side_effect = version_by_id_side_effect evg_version = evergreen_conn.get_evergreen_version( mock_evg_api, evergreen_version_id) self.assertEqual(mock_version, evg_version) self.assertEqual(mock_version.version_id, evergreen_version_id)
def test_version_by_commit_hash_found(self, mock_evg_api, mock_version): commit_hash = "2b0d538db8c0c9b9d7992d4489ba7171c721dfb7" expected_evergreen_version_id = "mongodb_mongo_master_" + commit_hash def version_by_id_side_effect(ref): if ref == expected_evergreen_version_id: mock_version.version_id = expected_evergreen_version_id return mock_version raise HTTPError() mock_evg_api.version_by_id.side_effect = version_by_id_side_effect evg_version = evergreen_conn.get_evergreen_version( mock_evg_api, commit_hash) self.assertEqual(mock_version, evg_version) self.assertEqual(mock_version.version_id, expected_evergreen_version_id)
def test_version_not_found(self, mock_evg_api): mock_evg_api.version_by_id.side_effect = HTTPError evg_version = evergreen_conn.get_evergreen_version( mock_evg_api, "dummy") self.assertIsNone(evg_version)