feat: 上传版本包后同步发布latest.apk
This commit is contained in:
+44
-18
@@ -13,6 +13,7 @@
|
|||||||
*
|
*
|
||||||
* 版本号取 src/manifest.json 的 versionName。
|
* 版本号取 src/manifest.json 的 versionName。
|
||||||
* 场景值取对应 .env 的 VUE_APP_UPGRADE_NAME,拼成 /version/{upgradeName}/{version}.apk。
|
* 场景值取对应 .env 的 VUE_APP_UPGRADE_NAME,拼成 /version/{upgradeName}/{version}.apk。
|
||||||
|
* 版本包上传成功后,再把同一份安装包上传为 /version/{upgradeName}/latest.apk。
|
||||||
* 运行时输入 ERP 手机号和密码获取 token。多个账套时再选择一次。
|
* 运行时输入 ERP 手机号和密码获取 token。多个账套时再选择一次。
|
||||||
*/
|
*/
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
@@ -217,6 +218,35 @@ async function uploadToUpyun({ bucket, authorization, policy, filePath, fileName
|
|||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function toPublicUrl(target, saveKey, uploaded) {
|
||||||
|
if (uploaded.url && String(uploaded.url).startsWith('http')) return uploaded.url;
|
||||||
|
return `${CDN_HOST[target]}${saveKey}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function uploadApkFile({ apiBase, token, apkPath, saveKey, fileName, status }) {
|
||||||
|
console.log(`场景路径: ${saveKey}`);
|
||||||
|
console.log('正在获取签名...');
|
||||||
|
const sign = await getCdnSign({
|
||||||
|
apiBase,
|
||||||
|
token,
|
||||||
|
saveKey,
|
||||||
|
status,
|
||||||
|
});
|
||||||
|
if (!sign.bucket || !sign.authorization || !sign.policy) {
|
||||||
|
throw new Error('签名返回缺少 bucket、authorization 或 policy');
|
||||||
|
}
|
||||||
|
console.log(`正在上传 ${fileName}...`);
|
||||||
|
const uploaded = await uploadToUpyun({
|
||||||
|
bucket: sign.bucket,
|
||||||
|
authorization: sign.authorization,
|
||||||
|
policy: sign.policy,
|
||||||
|
filePath: apkPath,
|
||||||
|
fileName,
|
||||||
|
});
|
||||||
|
console.log('上传成功');
|
||||||
|
return uploaded;
|
||||||
|
}
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const args = parseArgs(process.argv.slice(2));
|
const args = parseArgs(process.argv.slice(2));
|
||||||
if (!args.file || !args.target) {
|
if (!args.file || !args.target) {
|
||||||
@@ -253,6 +283,8 @@ async function main() {
|
|||||||
const status = args.target === 'prod' ? 2 : 1;
|
const status = args.target === 'prod' ? 2 : 1;
|
||||||
const fileName = `${version}.apk`;
|
const fileName = `${version}.apk`;
|
||||||
const saveKey = `/version/${upgradeName}/${fileName}`;
|
const saveKey = `/version/${upgradeName}/${fileName}`;
|
||||||
|
const latestFileName = 'latest.apk';
|
||||||
|
const latestSaveKey = `/version/${upgradeName}/${latestFileName}`;
|
||||||
const apiBase = API_BASE;
|
const apiBase = API_BASE;
|
||||||
const token = await login(apiBase, {
|
const token = await login(apiBase, {
|
||||||
phone: args.phone,
|
phone: args.phone,
|
||||||
@@ -261,33 +293,27 @@ async function main() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
console.log(`版本号: ${version}`);
|
console.log(`版本号: ${version}`);
|
||||||
console.log(`场景路径: ${saveKey}`);
|
|
||||||
const cdnLabel = args.target === 'prod' ? '正式 CDN' : '测试 CDN';
|
const cdnLabel = args.target === 'prod' ? '正式 CDN' : '测试 CDN';
|
||||||
console.log(`CDN: ${cdnLabel}(只影响下载地址,生产环境也可以从测试 CDN 安装)`);
|
console.log(`CDN: ${cdnLabel}(只影响下载地址,生产环境也可以从测试 CDN 安装)`);
|
||||||
console.log('正在获取签名...');
|
const uploaded = await uploadApkFile({
|
||||||
const sign = await getCdnSign({
|
|
||||||
apiBase,
|
apiBase,
|
||||||
token,
|
token,
|
||||||
|
apkPath,
|
||||||
saveKey,
|
saveKey,
|
||||||
|
fileName,
|
||||||
status,
|
status,
|
||||||
});
|
});
|
||||||
if (!sign.bucket || !sign.authorization || !sign.policy) {
|
console.log(toPublicUrl(args.target, saveKey, uploaded));
|
||||||
throw new Error('签名返回缺少 bucket、authorization 或 policy');
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('正在上传 APK...');
|
const latestUploaded = await uploadApkFile({
|
||||||
const uploaded = await uploadToUpyun({
|
apiBase,
|
||||||
bucket: sign.bucket,
|
token,
|
||||||
authorization: sign.authorization,
|
apkPath,
|
||||||
policy: sign.policy,
|
saveKey: latestSaveKey,
|
||||||
filePath: apkPath,
|
fileName: latestFileName,
|
||||||
fileName,
|
status,
|
||||||
});
|
});
|
||||||
console.log('上传成功');
|
console.log(toPublicUrl(args.target, latestSaveKey, latestUploaded));
|
||||||
const pathUrl = uploaded.url && String(uploaded.url).startsWith('http')
|
|
||||||
? uploaded.url
|
|
||||||
: `${CDN_HOST[args.target]}${saveKey}`;
|
|
||||||
console.log(pathUrl);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main().catch((error) => {
|
main().catch((error) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user