예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
 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)