diff --git a/tools/storage/openlab/cli.mjs b/tools/storage/openlab/cli.mjs index b8ca38d43100afc4800cfc1e36ecda256207cdad..94071870962aba3275f74025e42c380008ab8fb4 100644 --- a/tools/storage/openlab/cli.mjs +++ b/tools/storage/openlab/cli.mjs @@ -41,6 +41,32 @@ command.command("download") await download(options) }) +command.command("search-asset-paths-by-name") + .description("List assets from openlab by name filter") + .option("--repository ", "Repository name", "koala-raw") + .option("--name ", "path-like filter", "/ohos-sdk/6.*.zip") + .action(async (options) => { + const searchResul = await openlab.searchAssets({ + "repository": options.repository, + "name": options.name + }) + searchResul.items.forEach(assetInfo => { + console.log(assetInfo.path) + }) + }) + +command.command("download-asset-by-name") + .description("Downloads package from openlab") + .option("--repository ", "Repository name", "koala-raw") + .option("--name ", "path-like name") + .option("-d --destination ", "path to the folder to download") + .action(async (options) => { + await openlab.downloadRawArchiveFromUrl( + `${openlab.webRepositoryBaseUrl()}/${options.repository}${options.name}`, + options.destination, + ) + }) + command.command("chmod") .description("Sets mod bits") .requiredOption("-p --path ", "path to the file or folder") diff --git a/tools/storage/openlab/openlab.mjs b/tools/storage/openlab/openlab.mjs index 2502f1c5f403102d4ab77943d498d9ebbb5aa589..beefe35d5144283d34d76ece7596d5ce5b65955a 100644 --- a/tools/storage/openlab/openlab.mjs +++ b/tools/storage/openlab/openlab.mjs @@ -15,9 +15,12 @@ import path from "path" import process from "process" +import querystring from "querystring" import { Http } from "../../utils/http.mjs" +import { Message } from "../../utils/log/message.mjs"; const KOALA_REPO = process.env.KOALA_REPO +const DEFAUL_KOALA_REPO_NAME = "koala-raw" // Set NEXUS_NPM_PASS or both OPENLAB_USERNAME/OPENLAB_PASSWORD in your ENV to use Openlab storage const NEXUS_NPM_PASS = process.env.NEXUS_NPM_PASS @@ -55,7 +58,23 @@ export class Openlab { if (KOALA_REPO) { return KOALA_REPO } - return 'https://nexus.cn.bz-openlab.ru:10443/repository/koala-raw/' + return `${this.webRepositoryBaseUrl()}/${DEFAUL_KOALA_REPO_NAME}/` + } + + restBaseUrl() { + return `${this.rootUrl()}/service/rest/v1` + } + + webRepositoryBaseUrl() { + return `${this.rootUrl()}/repository` + } + + rootUrl() { + const rootUrl = 'https://nexus.cn.bz-openlab.ru:10443' + if (KOALA_REPO) { + Message.warning(`Ignore(unsupported currently) env.var. KOALA_REPO('${KOALA_REPO}'). Using '${rootUrl}'...`) + } + return rootUrl } rawPackageUrl(name, version, file) { @@ -63,6 +82,15 @@ export class Openlab { return host + name + '/' + version + '/' + file } + // https://help.sonatype.com/en/assets-api.html + async searchAssets(params) { + const resultJsonString = await Http.httpGet( + `${this.restBaseUrl()}/search/assets?${querystring.stringify(params)}`, + this.getHeaders() + ) + return JSON.parse(resultJsonString) + } + async downloadRawFile(packageName, packageVersion, fileName, outDir, outFile) { await Http.downloadFile( this.rawPackageUrl(packageName, packageVersion, fileName), diff --git a/tools/utils/http.mjs b/tools/utils/http.mjs index fb9e9807871e4a9e052b295c3fc2d9cb2002cc76..f3301eb1b60258573bd5f8036cab7fb05a550ee6 100644 --- a/tools/utils/http.mjs +++ b/tools/utils/http.mjs @@ -49,7 +49,6 @@ export class Http { reject(new Error(`Error: ${error.message}`)) }); - request.write(); request.end(); }) }