/// <summary>
        /// Returns the build definition for the <paramref name="settings"/>.
        /// </summary>
        /// <param name="log">The Cake log context.</param>
        /// <param name="settings">Settings for accessing AzureDevOps.</param>
        /// <returns>The build definition for the BuildDefinitionName on <paramref name="settings"/>.
        /// <c>null</c> if the BuildDefinitionName was not set or no build definition was found.</returns>
        private static AzureDevOpsBuildDefinition GetBuildDefinition(
            ICakeLog log,
            AzureDevOpsBuildsSettings settings)
        {
            log.NotNull(nameof(log));
            settings.NotNull(nameof(settings));

            var buildDefinitions =
                AzureDevOpsBuildsDefinitionHelper
                .GetAzureDevOpsBuildDefinitions(
                    log,
                    settings);

            var buildDefinition =
                buildDefinitions
                .SingleOrDefault(x => x.Name.Equals(settings.BuildDefinitionName, StringComparison.InvariantCultureIgnoreCase));

            if (buildDefinition == null)
            {
                log.Verbose(
                    "Build definition '{0}' not found",
                    settings.BuildDefinitionName);
            }

            log.Verbose(
                "Build definition '{0}' found",
                settings.BuildDefinitionName);

            return(buildDefinition);
        }
예제 #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AzureDevOpsBuildsSettings"/> class
        /// based on the instance of a <see cref="AzureDevOpsBuildsSettings"/> class.
        /// </summary>
        /// <param name="settings">Settings containing the parameters.</param>
        public AzureDevOpsBuildsSettings(AzureDevOpsBuildsSettings settings)
        {
            settings.NotNull(nameof(settings));

            this.CollectionUrl = settings.CollectionUrl;
            this.ProjectGuid   = settings.ProjectGuid;
            this.ProjectName   = settings.ProjectName;
            this.Credentials   = settings.Credentials;
        }
예제 #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AzureDevOpsBuild"/> class.
        /// </summary>
        /// <param name="log">The Cake log context.</param>
        /// <param name="settings">Settings for accessing AzureDevOps.</param>
        /// <param name="build">The build.</param>
        internal AzureDevOpsBuild(ICakeLog log, AzureDevOpsBuildsSettings settings, Build build)
        {
            log.NotNull(nameof(log));
            settings.NotNull(nameof(settings));
            build.NotNull(nameof(build));

            this.log   = log;
            this.build = build;
            this.buildClientFactory = new BuildClientFactory();
            this.credentials        = settings.Credentials;
            this.CollectionUrl      = settings.CollectionUrl;
        }
        /// <summary>
        /// Returns the build definition for the <paramref name="settings"/>.
        /// </summary>
        /// <param name="log">The Cake log context.</param>
        /// <param name="buildHttpClient">The Http build client.</param>
        /// <param name="settings">Settings for accessing AzureDevOps.</param>
        /// <returns>The build definition for the BuildDefinitionName on <paramref name="settings"/>.
        /// <c>null</c> if the BuildDefinitionName was not set or no build definition was found.</returns>
        private static BuildDefinitionReference GetBuildDefinition(
            ICakeLog log,
            BuildHttpClient buildHttpClient,
            AzureDevOpsBuildsSettings settings)
        {
            log.NotNull(nameof(log));
            buildHttpClient.NotNull(nameof(buildHttpClient));
            settings.NotNull(nameof(settings));

            List <BuildDefinitionReference> buildDefinitions = null;

            if (settings.ProjectGuid != Guid.Empty)
            {
                buildDefinitions =
                    buildHttpClient
                    .GetDefinitionsAsync(settings.ProjectGuid)
                    .ConfigureAwait(false)
                    .GetAwaiter()
                    .GetResult();
            }
            else if (!string.IsNullOrWhiteSpace(settings.ProjectName))
            {
                buildDefinitions =
                    buildHttpClient
                    .GetDefinitionsAsync(settings.ProjectName)
                    .ConfigureAwait(false)
                    .GetAwaiter()
                    .GetResult();
            }
            else
            {
                throw new ArgumentOutOfRangeException(
                          nameof(settings),
                          "Either ProjectGuid or ProjectName needs to be set");
            }

            var buildDefinition =
                buildDefinitions
                .SingleOrDefault(x => x.Name.Equals(settings.BuildDefinitionName, StringComparison.InvariantCultureIgnoreCase));

            if (buildDefinition == null)
            {
                log.Verbose(
                    "Build definition '{0}' not found",
                    settings.BuildDefinitionName);
            }

            log.Verbose(
                "Build definition '{0}' found",
                settings.BuildDefinitionName);

            return(buildDefinition);
        }
