private async uploadBundle()

in src/tasks/CodeDeployDeployApplication/TaskOperations.ts [101:157]


    private async uploadBundle(): Promise<string> {
        let archiveName: string
        let autoCreatedArchive = false

        if (tl.stats(this.taskParameters.revisionBundle).isDirectory()) {
            autoCreatedArchive = true
            archiveName = await this.createDeploymentArchive(
                this.taskParameters.revisionBundle,
                this.taskParameters.applicationName
            )
        } else {
            archiveName = this.taskParameters.revisionBundle
        }

        let key: string
        const bundleFilename = path.basename(archiveName)

        if (this.taskParameters.bundlePrefix) {
            key = `${this.taskParameters.bundlePrefix}/${bundleFilename}`
        } else {
            key = bundleFilename
        }

        try {
            console.log(tl.loc('UploadingBundle', archiveName, key, this.taskParameters.bucketName))

            const readStream = fs.createReadStream(archiveName)

            readStream.on('error', err => {
                if (err) {
                    throw err
                }
            })

            const request: S3.PutObjectRequest = {
                Bucket: this.taskParameters.bucketName,
                Key: key,
                Body: readStream
            }

            if (this.taskParameters.filesAcl && this.taskParameters.filesAcl !== 'none') {
                request.ACL = this.taskParameters.filesAcl
            }

            await this.s3Client.upload(request).promise()

            console.log(tl.loc('BundleUploadCompleted'))

            return key
        } catch (err) {
            console.error(tl.loc('BundleUploadFailed', (err as Error).message), err)
            throw err
        } finally {
            // clean up the archive if we created one
            this.cleanDeploymentArchive(autoCreatedArchive, archiveName)
        }
    }