1
0
mirror of https://gitcode.com/github-mirrors/react-native-update-cli.git synced 2025-09-16 01:41:37 +08:00
Code Issues Packages Projects Releases Wiki Activity GitHub Gitee

fix versions command

This commit is contained in:
sunnylqm
2025-04-11 16:09:33 +08:00
parent e2737a29eb
commit c4a34490e3
2 changed files with 107 additions and 52 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "react-native-update-cli", "name": "react-native-update-cli",
"version": "1.43.4", "version": "1.43.5",
"description": "command line tool for react-native-update (remote updates for react native)", "description": "command line tool for react-native-update (remote updates for react native)",
"main": "index.js", "main": "index.js",
"bin": { "bin": {

View File

@@ -6,24 +6,51 @@ import { choosePackage } from './package';
import { compare } from 'compare-versions'; import { compare } from 'compare-versions';
import { depVersions } from './utils/dep-versions'; import { depVersions } from './utils/dep-versions';
import { getCommitInfo } from './utils/git'; import { getCommitInfo } from './utils/git';
import { Platform } from 'types'; import type { Platform } from 'types';
interface Package {
id: string;
name: string;
}
interface Version {
id: string;
hash: string;
name: string;
packages?: Package[];
}
interface CommandOptions {
name?: string;
description?: string;
metaInfo?: string;
platform?: Platform;
versionId?: string;
packageId?: string;
packageVersion?: string;
minPackageVersion?: string;
maxPackageVersion?: string;
rollout?: string;
}
async function showVersion(appId: string, offset: number) { async function showVersion(appId: string, offset: number) {
const { data, count } = await get(`/app/${appId}/version/list`); const { data, count } = await get(`/app/${appId}/version/list`);
console.log(`Offset ${offset}`); console.log(`Offset ${offset}`);
for (const version of data) { for (const version of data) {
let packageInfo = version.packages const pkgCount = version.packages?.length || 0;
.slice(0, 3) let packageInfo = '';
.map((v) => v.name)
.join(', ');
const pkgCount = version.packages.length;
if (pkgCount > 3) {
packageInfo += `...and ${pkgCount - 3} more`;
}
if (pkgCount === 0) { if (pkgCount === 0) {
packageInfo = 'no package'; packageInfo = 'no package';
} else { } else {
packageInfo = `[${packageInfo}]`; packageInfo = version.packages
?.slice(0, 3)
.map((pkg: Package) => pkg.name)
.join(', ');
if (pkgCount > 3) {
packageInfo += `...and ${pkgCount - 3} more`;
} else {
packageInfo = `[${packageInfo}]`;
}
} }
console.log( console.log(
`${version.id}) ${version.hash.slice(0, 8)} ${ `${version.id}) ${version.hash.slice(0, 8)} ${
@@ -73,7 +100,10 @@ async function chooseVersion(appId: string) {
offset = 0; offset = 0;
break; break;
default: { default: {
const v = data.find((v) => v.id === (cmd | 0)); const versionId = Number.parseInt(cmd, 10);
const v = data.find(
(version: Version) => version.id === String(versionId),
);
if (v) { if (v) {
return v; return v;
} }
@@ -83,12 +113,13 @@ async function chooseVersion(appId: string) {
} }
export const commands = { export const commands = {
publish: async function ({ args, options }: { args: string[]; options: { publish: async function ({
name: string; args,
description?: string; options,
metaInfo?: string; }: {
platform?: Platform; args: string[];
} }) { options: CommandOptions;
}) {
const fn = args[0]; const fn = args[0];
const { name, description, metaInfo } = options; const { name, description, metaInfo } = options;
@@ -99,7 +130,8 @@ export const commands = {
} }
const platform = checkPlatform( const platform = checkPlatform(
options.platform || (await question('平台(ios/android/harmony):')), options.platform ||
((await question('平台(ios/android/harmony):')) as Platform),
); );
const { appId } = await getSelectedApp(platform); const { appId } = await getSelectedApp(platform);
@@ -125,33 +157,40 @@ export const commands = {
} }
return versionName; return versionName;
}, },
versions: async ({ options }) => { versions: async ({ options }: { options: CommandOptions }) => {
const platform = checkPlatform( const platform = checkPlatform(
options.platform || (await question('平台(ios/android/harmony):')), options.platform ||
((await question('平台(ios/android/harmony):')) as Platform),
); );
const { appId } = await getSelectedApp(platform); const { appId } = await getSelectedApp(platform);
await listVersions(appId); await listVersions(appId);
}, },
update: async ({ args, options }) => { update: async ({
args,
options,
}: {
args: string[];
options: CommandOptions;
}) => {
const platform = checkPlatform( const platform = checkPlatform(
options.platform || (await question('平台(ios/android/harmony):')), options.platform ||
((await question('平台(ios/android/harmony):')) as Platform),
); );
const { appId } = await getSelectedApp(platform); const { appId } = await getSelectedApp(platform);
let versionId = options.versionId || (await chooseVersion(appId)).id; let versionId = options.versionId || (await chooseVersion(appId)).id;
if (versionId === 'null') { if (versionId === 'null') {
versionId = null; versionId = undefined;
} }
let pkgId: string | undefined; let pkgId: string | undefined;
let pkgVersion = options.packageVersion; let pkgVersion = options.packageVersion;
let minPkgVersion = options.minPackageVersion; let minPkgVersion = options.minPackageVersion;
let maxPkgVersion = options.maxPackageVersion; let maxPkgVersion = options.maxPackageVersion;
let rollout = options.rollout; let rollout: number | undefined = undefined;
if (rollout === undefined) {
rollout = null; if (options.rollout !== undefined) {
} else {
try { try {
rollout = Number.parseInt(rollout); rollout = Number.parseInt(options.rollout);
} catch (e) { } catch (e) {
throw new Error('rollout 必须是 1-100 的整数'); throw new Error('rollout 必须是 1-100 的整数');
} }
@@ -159,15 +198,18 @@ export const commands = {
throw new Error('rollout 必须是 1-100 的整数'); throw new Error('rollout 必须是 1-100 的整数');
} }
} }
if (minPkgVersion) { if (minPkgVersion) {
minPkgVersion = String(minPkgVersion).trim(); minPkgVersion = String(minPkgVersion).trim();
const { data } = await get(`/app/${appId}/package/list?limit=1000`); const { data } = await get(`/app/${appId}/package/list?limit=1000`);
const pkgs = data.filter((d) => compare(d.name, minPkgVersion, '>=')); const pkgs = data.filter((pkg: Package) =>
compare(pkg.name, minPkgVersion, '>='),
);
if (pkgs.length === 0) { if (pkgs.length === 0) {
throw new Error(`未查询到 >= ${minPkgVersion} 的原生版本`); throw new Error(`未查询到 >= ${minPkgVersion} 的原生版本`);
} }
if (rollout) { if (rollout !== undefined) {
const rolloutConfig = {}; const rolloutConfig: Record<string, number> = {};
for (const pkg of pkgs) { for (const pkg of pkgs) {
rolloutConfig[pkg.name] = rollout; rolloutConfig[pkg.name] = rollout;
} }
@@ -178,7 +220,7 @@ export const commands = {
}); });
console.log( console.log(
`已在原生版本 ${pkgs `已在原生版本 ${pkgs
.map((p) => p.name) .map((pkg: Package) => pkg.name)
.join(', ')} 上设置灰度发布 ${rollout}% 热更版本 ${versionId}`, .join(', ')} 上设置灰度发布 ${rollout}% 热更版本 ${versionId}`,
); );
} }
@@ -196,12 +238,14 @@ export const commands = {
if (maxPkgVersion) { if (maxPkgVersion) {
maxPkgVersion = String(maxPkgVersion).trim(); maxPkgVersion = String(maxPkgVersion).trim();
const { data } = await get(`/app/${appId}/package/list?limit=1000`); const { data } = await get(`/app/${appId}/package/list?limit=1000`);
const pkgs = data.filter((d) => compare(d.name, maxPkgVersion, '<=')); const pkgs = data.filter((pkg: Package) =>
compare(pkg.name, maxPkgVersion, '<='),
);
if (pkgs.length === 0) { if (pkgs.length === 0) {
throw new Error(`未查询到 <= ${maxPkgVersion} 的原生版本`); throw new Error(`未查询到 <= ${maxPkgVersion} 的原生版本`);
} }
if (rollout) { if (rollout !== undefined) {
const rolloutConfig = {}; const rolloutConfig: Record<string, number> = {};
for (const pkg of pkgs) { for (const pkg of pkgs) {
rolloutConfig[pkg.name] = rollout; rolloutConfig[pkg.name] = rollout;
} }
@@ -212,7 +256,7 @@ export const commands = {
}); });
console.log( console.log(
`已在原生版本 ${pkgs `已在原生版本 ${pkgs
.map((p) => p.name) .map((pkg: Package) => pkg.name)
.join(', ')} 上设置灰度发布 ${rollout}% 热更版本 ${versionId}`, .join(', ')} 上设置灰度发布 ${rollout}% 热更版本 ${versionId}`,
); );
} }
@@ -231,7 +275,7 @@ export const commands = {
const { data } = await get(`/app/${appId}/package/list?limit=1000`); const { data } = await get(`/app/${appId}/package/list?limit=1000`);
if (pkgVersion) { if (pkgVersion) {
pkgVersion = pkgVersion.trim(); pkgVersion = pkgVersion.trim();
const pkg = data.find((d) => d.name === pkgVersion); const pkg = data.find((pkg: Package) => pkg.name === pkgVersion);
if (pkg) { if (pkg) {
pkgId = pkg.id; pkgId = pkg.id;
} else { } else {
@@ -247,13 +291,13 @@ export const commands = {
} }
if (!pkgVersion) { if (!pkgVersion) {
const pkg = data.find((d) => String(d.id) === String(pkgId)); const pkg = data.find((pkg: Package) => String(pkg.id) === String(pkgId));
if (pkg) { if (pkg) {
pkgVersion = pkg.name; pkgVersion = pkg.name;
} }
} }
if (rollout) { if (rollout !== undefined && pkgVersion) {
await put(`/app/${appId}/version/${versionId}`, { await put(`/app/${appId}/version/${versionId}`, {
config: { config: {
rollout: { rollout: {
@@ -265,24 +309,35 @@ export const commands = {
`已将在原生版本 ${pkgVersion} (id: ${pkgId}) 上设置灰度发布 ${rollout}% 热更版本 ${versionId} `, `已将在原生版本 ${pkgVersion} (id: ${pkgId}) 上设置灰度发布 ${rollout}% 热更版本 ${versionId} `,
); );
} }
await put(`/app/${appId}/package/${pkgId}`, {
versionId, if (versionId !== undefined) {
}); await put(`/app/${appId}/package/${pkgId}`, {
console.log( versionId,
`已将热更版本 ${versionId} 绑定到原生版本 ${pkgVersion} (id: ${pkgId})`, });
); console.log(
`已将热更版本 ${versionId} 绑定到原生版本 ${pkgVersion} (id: ${pkgId})`,
);
}
}, },
updateVersionInfo: async ({ args, options }) => { updateVersionInfo: async ({
args,
options,
}: {
args: string[];
options: CommandOptions;
}) => {
const platform = checkPlatform( const platform = checkPlatform(
options.platform || (await question('平台(ios/android/harmony):')), options.platform ||
((await question('平台(ios/android/harmony):')) as Platform),
); );
const { appId } = await getSelectedApp(platform); const { appId } = await getSelectedApp(platform);
const versionId = options.versionId || (await chooseVersion(appId)).id; const versionId = options.versionId || (await chooseVersion(appId)).id;
const updateParams = {}; const updateParams: Record<string, string> = {};
options.name && (updateParams.name = options.name); if (options.name) updateParams.name = options.name;
options.description && (updateParams.description = options.description); if (options.description) updateParams.description = options.description;
options.metaInfo && (updateParams.metaInfo = options.metaInfo); if (options.metaInfo) updateParams.metaInfo = options.metaInfo;
await put(`/app/${appId}/version/${versionId}`, updateParams); await put(`/app/${appId}/version/${versionId}`, updateParams);
console.log('操作成功'); console.log('操作成功');
}, },