perf: optimize the pkg command (#5785)

This commit is contained in:
chenos 2024-12-03 23:13:09 +08:00 committed by GitHub
parent 79743f0948
commit 02e418e83f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 40 additions and 10 deletions

View File

@ -74,3 +74,10 @@ INIT_ROOT_USERNAME=nocobase
################# ENCRYPTION FIELD #################
ENCRYPTION_FIELD_KEY=
################# NOCOBASE PACKAGE AUTH #################
# service platform username
NOCOBASE_PKG_USERNAME=
# service platform password
NOCOBASE_PKG_PASSWORD=

View File

@ -58,14 +58,16 @@ class Package {
return [version, this.data.versions[version].dist.tarball];
}
if (version.includes('beta')) {
version = version.split('beta')[0] + 'beta';
} else if (version.includes('alpha')) {
const prefix = (version = version.split('alpha')[0]);
version = Object.keys(this.data.versions)
.filter((ver) => ver.startsWith(`${prefix}alpha`))
.sort()
.pop();
const keys = version.split('.');
const length = keys.length;
if (version.includes('rc')) {
version = version.split('-').shift();
}
if (length === 5) {
keys.pop();
version = keys.join('.');
}
if (version === 'latest') {
@ -93,11 +95,25 @@ class Package {
return false;
}
async isDownloaded(version) {
const packageFile = path.resolve(process.env.PLUGIN_STORAGE_PATH, this.packageName, 'package.json');
if (await fs.exists(packageFile)) {
const json = await fs.readJson(packageFile);
if (json.version === version) {
return true;
}
}
return false;
}
async download(options = {}) {
if (await this.isDevPackage()) {
console.log(chalk.yellowBright(`Skipped: ${this.packageName} is dev package`));
return;
}
if (await this.isDownloaded(options.version)) {
return;
}
await this.getInfo();
if (!this.data) {
console.log(chalk.redBright(`Download failed: ${this.packageName} package does not exist`));
@ -105,6 +121,9 @@ class Package {
}
try {
const [version, url] = this.getTarball(options.version);
if (await this.isDownloaded(version)) {
return;
}
const response = await axios({
url,
responseType: 'stream',
@ -200,8 +219,12 @@ module.exports = (cli) => {
.command('download-pro')
.option('-V, --version [version]')
.action(async () => {
const { NOCOBASE_PKG_URL, NOCOBASE_PKG_USERNAME, NOCOBASE_PKG_PASSWORD } = process.env;
if (!(NOCOBASE_PKG_URL && NOCOBASE_PKG_USERNAME && NOCOBASE_PKG_PASSWORD)) {
const {
NOCOBASE_PKG_URL = 'https://pkg.nocobase.com/',
NOCOBASE_PKG_USERNAME,
NOCOBASE_PKG_PASSWORD,
} = process.env;
if (!(NOCOBASE_PKG_USERNAME && NOCOBASE_PKG_PASSWORD)) {
return;
}
const credentials = { username: NOCOBASE_PKG_USERNAME, password: NOCOBASE_PKG_PASSWORD };