mirror of
https://github.com/serverless/serverless.git
synced 2025-12-08 19:46:03 +00:00
91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
import validate from '../lib/validate.js'
|
|
import checkIfBucketExists from '../lib/check-if-bucket-exists.js'
|
|
import emptyS3Bucket from './lib/bucket.js'
|
|
import removeStack from './lib/stack.js'
|
|
import removeEcrRepository from './lib/ecr.js'
|
|
import monitorStack from '../lib/monitor-stack.js'
|
|
import checkIfEcrRepositoryExists from '../lib/check-if-ecr-repository-exists.js'
|
|
import utils from '@serverlessinc/sf-core/src/utils.js'
|
|
|
|
const { log, style, progress } = utils
|
|
const mainProgress = progress.get('main')
|
|
|
|
class AwsRemove {
|
|
constructor(serverless, options) {
|
|
this.serverless = serverless
|
|
this.options = options || {}
|
|
this.provider = this.serverless.getProvider('aws')
|
|
|
|
Object.assign(
|
|
this,
|
|
validate,
|
|
emptyS3Bucket,
|
|
removeStack,
|
|
monitorStack,
|
|
removeEcrRepository,
|
|
checkIfEcrRepositoryExists,
|
|
checkIfBucketExists,
|
|
)
|
|
|
|
this.hooks = {
|
|
initialize: async () => {
|
|
if (this.serverless.processedInput.commands.join(' ') === 'remove') {
|
|
log.notice(
|
|
`Removing "${
|
|
this.serverless.service.service
|
|
}" from stage "${this.serverless
|
|
.getProvider('aws')
|
|
.getStage()}" ${style.aside(
|
|
`(${this.serverless.getProvider('aws').getRegion()})`,
|
|
)}`,
|
|
)
|
|
|
|
// This is used to ensure that for `remove` command, the `accountId` will be resolved and available
|
|
// for `generatePayload` telemetry logic
|
|
this.provider.getAccountId().then(
|
|
(accountId) => (this.provider.accountId = accountId),
|
|
() => {
|
|
/* pass on all errors */
|
|
},
|
|
)
|
|
}
|
|
},
|
|
|
|
'remove:remove': async () => {
|
|
const doesEcrRepositoryExistPromise = this.checkIfEcrRepositoryExists()
|
|
await this.validate()
|
|
mainProgress.notice('Removing objects from S3 bucket', {
|
|
isMainEvent: true,
|
|
})
|
|
await this.emptyS3Bucket()
|
|
mainProgress.notice('Removing AWS CloudFormation stack', {
|
|
isMainEvent: true,
|
|
})
|
|
const cfData = await this.removeStack()
|
|
await this.monitorStack('delete', cfData)
|
|
if (await doesEcrRepositoryExistPromise) {
|
|
mainProgress.notice('Removing ECR repository', { isMainEvent: true })
|
|
await this.removeEcrRepository()
|
|
}
|
|
},
|
|
|
|
finalize: async () => {
|
|
if (this.serverless.processedInput.commands.join(' ') !== 'remove')
|
|
return
|
|
log.success(
|
|
`Service ${
|
|
this.serverless.service.service
|
|
} has been successfully removed ${style.aside(
|
|
`(${Math.floor(
|
|
(Date.now() - this.serverless.pluginManager.commandRunStartTime) /
|
|
1000,
|
|
)}s)`,
|
|
)}`,
|
|
)
|
|
},
|
|
}
|
|
}
|
|
}
|
|
|
|
export default AwsRemove
|