예제 #1
0
        private async Task <Build> SendRequest(QueueBuildRequest queueBuildRequest)
        {
            string requestBody = JsonConvert.SerializeObject(queueBuildRequest);

            using StringContent httpContent = new StringContent(requestBody, Encoding.UTF8, "application/json");
            HttpResponseMessage response = await _httpClient.PostAsync("?api-version=5.1", httpContent);

            return(await response.Content.ReadAsAsync <Build>());
        }
예제 #2
0
        /// <inheritdoc/>
        public async Task <Build> QueueAsync(
            QueueBuildParameters queueBuildParameters,
            int buildDefinitionId)
        {
            queueBuildParameters.GiteaEnvironment = $"{_generalSettings.HostName}/repos";
            queueBuildParameters.AppDeployToken   = _sourceControl.GetDeployToken();

            QueueBuildRequest queueBuildRequest = CreateBuildRequest(queueBuildParameters, buildDefinitionId);

            return(await SendRequest(queueBuildRequest));
        }
예제 #3
0
        public async Task <BuildDto> QueueBuild(string projectIdentifier, int definitionId, string organization = default, CancellationToken cancellationToken = default)
        {
            var request = new QueueBuildRequest(organization ?? _options.Value.DefaultOrganization, projectIdentifier, definitionId);

            request.Headers.Authorization = GetAuthZHeader();

            var response = await SendAsync(request, cancellationToken);

            var buildDto = await response.Content.ReadFromJsonAsync <BuildDto>(null, cancellationToken);

            return(buildDto);
        }
예제 #4
0
        public void CanBeConstructed()
        {
            //Arrange
            QueueBuildRequest sut;

            //Act
            sut = new QueueBuildRequest("my-org", "my-project", 1);

            //Assert
            Assert.NotNull(sut);
            Assert.Equal("6.0", sut.ApiVersion);
            Assert.Equal(HttpMethod.Post, sut.Method);
            Assert.Equal("https://dev.azure.com/my-org/my-project/_apis/build/builds?api-version=6.0&definitionId=1", sut.RequestUri.AbsoluteUri);
        }
예제 #5
0
        public async Task CanBeConstructedWithPayload()
        {
            //Arrange
            QueueBuildRequest sut;

            //Act
            sut = new QueueBuildRequest("my-org", "my-project", new BuildDefinitionDto());

            //Assert
            Assert.NotNull(sut);
            Assert.Equal("6.0", sut.ApiVersion);
            Assert.Equal(HttpMethod.Post, sut.Method);
            Assert.Equal("https://dev.azure.com/my-org/my-project/_apis/build/builds?api-version=6.0&definitionId=0", sut.RequestUri.AbsoluteUri);
            Assert.True(await new StringContent(JsonSerializer.Serialize(new BuildDefinitionDto())).ReadAsStringAsync() == await sut.Content.ReadAsStringAsync());
        }
예제 #6
0
        public override async Task <QueueBuildResponse> QueueBuild(QueueBuildRequest request, ServerCallContext context)
        {
            context.CheckAuthenticated(_authSettings);

            var result = await _executor.ExecuteAsync(new QueueBuildQuery
            {
                BuildDefinition = request.BuildDefinition.ToModel()
            }).ConfigureAwait(false);


            var response = new QueueBuildResponse();

            if (result != null)
            {
                response.Build = result.ToProto();
            }
            return(response);
        }
예제 #7
0
        public async Task <Revision> QueueBuild(AzureDevOpsSettings azureDevOps,
                                                QueueBuildRequest queueBuildRequest, string accessToken)
        {
            var credentials = new VssOAuthAccessTokenCredential(accessToken);
            var connection  = new VssConnection(
                new Uri($"https://dev.azure.com/{azureDevOps.Organization}"),
                credentials);

            try
            {
                var buildClient = connection.GetClient <BuildHttpClient>();
                var definition  = await buildClient.GetDefinitionAsync(azureDevOps.Project, int.Parse(azureDevOps.BuildDefinition));

                Dictionary <string, string> parameters = queueBuildRequest.Variables.ToDictionary(v => v.Key, v => v.Value);
                Build build = new Build
                {
                    Definition   = definition,
                    Project      = definition.Project,
                    SourceBranch = queueBuildRequest.Branch,
                    Parameters   = JsonConvert.SerializeObject(parameters)
                };
                var response = await buildClient.QueueBuildAsync(build);

                var revision = new Revision()
                {
                    RevisionNumber = response.Id.ToString(),
                    Requestor      = response.RequestedBy.DisplayName,
                    CreatedTime    = DateTimeOffset.Now
                };

                return(revision);
            }
            catch (Exception)
            {
                return(null);
            }
        }
예제 #8
0
        public async Task <IActionResult> TriggerAzure([FromRoute] string projectName, [FromBody] QueueBuildRequest request)
        {
            Project project = await ProjectDataService.GetAsync(CosmosDbConfig.DomainString, projectName);

            if (null == project)
            {
                return(new NotFoundObjectResult("Project not found"));
            }

            if (project.AzureDevOps != null)
            {
                string aadAccessToken = this.HttpContext.Request?.Headers["Authorization"].ToString().Replace("Bearer ", "");
                string accessToken    = await ExchangeToAzureDevOpsToken(aadAccessToken);

                Revision revision = await AzureDevOpsService.QueueBuild(project.AzureDevOps, request, accessToken);

                if (revision == null)
                {
                    return(StatusCode(500));
                }

                revision.ProjectName = projectName;
                await RevisionDataService.InsertAsync(revision);

                return(Ok(revision));
            }

            return(new NotFoundObjectResult("CI/CD service not found"));
        }