コード例 #1
0
ファイル: PipelineStarter.cs プロジェクト: cythral/cfn
        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}");
            }
        }
コード例 #2
0
ファイル: Handler.cs プロジェクト: cythral/cfn
        /// <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));
        }