forked from alibaba/ice
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsync-db.js
More file actions
105 lines (92 loc) · 2.51 KB
/
sync-db.js
File metadata and controls
105 lines (92 loc) · 2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
const oss = require('ali-oss');
const co = require('co');
const { readdirSync, readFileSync, writeFile } = require('fs');
const { resolve, join } = require('path');
const scaffolds = require('./scaffolds');
if (
process.env.TRAVIS_BRANCH !== 'master' &&
process.env.TRAVIS_BRANCH !== 'beta' &&
process.env.TRAVIS_BRANCH !== 'pre-depoly'
) {
console.log('当前分支非 Master, 不执行物料源同步脚本');
console.log('TRAVIS_BRANCH=' + process.env.TRAVIS_BRANCH);
process.exit(0);
}
const bucket = 'iceworks';
const accessKeyId = process.env.ACCESS_KEY_ID;
const accessKeySecret = process.env.ACCESS_KEY_SECRET;
const store = oss({
bucket,
endpoint: 'oss-cn-hangzhou.aliyuncs.com',
accessKeyId,
accessKeySecret,
time: '120s',
});
const assetsMap = {
"pre-depoly": "pre-assets",
"beta": "beta-assets",
"master": "assets"
}
console.log('start uploading');
sortScaffoldMaterials()
.then((res) => {
const files = readdirSync(resolve(__dirname, '../build')).map(
(filename) => ({
from: resolve(__dirname, '../build', filename),
to: join(assetsMap[process.env.TRAVIS_BRANCH], filename),
})
);
const tasks = files.map(createUploadTask);
Promise.all(tasks)
.then(() => {
console.log('All Done');
})
.catch((err) => {
console.log('upload err', err);
});
})
.catch((err) => {
console.log('sort err', err);
});
/**
* 按照下载量进行排序推荐
*/
function sortScaffoldMaterials() {
return new Promise((resolve, reject) => {
const materialsPath = join(__dirname, '../build', 'react-materials.json');
const materialsData = JSON.parse(readFileSync(materialsPath, 'utf-8'));
const sortMaterialsData = [];
scaffolds.forEach((scaffold) => {
materialsData.scaffolds.forEach((currentItem) => {
if (currentItem.name === scaffold) {
sortMaterialsData.push(currentItem);
}
});
});
materialsData.scaffolds = sortMaterialsData;
return writeFile(
materialsPath,
JSON.stringify(materialsData, null, 2),
'utf-8',
(err) => {
if (err) reject(err);
resolve();
}
);
});
}
/**
* 上传任务
* @param {object} opts
*/
function createUploadTask(opts) {
const { from, to } = opts;
return co(store.put(to, from)).then((object = {}) => {
if (object.res && object.res.status == 200) {
console.log('upload ok', object.url);
return true;
} else {
throw new Error('upload err:' + to);
}
});
}