@@ -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