Skip to content

Commit e6580b7

Browse files
committed
fix(cos): support replace for deployment
1 parent 63826fb commit e6580b7

File tree

2 files changed

+56
-24
lines changed

2 files changed

+56
-24
lines changed

__tests__/cos.test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ describe('Cos', () => {
4242
src: staticPath,
4343
force: true,
4444
protocol: 'https',
45+
replace: true,
4546
};
4647
const cos = new Cos(credentials, process.env.REGION);
4748

src/modules/cos/index.js

Lines changed: 55 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -485,15 +485,59 @@ class Cos {
485485
}
486486
}
487487

488+
async flushBucketFiles(bucket) {
489+
console.log(`Start to clear all files in bucket ${bucket}`);
490+
let detail;
491+
try {
492+
detail = await this.getBucket({
493+
bucket,
494+
});
495+
} catch (e) {
496+
if (e.code === 'NoSuchBucket') {
497+
console.log(`Bucket ${bucket} not exist`);
498+
return;
499+
}
500+
}
501+
502+
if (detail) {
503+
if (detail.Contents && detail.Contents.length > 0) {
504+
// delete files
505+
const objectList = (detail.Contents || []).map((item) => {
506+
return {
507+
Key: item.Key,
508+
};
509+
});
510+
511+
try {
512+
const deleteMultipleObjectHandler = this.promisify(
513+
this.cosClient.deleteMultipleObject.bind(this.cosClient),
514+
);
515+
await deleteMultipleObjectHandler({
516+
Region: this.region,
517+
Bucket: bucket,
518+
Objects: objectList,
519+
});
520+
console.log(`Clear all files in bucket ${bucket} success`);
521+
} catch (e) {
522+
console.log(e);
523+
}
524+
}
525+
}
526+
}
527+
488528
async upload(inputs = {}) {
489-
const { bucket } = inputs;
529+
const { bucket, replace } = inputs;
490530
const { region } = this;
491531

492532
if (!bucket) {
493533
throw new TypeError(`PARAMETER_COS`, 'Bucket name is required');
494534
}
495535

496-
console.log(`Uploding files to ${this.region}'s bucket: ${inputs.bucket}`);
536+
if (replace) {
537+
await this.flushBucketFiles(bucket);
538+
}
539+
540+
console.log(`Uploding files to bucket: ${bucket}, region: ${this.region}`);
497541
if (inputs.dir && (await fs.existsSync(inputs.dir))) {
498542
const options = { keyPrefix: inputs.keyPrefix };
499543

@@ -620,6 +664,7 @@ class Cos {
620664
const dirToUploadPath = inputs.code.src || inputs.code.root;
621665
const uploadDict = {
622666
bucket: inputs.bucket,
667+
replace: inputs.replace,
623668
};
624669
if (fs.lstatSync(dirToUploadPath).isDirectory()) {
625670
uploadDict.dir = dirToUploadPath;
@@ -660,6 +705,7 @@ class Cos {
660705
const uploadDict = {
661706
bucket: inputs.bucket,
662707
keyPrefix: inputs.keyPrefix || '/',
708+
replace: inputs.replace,
663709
};
664710

665711
if (fs.lstatSync(dirToUploadPath).isDirectory()) {
@@ -675,7 +721,6 @@ class Cos {
675721
async remove(inputs = {}) {
676722
console.log(`Removing bucket from ${this.region}`);
677723

678-
// 获取全部文件
679724
let detail;
680725
try {
681726
detail = await this.getBucket(inputs);
@@ -686,29 +731,13 @@ class Cos {
686731
}
687732
}
688733

734+
// if bucket exist, begain to delate
689735
if (detail) {
690-
if (detail.Contents && detail.Contents.length > 0) {
691-
// delete files
692-
const objectList = (detail.Contents || []).map((item) => {
693-
return {
694-
Key: item.Key,
695-
};
696-
});
697-
698-
try {
699-
const deleteMultipleObjectHandler = this.promisify(
700-
this.cosClient.deleteMultipleObject.bind(this.cosClient),
701-
);
702-
await deleteMultipleObjectHandler({
703-
Region: this.region,
704-
Bucket: inputs.bucket,
705-
Objects: objectList,
706-
});
707-
} catch (e) {
708-
console.log(e);
709-
}
710-
}
711736
try {
737+
// 1. flush all files
738+
await this.flushBucketFiles(inputs.bucket);
739+
740+
// 2. delete bucket
712741
const deleteBucketHandler = this.promisify(
713742
this.cosClient.deleteBucket.bind(this.cosClient),
714743
);
@@ -717,6 +746,8 @@ class Cos {
717746
Bucket: inputs.bucket,
718747
});
719748
} catch (e) {
749+
// why do this judgement again
750+
// because when requesting to delete, bucket may be deleted even though it exist before.
720751
if (e.code === 'NoSuchBucket') {
721752
console.log(`Bucket ${inputs.bucket} not exist`);
722753
} else {

0 commit comments

Comments
 (0)