azure-devops/azext_devops/dev/pipelines/release_definition.py (56 lines of code) (raw):

# -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- from webbrowser import open_new from knack.log import get_logger from azext_devops.dev.common.services import (get_release_client, resolve_instance_and_project) from azext_devops.dev.common.uuid import is_uuid logger = get_logger(__name__) def release_definition_list(name=None, top=None, organization=None, project=None, artifact_type=None, artifact_source_id=None, detect=None): """List release definitions. :param name: Limit results to definitions with this name or contains this name. Example: "FabCI" :type name: str :param top: Maximum number of definitions to list. :type top: int :param artifact_type: Release definitions with given artifactType will be returned. :type artifact_type: str :param artifact_source_id: Limit results to definitions associated with this artifact_source_id. e.g. For build it would be {projectGuid}:{BuildDefinitionId}, for Jenkins it would be {JenkinsConnectionId}:{JenkinsDefinitionId}, for TfsOnPrem it would be {TfsOnPremConnectionId}:{ProjectName}:{TfsOnPremDefinitionId}. For third-party artifacts e.g. TeamCity, BitBucket you may refer 'uniqueSourceIdentifier' inside vss-extension.json at https://github.com/Microsoft/vsts-rm-extensions/blob/master/Extensions. :type artifact_source_id: str :rtype: [ReleaseDefinitionReference] """ organization, project = resolve_instance_and_project( detect=detect, organization=organization, project=project) client = get_release_client(organization) query_order = 'nameAscending' definition_references = client.get_release_definitions( project=project, search_text=name, artifact_source_id=artifact_source_id, artifact_type=artifact_type, top=top, query_order=query_order) return definition_references def release_definition_show(id=None, name=None, open=False, organization=None, project=None, # pylint: disable=redefined-builtin detect=None): """Get the details of a release definition. :param id: ID of the definition. :type id: int :param name: Name of the definition. Ignored if --id is supplied. :type name: str :param open: Open the definition summary page in your web browser. :type open: bool :rtype: ReleaseDefinitionReference """ organization, project = resolve_instance_and_project( detect=detect, organization=organization, project=project) client = get_release_client(organization) if id is None: if name is not None: id = get_definition_id_from_name(name, client, project) else: raise ValueError("Either the --id argument or the --name argument must be supplied for this command.") release_definition = client.get_release_definition(definition_id=id, project=project) if open: _open_definition(release_definition) return release_definition def _open_definition(definition): """Opens the release definition in the default browser. :param :class:`<ReleaseDefinitionReference> <v5_0.release.models.ReleaseDefinitionReference>` definition: """ url = _get_release_definition_web_url(definition) if url is not None and url: logger.debug('Opening web page: %s', url) open_new(url=url) def get_definition_id_from_name(name, client, project): definition_references = client.get_release_definitions( project=project, search_text=name, is_exact_name_match='true') if len(definition_references) == 1: return definition_references[0].id if len(definition_references) > 1: if is_uuid(project): project = definition_references[0].project.name message = 'Multiple definitions were found matching name "{name}" in project "{project}". Try '\ + 'supplying the definition ID.' raise ValueError(message.format(name=name, project=project)) raise ValueError('There were no release definitions matching name "{name}" in project "{project}".' .format(name=name, project=project)) def _get_release_definition_web_url(definition): links = definition._links # pylint: disable=protected-access if links is not None and links: properties = links.additional_properties if properties is not None and properties: web_url = properties.get('web') if web_url is not None and web_url: return web_url.get('href') return None