mirror of
https://gitcode.com/github-mirrors/react-native-update-cli.git
synced 2025-09-18 10:20:39 +08:00
Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2cfe451db5 | ||
![]() |
c7d0aadbf2 | ||
![]() |
2e37d6f1c7 | ||
![]() |
6e7d5de82e | ||
![]() |
3266f09644 |
45
cli.json
45
cli.json
@@ -57,6 +57,27 @@
|
|||||||
},
|
},
|
||||||
"metaInfo": {
|
"metaInfo": {
|
||||||
"hasValue": true
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"packageId": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"packageVersion": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"minPackageVersion": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"maxPackageVersion": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"packageVersionRange": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"rollout": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"dryRun": {
|
||||||
|
"default": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -92,6 +113,9 @@
|
|||||||
},
|
},
|
||||||
"rollout": {
|
"rollout": {
|
||||||
"hasValue": true
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"dryRun": {
|
||||||
|
"default": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -172,6 +196,27 @@
|
|||||||
"metaInfo": {
|
"metaInfo": {
|
||||||
"hasValue": true,
|
"hasValue": true,
|
||||||
"description": "Meta information for publishing"
|
"description": "Meta information for publishing"
|
||||||
|
},
|
||||||
|
"packageId": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"packageVersion": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"minPackageVersion": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"maxPackageVersion": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"packageVersionRange": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"rollout": {
|
||||||
|
"hasValue": true
|
||||||
|
},
|
||||||
|
"dryRun": {
|
||||||
|
"default": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "react-native-update-cli",
|
"name": "react-native-update-cli",
|
||||||
"version": "1.45.3",
|
"version": "1.46.0",
|
||||||
"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": {
|
||||||
|
@@ -19,7 +19,7 @@ import { t } from './utils/i18n';
|
|||||||
import { tempDir } from './utils/constants';
|
import { tempDir } from './utils/constants';
|
||||||
import { checkLockFiles } from './utils/check-lockfile';
|
import { checkLockFiles } from './utils/check-lockfile';
|
||||||
import { addGitIgnore } from './utils/add-gitignore';
|
import { addGitIgnore } from './utils/add-gitignore';
|
||||||
import { commands as versionCommands } from './versions';
|
import { versionCommands } from './versions';
|
||||||
|
|
||||||
type Diff = (oldSource?: Buffer, newSource?: Buffer) => Buffer;
|
type Diff = (oldSource?: Buffer, newSource?: Buffer) => Buffer;
|
||||||
|
|
||||||
@@ -149,6 +149,14 @@ async function runReactNativeBundleCommand({
|
|||||||
const bundleParams = await checkPlugins();
|
const bundleParams = await checkPlugins();
|
||||||
const isSentry = bundleParams.sentry;
|
const isSentry = bundleParams.sentry;
|
||||||
|
|
||||||
|
if (isSentry) {
|
||||||
|
if (platform === 'ios') {
|
||||||
|
process.env.SENTRY_PROPERTIES = 'ios/sentry.properties';
|
||||||
|
} else if (platform === 'android') {
|
||||||
|
process.env.SENTRY_PROPERTIES = 'android/sentry.properties';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let bundleCommand = 'bundle';
|
let bundleCommand = 'bundle';
|
||||||
if (usingExpo) {
|
if (usingExpo) {
|
||||||
bundleCommand = 'export:embed';
|
bundleCommand = 'export:embed';
|
||||||
@@ -918,6 +926,13 @@ export const commands = {
|
|||||||
name,
|
name,
|
||||||
description,
|
description,
|
||||||
metaInfo,
|
metaInfo,
|
||||||
|
packageId,
|
||||||
|
packageVersion,
|
||||||
|
minPackageVersion,
|
||||||
|
maxPackageVersion,
|
||||||
|
packageVersionRange,
|
||||||
|
rollout,
|
||||||
|
dryRun,
|
||||||
} = translateOptions({
|
} = translateOptions({
|
||||||
...options,
|
...options,
|
||||||
tempDir,
|
tempDir,
|
||||||
@@ -966,6 +981,13 @@ export const commands = {
|
|||||||
name,
|
name,
|
||||||
description,
|
description,
|
||||||
metaInfo,
|
metaInfo,
|
||||||
|
packageId,
|
||||||
|
packageVersion,
|
||||||
|
minPackageVersion,
|
||||||
|
maxPackageVersion,
|
||||||
|
packageVersionRange,
|
||||||
|
rollout,
|
||||||
|
dryRun: Boolean(dryRun),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -101,7 +101,7 @@ This can reduce the risk of inconsistent dependencies and supply chain attacks.
|
|||||||
rnuVersionNotFound:
|
rnuVersionNotFound:
|
||||||
'react-native-update: Cannot get the version number. Please run the command in the project directory',
|
'react-native-update: Cannot get the version number. Please run the command in the project directory',
|
||||||
rolloutConfigSet:
|
rolloutConfigSet:
|
||||||
'Set {{rollout}}% rollout for version {{version}} on native version(s) {{versions}}',
|
'Set {{rollout}}% rollout for OTA update {{version}} on native version(s) {{versions}}',
|
||||||
rolloutRangeError: 'rollout must be an integer between 1-100',
|
rolloutRangeError: 'rollout must be an integer between 1-100',
|
||||||
runningHermesc: 'Running hermesc: {{- command}} {{- args}}',
|
runningHermesc: 'Running hermesc: {{- command}} {{- args}}',
|
||||||
sentryCliNotFound:
|
sentryCliNotFound:
|
||||||
@@ -122,11 +122,12 @@ This can reduce the risk of inconsistent dependencies and supply chain attacks.
|
|||||||
usageUploadApp: 'Usage: cresc uploadApp <app file>',
|
usageUploadApp: 'Usage: cresc uploadApp <app file>',
|
||||||
usageUploadIpa: 'Usage: cresc uploadIpa <ipa file>',
|
usageUploadIpa: 'Usage: cresc uploadIpa <ipa file>',
|
||||||
versionBind:
|
versionBind:
|
||||||
'Bound version {{version}} to native version {{nativeVersion}} (id: {{id}})',
|
'Bound hot update {{version}} to native version {{nativeVersion}} (id: {{id}})',
|
||||||
welcomeMessage: 'Welcome to Cresc hot update service, {{name}}.',
|
welcomeMessage: 'Welcome to Cresc hot update service, {{name}}.',
|
||||||
versionNameQuestion: 'Enter version name:',
|
versionNameQuestion: 'Enter OTA update name:',
|
||||||
versionDescriptionQuestion: 'Enter version description:',
|
versionDescriptionQuestion: 'Enter OTA update description:',
|
||||||
versionMetaInfoQuestion: 'Enter custom meta info:',
|
versionMetaInfoQuestion: 'Enter custom meta info:',
|
||||||
updateNativePackageQuestion: 'Bind to native package now?(Y/N)',
|
updateNativePackageQuestion: 'Bind to native package now?(Y/N)',
|
||||||
unnamed: '(Unnamed)',
|
unnamed: '(Unnamed)',
|
||||||
|
dryRun: 'Below is the dry-run result, no actual operation will be performed:',
|
||||||
};
|
};
|
||||||
|
@@ -96,7 +96,7 @@ export default {
|
|||||||
rnuVersionNotFound:
|
rnuVersionNotFound:
|
||||||
'react-native-update: 无法获取版本号。请在项目目录中运行命令',
|
'react-native-update: 无法获取版本号。请在项目目录中运行命令',
|
||||||
rolloutConfigSet:
|
rolloutConfigSet:
|
||||||
'已在原生版本 {{versions}} 上设置灰度发布 {{rollout}}% 热更版本 {{version}}',
|
'已在原生版本 {{versions}} 上设置灰度发布 {{rollout}}% 热更包 {{version}}',
|
||||||
rolloutRangeError: 'rollout 必须是 1-100 的整数',
|
rolloutRangeError: 'rollout 必须是 1-100 的整数',
|
||||||
runningHermesc: '运行 hermesc:{{- command}} {{- args}}',
|
runningHermesc: '运行 hermesc:{{- command}} {{- args}}',
|
||||||
sentryCliNotFound: '无法找到 Sentry CLI 工具,请确保已正确安装 @sentry/cli',
|
sentryCliNotFound: '无法找到 Sentry CLI 工具,请确保已正确安装 @sentry/cli',
|
||||||
@@ -115,11 +115,12 @@ export default {
|
|||||||
usageUploadApp: '使用方法: pushy uploadApp app后缀文件',
|
usageUploadApp: '使用方法: pushy uploadApp app后缀文件',
|
||||||
usageUploadIpa: '使用方法: pushy uploadIpa ipa后缀文件',
|
usageUploadIpa: '使用方法: pushy uploadIpa ipa后缀文件',
|
||||||
versionBind:
|
versionBind:
|
||||||
'已将热更版本 {{version}} 绑定到原生版本 {{nativeVersion}} (id: {{id}})',
|
'已将热更包 {{version}} 绑定到原生版本 {{nativeVersion}} (id: {{id}})',
|
||||||
welcomeMessage: '欢迎使用 pushy 热更新服务,{{name}}。',
|
welcomeMessage: '欢迎使用 pushy 热更新服务,{{name}}。',
|
||||||
versionNameQuestion: '输入版本名称:',
|
versionNameQuestion: '输入版本名称:',
|
||||||
versionDescriptionQuestion: '输入版本描述:',
|
versionDescriptionQuestion: '输入版本描述:',
|
||||||
versionMetaInfoQuestion: '输入自定义的 meta info:',
|
versionMetaInfoQuestion: '输入自定义的 meta info:',
|
||||||
updateNativePackageQuestion: '是否现在将此热更应用到原生包上?(Y/N)',
|
updateNativePackageQuestion: '是否现在将此热更应用到原生包上?(Y/N)',
|
||||||
unnamed: '(未命名)',
|
unnamed: '(未命名)',
|
||||||
|
dryRun: '以下是 dry-run 模拟运行结果,不会实际执行任何操作:',
|
||||||
};
|
};
|
||||||
|
@@ -2,7 +2,7 @@ import { get, getAllPackages, post, uploadFile } from './api';
|
|||||||
import { question, saveToLocal } from './utils';
|
import { question, saveToLocal } from './utils';
|
||||||
import { t } from './utils/i18n';
|
import { t } from './utils/i18n';
|
||||||
|
|
||||||
import { checkPlatform, getPlatform, getSelectedApp } from './app';
|
import { getPlatform, getSelectedApp } from './app';
|
||||||
|
|
||||||
import { getApkInfo, getIpaInfo, getAppInfo } from './utils';
|
import { getApkInfo, getIpaInfo, getAppInfo } from './utils';
|
||||||
import Table from 'tty-table';
|
import Table from 'tty-table';
|
||||||
|
@@ -8,8 +8,10 @@ import { depVersions } from './utils/dep-versions';
|
|||||||
import { getCommitInfo } from './utils/git';
|
import { getCommitInfo } from './utils/git';
|
||||||
import type { Package, Platform, Version } from 'types';
|
import type { Package, Platform, Version } from 'types';
|
||||||
import { satisfies } from 'compare-versions';
|
import { satisfies } from 'compare-versions';
|
||||||
|
import chalk from 'chalk';
|
||||||
|
|
||||||
interface CommandOptions {
|
interface VersionCommandOptions {
|
||||||
|
appId?: string;
|
||||||
name?: string;
|
name?: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
metaInfo?: string;
|
metaInfo?: string;
|
||||||
@@ -21,6 +23,7 @@ interface CommandOptions {
|
|||||||
maxPackageVersion?: string;
|
maxPackageVersion?: string;
|
||||||
packageVersionRange?: string;
|
packageVersionRange?: string;
|
||||||
rollout?: string;
|
rollout?: string;
|
||||||
|
dryRun?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function showVersion(appId: string, offset: number) {
|
async function showVersion(appId: string, offset: number) {
|
||||||
@@ -107,22 +110,29 @@ export const bindVersionToPackages = async ({
|
|||||||
versionId,
|
versionId,
|
||||||
pkgs,
|
pkgs,
|
||||||
rollout,
|
rollout,
|
||||||
|
dryRun,
|
||||||
}: {
|
}: {
|
||||||
appId: string;
|
appId: string;
|
||||||
versionId: string;
|
versionId: string;
|
||||||
pkgs: Package[];
|
pkgs: Package[];
|
||||||
rollout?: number;
|
rollout?: number;
|
||||||
|
dryRun?: boolean;
|
||||||
}) => {
|
}) => {
|
||||||
|
if (dryRun) {
|
||||||
|
console.log(chalk.yellow(t('dryRun')));
|
||||||
|
}
|
||||||
if (rollout !== undefined) {
|
if (rollout !== undefined) {
|
||||||
const rolloutConfig: Record<string, number> = {};
|
const rolloutConfig: Record<string, number> = {};
|
||||||
for (const pkg of pkgs) {
|
for (const pkg of pkgs) {
|
||||||
rolloutConfig[pkg.name] = rollout;
|
rolloutConfig[pkg.name] = rollout;
|
||||||
}
|
}
|
||||||
|
if (!dryRun) {
|
||||||
await put(`/app/${appId}/version/${versionId}`, {
|
await put(`/app/${appId}/version/${versionId}`, {
|
||||||
config: {
|
config: {
|
||||||
rollout: rolloutConfig,
|
rollout: rolloutConfig,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
}
|
||||||
console.log(
|
console.log(
|
||||||
`${t('rolloutConfigSet', {
|
`${t('rolloutConfigSet', {
|
||||||
versions: pkgs.map((pkg: Package) => pkg.name).join(', '),
|
versions: pkgs.map((pkg: Package) => pkg.name).join(', '),
|
||||||
@@ -131,9 +141,11 @@ export const bindVersionToPackages = async ({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
for (const pkg of pkgs) {
|
for (const pkg of pkgs) {
|
||||||
|
if (!dryRun) {
|
||||||
await put(`/app/${appId}/package/${pkg.id}`, {
|
await put(`/app/${appId}/package/${pkg.id}`, {
|
||||||
versionId,
|
versionId,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
console.log(
|
console.log(
|
||||||
`${t('versionBind', {
|
`${t('versionBind', {
|
||||||
version: versionId,
|
version: versionId,
|
||||||
@@ -145,13 +157,13 @@ export const bindVersionToPackages = async ({
|
|||||||
console.log(t('operationComplete', { count: pkgs.length }));
|
console.log(t('operationComplete', { count: pkgs.length }));
|
||||||
};
|
};
|
||||||
|
|
||||||
export const commands = {
|
export const versionCommands = {
|
||||||
publish: async function ({
|
publish: async function ({
|
||||||
args,
|
args,
|
||||||
options,
|
options,
|
||||||
}: {
|
}: {
|
||||||
args: string[];
|
args: string[];
|
||||||
options: CommandOptions;
|
options: VersionCommandOptions;
|
||||||
}) {
|
}) {
|
||||||
const fn = args[0];
|
const fn = args[0];
|
||||||
const { name, description, metaInfo } = options;
|
const { name, description, metaInfo } = options;
|
||||||
@@ -180,26 +192,52 @@ export const commands = {
|
|||||||
saveToLocal(fn, `${appId}/ppk/${id}.ppk`);
|
saveToLocal(fn, `${appId}/ppk/${id}.ppk`);
|
||||||
console.log(t('packageUploadSuccess', { id }));
|
console.log(t('packageUploadSuccess', { id }));
|
||||||
|
|
||||||
const v = await question(t('updateNativePackageQuestion'));
|
const {
|
||||||
if (v.toLowerCase() === 'y') {
|
packageId,
|
||||||
await this.update({ args: [], options: { versionId: id, platform } });
|
packageVersion,
|
||||||
|
packageVersionRange,
|
||||||
|
minPackageVersion,
|
||||||
|
maxPackageVersion,
|
||||||
|
rollout,
|
||||||
|
dryRun,
|
||||||
|
} = options;
|
||||||
|
|
||||||
|
if (
|
||||||
|
packageId ||
|
||||||
|
packageVersion ||
|
||||||
|
packageVersionRange ||
|
||||||
|
minPackageVersion ||
|
||||||
|
maxPackageVersion
|
||||||
|
) {
|
||||||
|
await this.update({
|
||||||
|
options: {
|
||||||
|
versionId: id,
|
||||||
|
platform,
|
||||||
|
packageId,
|
||||||
|
packageVersion,
|
||||||
|
packageVersionRange,
|
||||||
|
minPackageVersion,
|
||||||
|
maxPackageVersion,
|
||||||
|
rollout,
|
||||||
|
dryRun,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const q = await question(t('updateNativePackageQuestion'));
|
||||||
|
if (q.toLowerCase() === 'y') {
|
||||||
|
await this.update({ options: { versionId: id, platform } });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return versionName;
|
return versionName;
|
||||||
},
|
},
|
||||||
versions: async ({ options }: { options: CommandOptions }) => {
|
versions: async ({ options }: { options: VersionCommandOptions }) => {
|
||||||
const platform = await getPlatform(options.platform);
|
const platform = await getPlatform(options.platform);
|
||||||
const { appId } = await getSelectedApp(platform);
|
const { appId } = await getSelectedApp(platform);
|
||||||
await listVersions(appId);
|
await listVersions(appId);
|
||||||
},
|
},
|
||||||
update: async ({
|
update: async ({ options }: { options: VersionCommandOptions }) => {
|
||||||
args,
|
|
||||||
options,
|
|
||||||
}: {
|
|
||||||
args: string[];
|
|
||||||
options: CommandOptions;
|
|
||||||
}) => {
|
|
||||||
const platform = await getPlatform(options.platform);
|
const platform = await getPlatform(options.platform);
|
||||||
const { appId } = await getSelectedApp(platform);
|
const appId = options.appId || (await getSelectedApp(platform)).appId;
|
||||||
let versionId = options.versionId || (await chooseVersion(appId)).id;
|
let versionId = options.versionId || (await chooseVersion(appId)).id;
|
||||||
if (versionId === 'null') {
|
if (versionId === 'null') {
|
||||||
versionId = undefined;
|
versionId = undefined;
|
||||||
@@ -294,15 +332,13 @@ export const commands = {
|
|||||||
versionId,
|
versionId,
|
||||||
pkgs: pkgsToBind,
|
pkgs: pkgsToBind,
|
||||||
rollout,
|
rollout,
|
||||||
|
dryRun: options.dryRun,
|
||||||
});
|
});
|
||||||
console.log(t('operationSuccess'));
|
|
||||||
},
|
},
|
||||||
updateVersionInfo: async ({
|
updateVersionInfo: async ({
|
||||||
args,
|
|
||||||
options,
|
options,
|
||||||
}: {
|
}: {
|
||||||
args: string[];
|
options: VersionCommandOptions;
|
||||||
options: CommandOptions;
|
|
||||||
}) => {
|
}) => {
|
||||||
const platform = await getPlatform(options.platform);
|
const platform = await getPlatform(options.platform);
|
||||||
const { appId } = await getSelectedApp(platform);
|
const { appId } = await getSelectedApp(platform);
|
||||||
|
Reference in New Issue
Block a user