diff --git a/cli/migration.py b/cli/migration.py index a017b351b..138698f30 100644 --- a/cli/migration.py +++ b/cli/migration.py @@ -24,7 +24,7 @@ import sys from cli import options -from sonar import exceptions, errcodes, utilities +from sonar import exceptions, errcodes, utilities, version import sonar.logging as log from sonar import platform, rules, qualityprofiles, qualitygates, users, groups from sonar import projects, portfolios, applications @@ -143,6 +143,7 @@ def main() -> None: kwargs = utilities.convert_args(__parse_args("Extract SonarQube platform configuration")) endpoint = platform.Platform(**kwargs) endpoint.verify_connection() + endpoint.set_user_agent(f"sonar-migration {version.MIGRATION_TOOL_VERSION}") except (options.ArgumentsError, exceptions.ObjectNotFound) as e: utilities.exit_fatal(e.message, e.errcode) diff --git a/cli/options.py b/cli/options.py index 7e2e57c4c..01a043c52 100644 --- a/cli/options.py +++ b/cli/options.py @@ -204,7 +204,10 @@ def parse_and_check(parser: ArgumentParser, logger_name: str = None, verify_toke __check_file_writeable(kwargs.get(REPORT_FILE, None)) # Verify version randomly once every 10 runs if not kwargs[SKIP_VERSION_CHECK] and random.randrange(10) == 0: - utilities.check_last_sonar_tools_version() + if is_migration: + utilities.check_last_version("https://pypi.org/simple/sonar-migration") + else: + utilities.check_last_version("https://pypi.org/simple/sonar-tools") kwargs.pop(SKIP_VERSION_CHECK, None) if utilities.is_sonarcloud_url(kwargs[URL]) and kwargs[ORG] is None: raise ArgumentsError(f"Organization (-{ORG_SHORT}) option is mandatory for SonarCloud") diff --git a/sonar/platform.py b/sonar/platform.py index d50e948a3..1c829f4c3 100644 --- a/sonar/platform.py +++ b/sonar/platform.py @@ -53,7 +53,7 @@ _NON_EXISTING_SETTING_SKIPPED = "Setting %s does not exist, skipping..." _HTTP_ERROR = "%s Error: %s HTTP status code %d - %s" -_SONAR_TOOLS_AGENT = {"user-agent": f"sonar-tools {version.PACKAGE_VERSION}"} +_SONAR_TOOLS_AGENT = f"sonar-tools {version.PACKAGE_VERSION}" _UPDATE_CENTER = "https://raw.githubusercontent.com/SonarSource/sonar-update-center-properties/master/update-center-source.properties" LTA = None @@ -88,6 +88,7 @@ def __init__(self, url: str, token: str, org: str = None, cert_file: Optional[st self.http_timeout = int(http_timeout) self.organization = org self.__is_sonarcloud = util.is_sonarcloud_url(self.url) + self._user_agent = _SONAR_TOOLS_AGENT def __str__(self) -> str: """ @@ -136,6 +137,9 @@ def user_data(self) -> types.ApiPayload: self.__user_data = json.loads(self.get("api/users/current").text) return self.__user_data + def set_user_agent(self, user_agent: str) -> None: + self._user_agent = user_agent + def server_id(self) -> str: """ Returns the SonarQube instance server id @@ -210,7 +214,7 @@ def __run_request( ) -> requests.Response: """Makes an HTTP request to SonarQube""" api = _normalize_api(api) - headers = _SONAR_TOOLS_AGENT + headers = {"user-agent": self._user_agent} if params is None: params = {} if self.is_sonarcloud(): diff --git a/sonar/utilities.py b/sonar/utilities.py index 3779a21c6..dc1eebaac 100644 --- a/sonar/utilities.py +++ b/sonar/utilities.py @@ -45,19 +45,20 @@ DEFAULT = "__default__" -def check_last_sonar_tools_version() -> None: +def check_last_version(package_url: str) -> None: """Checks last version of sonar-tools on pypi and displays a warning if the currently used version is older""" log.info("Checking latest sonar-version on pypi.org") try: - r = requests.get(url="https://pypi.org/simple/sonar-tools", headers={"Accept": "application/vnd.pypi.simple.v1+json"}, timeout=10) + r = requests.get(url=package_url, headers={"Accept": "application/vnd.pypi.simple.v1+json"}, timeout=10) r.raise_for_status() except (requests.RequestException, requests.exceptions.HTTPError, requests.exceptions.Timeout) as e: log.info("Can't access pypi.org, error %s", str(e)) return txt_version = json.loads(r.text)["versions"][-1] - log.info("Latest sonar-tools version is %s", txt_version) + package_name = package_url.split("/")[-1] + log.info("Latest %s version is %s", package_name, txt_version) if tuple(".".split(txt_version)) > tuple(".".split(version.PACKAGE_VERSION)): - log.warning("A more recent version of sonar-tools (%s) is available, your are advised to upgrade", txt_version) + log.warning("A more recent version of %s (%s) is available, your are advised to upgrade", package_name, txt_version) def token_type(token: str) -> str: