Пример #1
0
        public async Task <IEnumerable <string> > GetSuggestionsAsync(IComponentConfiguration config)
        {
            var credentialName = config["CredentialName"];
            var projectName    = AH.CoalesceString(config["TeamProject"], config["TeamProjectName"]);
            var definitionName = config["BuildDefinition"];

            if (string.IsNullOrEmpty(credentialName) || string.IsNullOrEmpty(projectName) || string.IsNullOrEmpty(definitionName))
            {
                return(Enumerable.Empty <string>());
            }

            var credentials = ResourceCredentials.Create <TfsCredentials>(credentialName);

            var api        = new TfsRestApi(credentials, null);
            var definition = await api.GetBuildDefinitionAsync(projectName, definitionName).ConfigureAwait(false);

            if (definition == null)
            {
                return(Enumerable.Empty <string>());
            }

            var builds = await api.GetBuildsAsync(projectName, definition.id).ConfigureAwait(false);

            return(builds.Select(b => b.buildNumber));
        }
Пример #2
0
        public override async Task <IEnumerable <string> > EnumerateValuesAsync(ValueEnumerationContext context)
        {
            var credentials = ResourceCredentials.Create <TfsCredentials>(this.CredentialName);

            var api      = new TfsRestApi(credentials, null);
            var projects = await api.GetProjectsAsync().ConfigureAwait(false);

            return(projects.Select(p => p.name));
        }
Пример #3
0
        public override async Task <IEnumerable <string> > EnumerateValuesAsync(ValueEnumerationContext context)
        {
            var credentials = ResourceCredentials.Create <TfsCredentials>(this.CredentialName);

            var api         = new TfsRestApi(credentials, null);
            var definitions = await api.GetBuildDefinitionsAsync(this.TeamProjectName).ConfigureAwait(false);

            return(definitions.Select(d => d.name));
        }
Пример #4
0
        public async override Task ExecuteAsync(IOperationExecutionContext context)
        {
            var api = new TfsRestApi(this, this);

            this.LogDebug("Finding VSO build definition...");
            var definitionResult = await api.GetBuildDefinitionsAsync(this.TeamProject);

            var definition = definitionResult.FirstOrDefault(d => string.IsNullOrEmpty(this.BuildDefinition) || string.Equals(d.name, this.BuildDefinition, StringComparison.OrdinalIgnoreCase));

            if (definition == null)
            {
                throw new InvalidOperationException("Could not find a build definition named: " + AH.CoalesceString(this.BuildDefinition, "any"));
            }

            this.LogInformation($"Queueing VSO build of {this.TeamProject}, build definition {definition.name}...");

            var queuedBuild = await api.QueueBuildAsync(this.TeamProject, definition.id);

            this.LogInformation($"Build number \"{queuedBuild.buildNumber}\" created for definition \"{queuedBuild.definition.name}\".");

            this.TfsBuildNumber = queuedBuild.buildNumber;

            if (this.WaitForCompletion)
            {
                string lastStatus = queuedBuild.status;
                this.LogInformation($"Current build status is \"{lastStatus}\", waiting for \"completed\" status...");

                while (!string.Equals(queuedBuild.status, "completed", StringComparison.OrdinalIgnoreCase))
                {
                    await Task.Delay(4000, context.CancellationToken);

                    queuedBuild = await api.GetBuildAsync(this.TeamProject, queuedBuild.id);

                    if (queuedBuild.status != lastStatus)
                    {
                        this.LogInformation($"Current build status changed from \"{lastStatus}\" to \"{queuedBuild.status}\"...");
                        lastStatus = queuedBuild.status;
                    }
                }

                this.LogInformation("Build status result is \"completed\".");

                if (this.ValidateBuild)
                {
                    this.LogInformation("Validating build status result is \"succeeded\"...");
                    if (!string.Equals("succeeded", queuedBuild.result, StringComparison.OrdinalIgnoreCase))
                    {
                        this.LogError("Build status result was not \"succeeded\".");
                        return;
                    }
                    this.LogInformation("Build status result was \"succeeded\".");
                }
            }

            this.LogInformation($"VSO build {queuedBuild.buildNumber} created.");
        }
Пример #5
0
        public override async Task <IEnumerable <IIssueTrackerIssue> > EnumerateIssuesAsync(IIssueSourceEnumerationContext context)
        {
            context.Log.LogDebug("Enumerating TFS issue source...");

            var    credentials = this.TryGetCredentials <TfsCredentials>();
            var    client      = new TfsRestApi(credentials, context.Log);
            string wiql        = this.GetWiql(context.Log);

            var workItems = await client.GetWorkItemsAsync(wiql).ConfigureAwait(false);

            return(from w in workItems
                   select new TfsRestIssue(w));
        }
Пример #6
0
        public override async Task <IEnumerable <string> > EnumerateValuesAsync(ValueEnumerationContext context)
        {
            var credentials = ResourceCredentials.Create <TfsCredentials>(this.CredentialName);

            var api        = new TfsRestApi(credentials, null);
            var definition = await api.GetBuildDefinitionAsync(this.TeamProjectName, this.BuildDefinitionName).ConfigureAwait(false);

            if (definition == null)
            {
                return(Enumerable.Empty <string>());
            }

            var builds = await api.GetBuildsAsync(this.TeamProjectName, definition.id).ConfigureAwait(false);

            return(builds.Select(b => b.buildNumber));
        }
        public async Task <IEnumerable <string> > GetSuggestionsAsync(IComponentConfiguration config)
        {
            var credentialName = config["CredentialName"];

            if (string.IsNullOrEmpty(credentialName))
            {
                return(Enumerable.Empty <string>());
            }

            var credentials = ResourceCredentials.Create <TfsCredentials>(credentialName);

            var api      = new TfsRestApi(credentials, null);
            var projects = await api.GetProjectsAsync().ConfigureAwait(false);

            return(projects.Select(p => p.name));
        }
Пример #8
0
        public override async Task ExecuteAsync(IOperationExecutionContext context)
        {
            this.LogInformation($"Updating work item (ID={this.Id}) in TFS...");

            var client = new TfsRestApi(this, this);

            try
            {
                await client.UpdateWorkItemAsync(this.Id, this.Title, this.Description, this.IterationPath, this.State).ConfigureAwait(false);
            }
            catch (TfsRestException ex)
            {
                this.LogError(ex.FullMessage);
                return;
            }
            this.LogInformation("Work item updated.");
        }
Пример #9
0
        public async Task <IEnumerable <string> > GetSuggestionsAsync(IComponentConfiguration config)
        {
            var credentialName = config["CredentialName"];
            var teamProject    = config["TeamProject"];

            if (string.IsNullOrEmpty(credentialName) || string.IsNullOrEmpty(teamProject))
            {
                return(Enumerable.Empty <string>());
            }

            var credentials = ResourceCredentials.Create <TfsCredentials>(credentialName);

            var api        = new TfsRestApi(credentials, null);
            var iterations = await api.GetIterationsAsync(teamProject).ConfigureAwait(false);

            return(iterations.Select(i => i.path));
        }
Пример #10
0
        public async Task <TfsArtifact> DownloadAsync(string teamProject, string buildNumber, string buildDefinitionName, string artifactName)
        {
            if (string.IsNullOrEmpty(teamProject))
            {
                throw new ArgumentException("A team project is required to download the artifact.", nameof(teamProject));
            }
            if (string.IsNullOrEmpty(artifactName))
            {
                throw new ArgumentException("An artifact name is required to download the artifact.", nameof(artifactName));
            }

            var api = new TfsRestApi(connectionInfo, logger);

            var buildDefinition = await api.GetBuildDefinitionAsync(teamProject, buildDefinitionName).ConfigureAwait(false);

            if (buildDefinition == null)
            {
                throw new InvalidOperationException($"The build definition {buildDefinitionName} could not be found.");
            }

            logger.LogInformation($"Finding {AH.CoalesceString(buildNumber, "last successful")} build...");

            var builds = await api.GetBuildsAsync(
                project : teamProject,
                buildDefinition : buildDefinition.id,
                buildNumber : AH.NullIf(buildNumber, ""),
                resultFilter : "succeeded",
                statusFilter : "completed",
                top : 2
                ).ConfigureAwait(false);

            if (builds.Length == 0)
            {
                throw new InvalidOperationException($"Could not find build number {buildNumber}. Ensure there is a successful, completed build with this number.");
            }

            var build = builds.FirstOrDefault();

            logger.LogInformation($"Downloading {artifactName} artifact from VSO...");

            var stream = await api.DownloadArtifactAsync(teamProject, build.id, artifactName).ConfigureAwait(false);

            return(new TfsArtifact(stream, artifactName, buildNumber));
        }
Пример #11
0
        public async Task <IEnumerable <string> > GetSuggestionsAsync(IComponentConfiguration config)
        {
            var credentialName = config["CredentialName"];
            var projectName    = AH.CoalesceString(config["TeamProject"], config["TeamProjectName"]);
            var definitionName = config["BuildDefinition"];

            if (string.IsNullOrEmpty(credentialName) || string.IsNullOrEmpty(projectName) || string.IsNullOrEmpty(definitionName))
            {
                return(Enumerable.Empty <string>());
            }

            var buildNumber = config["BuildNumber"];

            var credentials = ResourceCredentials.Create <TfsCredentials>(credentialName);

            var api = new TfsRestApi(credentials, null);

            var definition = await api.GetBuildDefinitionAsync(projectName, definitionName).ConfigureAwait(false);

            if (definition == null)
            {
                return(Enumerable.Empty <string>());
            }

            var builds = await api.GetBuildsAsync(
                project : projectName,
                buildDefinition : definition.id,
                buildNumber : AH.NullIf(buildNumber, ""),
                resultFilter : "succeeded",
                statusFilter : "completed",
                top : 2
                ).ConfigureAwait(false);

            var build = builds.FirstOrDefault();

            if (build == null)
            {
                return(Enumerable.Empty <string>());
            }

            var artifacts = await api.GetArtifactsAsync(projectName, build.id).ConfigureAwait(false);

            return(artifacts.Select(a => a.name));
        }
Пример #12
0
        public async Task <IEnumerable <string> > GetSuggestionsAsync(IComponentConfiguration config)
        {
            var credentialName = config["CredentialName"];
            var teamProject    = config["TeamProject"];

            if (string.IsNullOrEmpty(credentialName) || string.IsNullOrEmpty(teamProject))
            {
                return(Enumerable.Empty <string>());
            }

            var credentials = ResourceCredentials.Create <TfsCredentials>(credentialName);

            var api   = new TfsRestApi(credentials, null);
            var types = await api.GetWorkItemTypesAsync(teamProject).ConfigureAwait(false);

            return(from t in types
                   orderby t.name
                   select t.name);
        }
Пример #13
0
        public override async Task ExecuteAsync(IOperationExecutionContext context)
        {
            this.LogInformation("Creating work item in TFS...");

            var client = new TfsRestApi(this, this);

            try
            {
                var result = await client.CreateWorkItemAsync(this.TeamProject, this.Type, this.Title, this.Description, this.IterationPath).ConfigureAwait(false);

                this.LogDebug($"Work item (ID={result.id}) created.");
                this.TfsIssueId = result.id.ToString();
            }
            catch (TfsRestException ex)
            {
                this.LogError(ex.FullMessage);
                return;
            }
            this.LogInformation("Work item created.");
        }