Exemple #1
0
        public static HttpClient PrepareRequest(Models.WorkItemUpdateContainer container)
        {
            HttpClient client = new HttpClient();
            var        token  = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "", container.PAT)));

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", token);

            return(client);

            //https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-5.1&viewFallbackFrom=azure-devops
        }
Exemple #2
0
        private static async Task <bool> UpdateWorkItemAsync(Models.WorkItemUpdateContainer container)
        {
            var wid    = container.Id;
            var client = PrepareRequest(container);
            var containerSerialized = JsonConvert.SerializeObject(new List <Models.WorkItemUpdateContainerOptions>()
            {
                container.Options
            });

            HttpContent content = new StringContent(containerSerialized, Encoding.UTF8, "application/json-patch+json");

            using (HttpResponseMessage response =
                       await client.PatchAsync($"https://dev.azure.com/{container.Organization}/{container.Project}/_apis/wit/workitems/{wid}?api-version=5.1", content))
            {
                return(response.IsSuccessStatusCode);
            }
        }
Exemple #3
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook")] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("Hook has been called.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            var    data        = JsonConvert.DeserializeObject <Models.DevOpsPayload>(requestBody);

            var descriptionNewValue = data.Resource.Fields["System.Description"].NewValue;
            var descriptionOldValue = data.Resource.Fields["System.Description"].OldValue;

            if (descriptionNewValue != descriptionOldValue)
            {
                var translatedContent = await CallTranslationServiceAsync(descriptionNewValue, log);

                var options = new Models.WorkItemUpdateContainerOptions()
                {
                    Operation = "replace",
                    Path      = Environment.GetEnvironmentVariable("FIELD"),
                    Value     = translatedContent,
                };

                var workItemContainer = new Models.WorkItemUpdateContainer()
                {
                    Id           = data.Resource.WorkItemId,
                    Options      = options,
                    PAT          = Environment.GetEnvironmentVariable("PAT"),
                    Organization = Environment.GetEnvironmentVariable("ORGANIZATION"),
                    Project      = Environment.GetEnvironmentVariable("PROJECT")
                };

                await UpdateWorkItemAsync(workItemContainer);
            }

            return(new OkObjectResult(requestBody));
        }