public virtual async Task StartPipelineIfExists(GithubEvent payload) { try { var accountId = Environment.GetEnvironmentVariable("AWS_ACCOUNT_ID"); var region = Environment.GetEnvironmentVariable("AWS_REGION"); var pushEventInput = payload is PushEvent pushEvent?Serialize(pushEvent) : null; var prEventInput = payload is PullRequestEvent pullEvent?Serialize(pullEvent) : null; var input = pushEventInput ?? prEventInput; var stateMachineArn = $"arn:aws:states:{region}:{accountId}:stateMachine:{payload.Repository.Name}-cicd-pipeline"; var request = new StartExecutionRequest { StateMachineArn = stateMachineArn, Input = input }; if (payload.Ref.StartsWith("refs/heads/")) { request.Name = payload.HeadCommitId; } var response = await stepFunctionsClient.StartExecutionAsync(request); logger.LogInformation($"Received start execution response: {Serialize(response)}"); } catch (Exception e) { logger.LogError($"Got error trying to start pipeline: {e.Message}"); } }
/// <summary> /// This function is called on every request to /webhooks/github /// </summary> /// <param name="request">Request sent by the application load balancer</param> /// <param name="context">The lambda context</param> /// <returns>A load balancer response object</returns> public async Task <ApplicationLoadBalancerResponse> Handle(ApplicationLoadBalancerRequest request, CancellationToken cancellationToken = default) { GithubEvent payload = null; try { payload = requestValidator.Validate(request); } catch (RequestValidationException e) { logger.LogError(e.Message); return(CreateResponse(statusCode: e.StatusCode)); } var commitMessage = await commitMessageFetcher.FetchCommitMessage(payload); payload.HeadCommitMessage = commitMessage; IEnumerable <Task> GetTasks() { switch (payload) { case PushEvent pushEvent: return(GetPushEventTasks(pushEvent)); case PullRequestEvent prEvent: return(GetPullRequestEventTasks(prEvent)); } return(Array.Empty <Task>()); } var tasks = GetTasks(); await Task.WhenAll(tasks); return(CreateResponse(statusCode: HttpStatusCode.OK)); }