Exemple #1
0
        public async Task <object> Handle(Request request, CancellationToken cancellationToken = default)
        {
            await githubStatusNotifier.NotifyPending(
                bucketName : request.DestinationBucket,
                envName : request.EnvironmentName,
                repoName : request.CommitInfo.GithubRepository,
                sha : request.CommitInfo.GithubRef
                );

            s3Client = await s3Factory.Create(request.RoleArn);

            try
            {
                await MarkExistingObjectsAsDirty(request.DestinationBucket);

                using (var stream = await s3GetObjectFacade.GetObjectStream(request.ZipLocation))
                    using (var zipStream = new ZipArchive(stream))
                    {
                        var bucket  = request.DestinationBucket;
                        var role    = request.RoleArn;
                        var entries = zipStream.Entries.ToList();

                        // zip archive operations not thread safe
                        foreach (var entry in entries)
                        {
                            await UploadEntry(entry, bucket, role);
                        }
                    }

                await githubStatusNotifier.NotifySuccess(
                    bucketName : request.DestinationBucket,
                    envName : request.EnvironmentName,
                    repoName : request.CommitInfo.GithubRepository,
                    sha : request.CommitInfo.GithubRef
                    );
            }
            catch (Exception e)
            {
                logger.LogError($"Got an error uploading files: {e.Message} {e.StackTrace}");

                await githubStatusNotifier.NotifyFailure(
                    bucketName : request.DestinationBucket,
                    envName : request.EnvironmentName,
                    repoName : request.CommitInfo.GithubRepository,
                    sha : request.CommitInfo.GithubRef
                    );

                throw new AggregateException(e);
            }

            return(new Response
            {
                Success = true
            });
        }
Exemple #2
0
        public void SetupS3()
        {
            s3Factory.ClearSubstitute();
            s3Client.ClearSubstitute();
            s3GetObjectFacade.ClearSubstitute();

            s3Factory.Create(Arg.Is(roleArn)).Returns(s3Client);

            s3GetObjectFacade.GetObjectStream(Arg.Any <string>()).Returns(TestZipFile.Stream);
            s3Client.ListObjectsV2Async(Arg.Any <ListObjectsV2Request>()).Returns(new ListObjectsV2Response
            {
                S3Objects = objects
            });
        }