Skip to content

Commit 04f75cd

Browse files
committed
add rollout
1 parent 5a05679 commit 04f75cd

File tree

2 files changed

+77
-16
lines changed

2 files changed

+77
-16
lines changed

cli.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@
8181
"packageId": {
8282
"hasValue": true
8383
},
84-
8584
"packageVersion": {
8685
"hasValue": true
8786
},
@@ -90,6 +89,9 @@
9089
},
9190
"maxPackageVersion": {
9291
"hasValue": true
92+
},
93+
"rollout": {
94+
"hasValue": true
9395
}
9496
}
9597
},

src/versions.js

Lines changed: 74 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -133,30 +133,45 @@ export const commands = {
133133
let pkgVersion = options.packageVersion;
134134
let minPkgVersion = options.minPackageVersion;
135135
let maxPkgVersion = options.maxPackageVersion;
136-
if (pkgVersion) {
137-
pkgVersion = pkgVersion.trim();
138-
const { data } = await get(`/app/${appId}/package/list?limit=1000`);
139-
const pkg = data.find((d) => d.name === pkgVersion);
140-
if (pkg) {
141-
pkgId = pkg.id;
142-
} else {
143-
throw new Error(`未查询到匹配原生版本:${pkgVersion}`);
136+
let rollout = options.rollout;
137+
if (rollout !== undefined) {
138+
try {
139+
rollout = parseInt(rollout);
140+
} catch (e) {
141+
throw new Error('rollout 必须是 1-100 的整数');
142+
}
143+
if (rollout < 1 || rollout > 100) {
144+
throw new Error('rollout 必须是 1-100 的整数');
144145
}
145146
}
146147
if (minPkgVersion) {
147148
minPkgVersion = String(minPkgVersion).trim();
148149
const { data } = await get(`/app/${appId}/package/list?limit=1000`);
149150
const pkgs = data.filter((d) => compare(d.name, minPkgVersion, '>='));
150151
if (pkgs.length === 0) {
151-
throw new Error(
152-
`未查询到 >= ${minPkgVersion} 的原生版本`,
152+
throw new Error(`未查询到 >= ${minPkgVersion} 的原生版本`);
153+
}
154+
if (rollout) {
155+
const rolloutConfig = {};
156+
for (const pkg of pkgs) {
157+
rolloutConfig[pkg.name] = rollout;
158+
}
159+
await put(`/app/${appId}/version/${versionId}`, {
160+
config: {
161+
rollout: rolloutConfig,
162+
},
163+
});
164+
console.log(
165+
`已在原生版本 ${pkgs
166+
.map((p) => p.name)
167+
.join(', ')} 上设置灰度发布 ${rollout}% 热更版本 ${versionId}`,
153168
);
154169
}
155170
for (const pkg of pkgs) {
156171
await put(`/app/${appId}/package/${pkg.id}`, {
157172
versionId,
158173
});
159-
console.log(`已将版本 ${versionId} 绑定到原生版本 ${pkg.name}`);
174+
console.log(`已将热更版本 ${versionId} 绑定到原生版本 ${pkg.name}`);
160175
}
161176
console.log(`操作完成,共已绑定 ${pkgs.length} 个原生版本`);
162177
return;
@@ -166,30 +181,74 @@ export const commands = {
166181
const { data } = await get(`/app/${appId}/package/list?limit=1000`);
167182
const pkgs = data.filter((d) => compare(d.name, maxPkgVersion, '<='));
168183
if (pkgs.length === 0) {
169-
throw new Error(
170-
`未查询到 <= ${maxPkgVersion} 的原生版本`,
184+
throw new Error(`未查询到 <= ${maxPkgVersion} 的原生版本`);
185+
}
186+
if (rollout) {
187+
const rolloutConfig = {};
188+
for (const pkg of pkgs) {
189+
rolloutConfig[pkg.name] = rollout;
190+
}
191+
await put(`/app/${appId}/version/${versionId}`, {
192+
config: {
193+
rollout: rolloutConfig,
194+
},
195+
});
196+
console.log(
197+
`已在原生版本 ${pkgs
198+
.map((p) => p.name)
199+
.join(', ')} 上设置灰度发布 ${rollout}% 热更版本 ${versionId}`,
171200
);
172201
}
173202
for (const pkg of pkgs) {
174203
await put(`/app/${appId}/package/${pkg.id}`, {
175204
versionId,
176205
});
177-
console.log(`已将版本 ${versionId} 绑定到原生版本 ${pkg.name}`);
206+
console.log(`已将热更版本 ${versionId} 绑定到原生版本 ${pkg.name}`);
178207
}
179208
console.log(`操作完成,共已绑定 ${pkgs.length} 个原生版本`);
180209
return;
181210
}
211+
212+
if (pkgVersion) {
213+
pkgVersion = pkgVersion.trim();
214+
const { data } = await get(`/app/${appId}/package/list?limit=1000`);
215+
const pkg = data.find((d) => d.name === pkgVersion);
216+
if (pkg) {
217+
pkgId = pkg.id;
218+
} else {
219+
throw new Error(`未查询到匹配原生版本:${pkgVersion}`);
220+
}
221+
}
182222
if (!pkgId) {
183223
pkgId = options.packageId || (await choosePackage(appId)).id;
184224
}
185225

186226
if (!pkgId) {
187227
throw new Error('请提供 packageId 或 packageVersion 参数');
188228
}
229+
if (rollout) {
230+
if (!pkgVersion) {
231+
const { data } = await get(`/app/${appId}/package/list?limit=1000`);
232+
const pkg = data.find((d) => d.id === pkgId);
233+
if (pkg) {
234+
pkgVersion = pkg.name;
235+
}
236+
}
237+
await put(`/app/${appId}/version/${versionId}`, {
238+
config: {
239+
rollout: {
240+
[pkgVersion]: rollout,
241+
},
242+
},
243+
});
244+
console.log(
245+
`已将在原生版本 ${pkgVersion} 上设置灰度发布 ${rollout}% 热更版本 ${versionId} `,
246+
);
247+
}
189248
await put(`/app/${appId}/package/${pkgId}`, {
190249
versionId,
191250
});
192-
console.log('操作成功');
251+
console.log(`已将热更版本 ${versionId} 绑定到原生版本 ${pkgVersion}`);
193252
},
194253
updateVersionInfo: async function ({ args, options }) {
195254
const platform = checkPlatform(

0 commit comments

Comments
 (0)