Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion cli/migration.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)

Expand Down
5 changes: 4 additions & 1 deletion cli/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
8 changes: 6 additions & 2 deletions sonar/platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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:
"""
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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():
Expand Down
9 changes: 5 additions & 4 deletions sonar/utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down