예제 #5
0
        /// <summary>
        /// Returns the build definitions for the <paramref name="settings"/>.
        /// </summary>
        /// <param name="log">The Cake log context.</param>
        /// <param name="settings">Settings for accessing Azure DevOps.</param>
        /// <returns>The build definitions for the the <paramref name="settings"/>.</returns>
        internal static IEnumerable <AzureDevOpsBuildDefinition> GetAzureDevOpsBuildDefinitions(
            ICakeLog log,
            AzureDevOpsBuildsSettings settings)
        {
            log.NotNull(nameof(log));
            settings.NotNull(nameof(settings));

            List <BuildDefinitionReference> buildDefinitions = null;

            using (var buildHttpClient = new BuildClientFactory().CreateBuildClient(settings.CollectionUrl, settings.Credentials))
            {
                if (settings.ProjectGuid != Guid.Empty)
                {
                    buildDefinitions =
                        buildHttpClient
                        .GetDefinitionsAsync(settings.ProjectGuid)
                        .ConfigureAwait(false)
                        .GetAwaiter()
                        .GetResult();
                }
                else if (!string.IsNullOrWhiteSpace(settings.ProjectName))
                {
                    buildDefinitions =
                        buildHttpClient
                        .GetDefinitionsAsync(settings.ProjectName)
                        .ConfigureAwait(false)
                        .GetAwaiter()
                        .GetResult();
                }
                else
                {
                    throw new ArgumentOutOfRangeException(
                              nameof(settings),
                              "Either ProjectGuid or ProjectName needs to be set");
                }

                log.Verbose(
                    "{0} Build definitions found",
                    buildDefinitions.Count);

                return(buildDefinitions
                       .Select(x => x.ToAzureDevOpsBuildDefinition())
                       .ToList());
            }
        }
        /// <summary>
        /// Gets the builds for the parameter <paramref name="settings"/>.
        /// </summary>
        /// <param name="log">The Cake log context.</param>
        /// <param name="settings">Settings for getting the build.</param>
        /// <returns>The builds or an empty list of builds if no builds were found for the <paramref name="settings"/>.</returns>
        /// <exception cref="InvalidOperationException">If no build definition was found for the <paramref name="settings"/>.</exception>
        internal static IEnumerable <AzureDevOpsBuild> GetAzureDevOpsBuilds(
            ICakeLog log,
            AzureDevOpsBuildsSettings settings)
        {
            log.NotNull(nameof(log));
            settings.NotNull(nameof(settings));

            var azureDevOpsBuilds = new List <AzureDevOpsBuild>();

            using (var buildHttpClient = new BuildClientFactory().CreateBuildClient(settings.CollectionUrl, settings.Credentials, out var authorizedIdenity))
            {
                log.Verbose(
                    "Authorized Identity:\n  Id: {0}\n  DisplayName: {1}",
                    authorizedIdenity.Id,
                    authorizedIdenity.DisplayName);

                AzureDevOpsBuildDefinition buildDefinition = null;

                if (!string.IsNullOrEmpty(settings.BuildDefinitionName))
                {
                    buildDefinition = GetBuildDefinition(log, settings);
                    if (buildDefinition == null)
                    {
                        throw new InvalidOperationException($"Build definition '{settings.BuildDefinitionName}' not found");
                    }
                }

                List <int> buildsDefinitionIds =
                    buildDefinition == null ? null : new List <int>()
                {
                    buildDefinition.Id
                };

                List <Build> builds = null;

                if (settings.ProjectGuid != Guid.Empty)
                {
                    builds =
                        buildHttpClient
                        .GetBuildsAsync(
                            settings.ProjectGuid,
                            definitions: buildsDefinitionIds,
                            statusFilter: settings.BuildStatus?.ToBuildStatus(),
                            resultFilter: settings.BuildResult?.ToBuildResult(),
                            queryOrder: settings.BuildQueryOrder?.ToBuildQueryOrder(),
                            branchName: settings.BranchName,
                            top: settings.Top,
                            maxBuildsPerDefinition: settings.MaxBuildsPerDefinition)
                        .ConfigureAwait(false)
                        .GetAwaiter()
                        .GetResult();
                }
                else if (!string.IsNullOrWhiteSpace(settings.ProjectName))
                {
                    builds =
                        buildHttpClient
                        .GetBuildsAsync(
                            settings.ProjectName,
                            definitions: buildsDefinitionIds,
                            statusFilter: settings.BuildStatus?.ToBuildStatus(),
                            resultFilter: settings.BuildResult?.ToBuildResult(),
                            queryOrder: settings.BuildQueryOrder?.ToBuildQueryOrder(),
                            branchName: settings.BranchName,
                            top: settings.Top,
                            maxBuildsPerDefinition: settings.MaxBuildsPerDefinition)
                        .ConfigureAwait(false)
                        .GetAwaiter()
                        .GetResult();
                }
                else
                {
                    throw new ArgumentOutOfRangeException(
                              nameof(settings),
                              "Either ProjectGuid or ProjectName needs to be set");
                }

                azureDevOpsBuilds.AddRange(builds.Select(x => new AzureDevOpsBuild(log, settings, x)));
            }

            log.Verbose(
                "{0} builds found",
                azureDevOpsBuilds.Count);

            return(azureDevOpsBuilds);
        }