protected override void InnerExecute(string[] arguments) { _writer.WriteLine("Getting upload credentials... "); _writer.WriteLine(); var uploadCredentials = GetCredentials(); var temporaryFileName = Path.GetTempFileName(); try { using (var packageStream = new FileStream(temporaryFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) using (var gzipStream = new GZipStream(packageStream, CompressionMode.Compress, true)) { var sourceDirectory = new DirectoryInfo(Directory.GetCurrentDirectory()); sourceDirectory.ToTar(gzipStream, excludedDirectoryNames: _excludedDirectories.ToArray()); } using (var s3Client = new AmazonS3Client(uploadCredentials.GetSessionCredentials())) using (var transferUtility = new TransferUtility(s3Client)) { var request = new TransferUtilityUploadRequest { FilePath = temporaryFileName, BucketName = uploadCredentials.Bucket, Key = uploadCredentials.ObjectKey, Timeout = (int)TimeSpan.FromHours(2).TotalMilliseconds, }; var progressBar = new MegaByteProgressBar(); request.UploadProgressEvent += (object x, UploadProgressArgs y) => progressBar .Update("Uploading package", y.TransferredBytes, y.TotalBytes); transferUtility.Upload(request); Console.CursorTop++; _writer.WriteLine(); } } finally { File.Delete(temporaryFileName); } TriggerAppHarborBuild(uploadCredentials); }