Пример #1
0
    def get_latest_urls(self, version):
        """Return latest urls."""
        urls = {}

        evg_project = f"mongodb-mongo-v{version}"
        if version == "master":
            evg_project = "mongodb-mongo-master"

        if evg_project not in self.config.evergreen_projects:
            return urls

        LOGGER.debug("Found evergreen project.", evergreen_project=evg_project)
        # Assuming that project names contain <major>.<minor> version
        major_minor_version = version

        buildvariant_name = self.get_buildvariant_name(major_minor_version)
        LOGGER.debug("Found buildvariant.", buildvariant_name=buildvariant_name)

        evg_versions = evergreen_conn.get_evergreen_versions(self.evg_api, evg_project)

        for evg_version in evg_versions:
            if hasattr(evg_version, "build_variants_map"):
                if buildvariant_name not in evg_version.build_variants_map:
                    buildvariant_name = self.fallback_to_generic_buildvariant(major_minor_version)

                curr_urls = evergreen_conn.get_compile_artifact_urls(
                    self.evg_api, evg_version, buildvariant_name,
                    ignore_failed_push=self.ignore_failed_push)
                if "Binaries" in curr_urls:
                    urls = curr_urls
                    break

        return urls
Пример #2
0
    def get_latest_urls(
            self,
            version: str,
            start_from_revision: Optional[str] = None) -> EvgURLInfo:
        """Return latest urls."""
        urls = {}
        actual_version_id = None

        # Assuming that project names contain <major>.<minor> version
        evg_project = f"mongodb-mongo-v{version}"
        if version == "master":
            evg_project = "mongodb-mongo-master"

        evg_versions = evergreen_conn.get_evergreen_versions(
            self.evg_api, evg_project)
        evg_version = None
        try:
            evg_version = next(evg_versions)
        except HTTPError as err:
            # Evergreen currently returns 500 if the version does not exist.
            # TODO (SERVER-59675): Remove the check for 500 once evergreen returns 404 instead.
            if not (err.response.status_code == 500
                    or err.response.status_code == 404):
                raise
        except StopIteration:
            return EvgURLInfo()

        buildvariant_name = self.get_buildvariant_name(version)
        LOGGER.debug("Found buildvariant.",
                     buildvariant_name=buildvariant_name)

        found_start_revision = start_from_revision is None

        for evg_version in chain(iter([evg_version]), evg_versions):
            # Skip all versions until we get the revision we should start looking from
            if found_start_revision is False and evg_version.revision != start_from_revision:
                LOGGER.warning("Skipping evergreen version.",
                               evg_version=evg_version)
                continue
            else:
                found_start_revision = True

            if hasattr(evg_version, "build_variants_map"):
                if buildvariant_name not in evg_version.build_variants_map:
                    continue

                curr_urls = evergreen_conn.get_compile_artifact_urls(
                    self.evg_api,
                    evg_version,
                    buildvariant_name,
                    ignore_failed_push=self.ignore_failed_push)
                if "Binaries" in curr_urls:
                    urls = curr_urls
                    actual_version_id = evg_version.version_id
                    break

        return EvgURLInfo(urls=urls, evg_version_id=actual_version_id)