UNPKG

jsii-release

Version:

Release jsii modules to multiple package managers

133 lines 15.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CodeArtifactCli = void 0; const child_process = __importStar(require("child_process")); const path = __importStar(require("path")); const credential_providers_1 = require("@aws-sdk/credential-providers"); const glob = __importStar(require("glob")); const codeartifact_repo_1 = require("./codeartifact-repo"); const shell_1 = require("./shell"); const maven_1 = require("./staging/maven"); const npm_1 = require("./staging/npm"); const nuget_1 = require("./staging/nuget"); const pip_1 = require("./staging/pip"); const usage_dir_1 = require("./usage-dir"); const LOGIN_DATA_KEY = 'login'; class CodeArtifactCli { constructor(options = {}) { this.options = options; this.usageDir = usage_dir_1.UsageDir.default(); } get repoOptions() { return { credentials: this.options.assumeRoleArn ? (0, credential_providers_1.fromTemporaryCredentials)({ params: { RoleArn: this.options.assumeRoleArn, DurationSeconds: 3600, RoleSessionName: 'publib-ca', }, }) : undefined, }; } /** * Create a random repository, return its name */ async create() { const repo = await codeartifact_repo_1.CodeArtifactRepo.createRandom(this.repoOptions); return repo.repositoryName; } /** * Delete the given repo */ async delete(repoName) { const repo = await this.repoFromName(repoName); await repo.delete(); if (!repoName) { await this.usageDir.delete(); } } /** * Log in to the given repo, write activation instructins to the usage dir */ async login(repoName) { const repo = await this.repoFromName(repoName); const login = await repo.login(); await this.usageDir.reset(); await this.usageDir.putJson(LOGIN_DATA_KEY, login); await this.usageDir.addToEnv({ CODEARTIFACT_REPO: login.repositoryName, }); await (0, npm_1.npmLogin)(login, this.usageDir); await (0, pip_1.pipLogin)(login, this.usageDir); await (0, maven_1.mavenLogin)(login, this.usageDir); await (0, nuget_1.nugetLogin)(login, this.usageDir); return login; } async publish(directory, repoName) { const repo = await this.repoFromName(repoName); const login = await repo.login(); await (0, npm_1.uploadNpmPackages)(glob.sync(path.join(directory, 'js', '*.tgz')), login, this.usageDir); await (0, pip_1.uploadPythonPackages)(glob.sync(path.join(directory, 'python', '*')), login); await (0, maven_1.uploadJavaPackages)(glob.sync(path.join(directory, 'java', '**', '*.pom')), login, this.usageDir); await (0, nuget_1.uploadDotnetPackages)(glob.sync(path.join(directory, 'dotnet', '**', '*.nupkg')), this.usageDir); console.log('🛍 Configuring packages for upstream versions'); await repo.markAllUpstreamAllow(); } async gc() { await codeartifact_repo_1.CodeArtifactRepo.gc(this.repoOptions); } async runCommand(command) { await this.usageDir.activateInCurrentProcess(); await (0, shell_1.shell)(command, { shell: true, show: 'always', }); } async runInteractively(command) { await this.usageDir.activateInCurrentProcess(); child_process.execSync(command, { env: process.env, stdio: ['inherit', 'inherit', 'inherit'], }); } /** * Return a CodeArtifactRepo object, either from the name argument or the most recently activated repository */ async repoFromName(repoName) { if (repoName) { return codeartifact_repo_1.CodeArtifactRepo.existing(repoName, this.repoOptions); } const loginInfo = await this.usageDir.readJson(LOGIN_DATA_KEY); if (loginInfo && loginInfo.expirationTimeMs > Date.now()) { const existing = codeartifact_repo_1.CodeArtifactRepo.existing(loginInfo.repositoryName, this.repoOptions); existing.setLoginInformation(loginInfo); return existing; } throw new Error('No repository name given, and no repository activated recently. Login to a repo or pass a repo name.'); } } exports.CodeArtifactCli = CodeArtifactCli; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWFydGlmYWN0LWNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2RlYXJ0aWZhY3QvY29kZWFydGlmYWN0LWNsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZEQUErQztBQUMvQywyQ0FBNkI7QUFDN0Isd0VBQXlFO0FBQ3pFLDJDQUE2QjtBQUM3QiwyREFBa0c7QUFDbEcsbUNBQWdDO0FBQ2hDLDJDQUFpRTtBQUNqRSx1Q0FBNEQ7QUFDNUQsMkNBQW1FO0FBQ25FLHVDQUErRDtBQUMvRCwyQ0FBdUM7QUFFdkMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBTS9CLE1BQWEsZUFBZTtJQUcxQixZQUE2QixVQUFrQyxFQUFFO1FBQXBDLFlBQU8sR0FBUCxPQUFPLENBQTZCO1FBRmpELGFBQVEsR0FBRyxvQkFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRzlDLENBQUM7SUFFRCxJQUFZLFdBQVc7UUFDckIsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBQSwrQ0FBd0IsRUFBQztnQkFDakUsTUFBTSxFQUFFO29CQUNOLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7b0JBQ25DLGVBQWUsRUFBRSxJQUFJO29CQUNyQixlQUFlLEVBQUUsV0FBVztpQkFDN0I7YUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE1BQU07UUFDakIsTUFBTSxJQUFJLEdBQUcsTUFBTSxvQ0FBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQWlC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TSxJQUFBLGFBQUssRUFBQyxPQUFPLEVBQUU7WUFDbkIsS0FBSyxFQUFFLElBQUk7WUFDWCxJQUFJLEVBQUUsUUFBUTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBZTtRQUMzQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUMvQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtZQUM5QixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFpQjtRQUMxQyxJQUFJLFFBQVEsRUFBRTtZQUNaLE9BQU8sb0NBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDOUQ7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFtQixjQUFjLENBQUMsQ0FBRTtRQUVsRixJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3hELE1BQU0sUUFBUSxHQUFHLG9DQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2RixRQUFRLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEMsT0FBTyxRQUFRLENBQUM7U0FDakI7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHNHQUFzRyxDQUFDLENBQUM7SUFDMUgsQ0FBQztDQUNGO0FBbEhELDBDQWtIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZnJvbVRlbXBvcmFyeUNyZWRlbnRpYWxzIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xuaW1wb3J0ICogYXMgZ2xvYiBmcm9tICdnbG9iJztcbmltcG9ydCB7IENvZGVBcnRpZmFjdFJlcG8sIENvZGVBcnRpZmFjdFJlcG9PcHRpb25zLCBMb2dpbkluZm9ybWF0aW9uIH0gZnJvbSAnLi9jb2RlYXJ0aWZhY3QtcmVwbyc7XG5pbXBvcnQgeyBzaGVsbCB9IGZyb20gJy4vc2hlbGwnO1xuaW1wb3J0IHsgdXBsb2FkSmF2YVBhY2thZ2VzLCBtYXZlbkxvZ2luIH0gZnJvbSAnLi9zdGFnaW5nL21hdmVuJztcbmltcG9ydCB7IHVwbG9hZE5wbVBhY2thZ2VzLCBucG1Mb2dpbiB9IGZyb20gJy4vc3RhZ2luZy9ucG0nO1xuaW1wb3J0IHsgdXBsb2FkRG90bmV0UGFja2FnZXMsIG51Z2V0TG9naW4gfSBmcm9tICcuL3N0YWdpbmcvbnVnZXQnO1xuaW1wb3J0IHsgdXBsb2FkUHl0aG9uUGFja2FnZXMsIHBpcExvZ2luIH0gZnJvbSAnLi9zdGFnaW5nL3BpcCc7XG5pbXBvcnQgeyBVc2FnZURpciB9IGZyb20gJy4vdXNhZ2UtZGlyJztcblxuY29uc3QgTE9HSU5fREFUQV9LRVkgPSAnbG9naW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVBcnRpZmFjdENsaU9wdGlvbnMge1xuICByZWFkb25seSBhc3N1bWVSb2xlQXJuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ29kZUFydGlmYWN0Q2xpIHtcbiAgcHVibGljIHJlYWRvbmx5IHVzYWdlRGlyID0gVXNhZ2VEaXIuZGVmYXVsdCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogQ29kZUFydGlmYWN0Q2xpT3B0aW9ucyA9IHt9KSB7XG4gIH1cblxuICBwcml2YXRlIGdldCByZXBvT3B0aW9ucygpOiBDb2RlQXJ0aWZhY3RSZXBvT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWRlbnRpYWxzOiB0aGlzLm9wdGlvbnMuYXNzdW1lUm9sZUFybiA/IGZyb21UZW1wb3JhcnlDcmVkZW50aWFscyh7XG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIFJvbGVBcm46IHRoaXMub3B0aW9ucy5hc3N1bWVSb2xlQXJuLFxuICAgICAgICAgIER1cmF0aW9uU2Vjb25kczogMzYwMCxcbiAgICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6ICdwdWJsaWItY2EnLFxuICAgICAgICB9LFxuICAgICAgfSkgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5kb20gcmVwb3NpdG9yeSwgcmV0dXJuIGl0cyBuYW1lXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlKCkge1xuICAgIGNvbnN0IHJlcG8gPSBhd2FpdCBDb2RlQXJ0aWZhY3RSZXBvLmNyZWF0ZVJhbmRvbSh0aGlzLnJlcG9PcHRpb25zKTtcbiAgICByZXR1cm4gcmVwby5yZXBvc2l0b3J5TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIGdpdmVuIHJlcG9cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGUocmVwb05hbWU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXBvID0gYXdhaXQgdGhpcy5yZXBvRnJvbU5hbWUocmVwb05hbWUpO1xuICAgIGF3YWl0IHJlcG8uZGVsZXRlKCk7XG5cbiAgICBpZiAoIXJlcG9OYW1lKSB7XG4gICAgICBhd2FpdCB0aGlzLnVzYWdlRGlyLmRlbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2cgaW4gdG8gdGhlIGdpdmVuIHJlcG8sIHdyaXRlIGFjdGl2YXRpb24gaW5zdHJ1Y3RpbnMgdG8gdGhlIHVzYWdlIGRpclxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvZ2luKHJlcG9OYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVwbyA9IGF3YWl0IHRoaXMucmVwb0Zyb21OYW1lKHJlcG9OYW1lKTtcbiAgICBjb25zdCBsb2dpbiA9IGF3YWl0IHJlcG8ubG9naW4oKTtcblxuICAgIGF3YWl0IHRoaXMudXNhZ2VEaXIucmVzZXQoKTtcbiAgICBhd2FpdCB0aGlzLnVzYWdlRGlyLnB1dEpzb24oTE9HSU5fREFUQV9LRVksIGxvZ2luKTtcblxuICAgIGF3YWl0IHRoaXMudXNhZ2VEaXIuYWRkVG9FbnYoe1xuICAgICAgQ09ERUFSVElGQUNUX1JFUE86IGxvZ2luLnJlcG9zaXRvcnlOYW1lLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgbnBtTG9naW4obG9naW4sIHRoaXMudXNhZ2VEaXIpO1xuICAgIGF3YWl0IHBpcExvZ2luKGxvZ2luLCB0aGlzLnVzYWdlRGlyKTtcbiAgICBhd2FpdCBtYXZlbkxvZ2luKGxvZ2luLCB0aGlzLnVzYWdlRGlyKTtcbiAgICBhd2FpdCBudWdldExvZ2luKGxvZ2luLCB0aGlzLnVzYWdlRGlyKTtcblxuICAgIHJldHVybiBsb2dpbjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwdWJsaXNoKGRpcmVjdG9yeTogc3RyaW5nLCByZXBvTmFtZT86IHN0cmluZykge1xuICAgIGNvbnN0IHJlcG8gPSBhd2FpdCB0aGlzLnJlcG9Gcm9tTmFtZShyZXBvTmFtZSk7XG4gICAgY29uc3QgbG9naW4gPSBhd2FpdCByZXBvLmxvZ2luKCk7XG5cbiAgICBhd2FpdCB1cGxvYWROcG1QYWNrYWdlcyhnbG9iLnN5bmMocGF0aC5qb2luKGRpcmVjdG9yeSwgJ2pzJywgJyoudGd6JykpLCBsb2dpbiwgdGhpcy51c2FnZURpcik7XG5cbiAgICBhd2FpdCB1cGxvYWRQeXRob25QYWNrYWdlcyhnbG9iLnN5bmMocGF0aC5qb2luKGRpcmVjdG9yeSwgJ3B5dGhvbicsICcqJykpLCBsb2dpbik7XG5cbiAgICBhd2FpdCB1cGxvYWRKYXZhUGFja2FnZXMoZ2xvYi5zeW5jKHBhdGguam9pbihkaXJlY3RvcnksICdqYXZhJywgJyoqJywgJyoucG9tJykpLCBsb2dpbiwgdGhpcy51c2FnZURpcik7XG5cbiAgICBhd2FpdCB1cGxvYWREb3RuZXRQYWNrYWdlcyhnbG9iLnN5bmMocGF0aC5qb2luKGRpcmVjdG9yeSwgJ2RvdG5ldCcsICcqKicsICcqLm51cGtnJykpLCB0aGlzLnVzYWdlRGlyKTtcblxuICAgIGNvbnNvbGUubG9nKCfwn5uNIENvbmZpZ3VyaW5nIHBhY2thZ2VzIGZvciB1cHN0cmVhbSB2ZXJzaW9ucycpO1xuICAgIGF3YWl0IHJlcG8ubWFya0FsbFVwc3RyZWFtQWxsb3coKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnYygpIHtcbiAgICBhd2FpdCBDb2RlQXJ0aWZhY3RSZXBvLmdjKHRoaXMucmVwb09wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy51c2FnZURpci5hY3RpdmF0ZUluQ3VycmVudFByb2Nlc3MoKTtcbiAgICBhd2FpdCBzaGVsbChjb21tYW5kLCB7XG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgIHNob3c6ICdhbHdheXMnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJ1bkludGVyYWN0aXZlbHkoY29tbWFuZDogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy51c2FnZURpci5hY3RpdmF0ZUluQ3VycmVudFByb2Nlc3MoKTtcbiAgICBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGNvbW1hbmQsIHtcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICBzdGRpbzogWydpbmhlcml0JywgJ2luaGVyaXQnLCAnaW5oZXJpdCddLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIENvZGVBcnRpZmFjdFJlcG8gb2JqZWN0LCBlaXRoZXIgZnJvbSB0aGUgbmFtZSBhcmd1bWVudCBvciB0aGUgbW9zdCByZWNlbnRseSBhY3RpdmF0ZWQgcmVwb3NpdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXBvRnJvbU5hbWUocmVwb05hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAocmVwb05hbWUpIHtcbiAgICAgIHJldHVybiBDb2RlQXJ0aWZhY3RSZXBvLmV4aXN0aW5nKHJlcG9OYW1lLCB0aGlzLnJlcG9PcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dpbkluZm8gPSBhd2FpdCB0aGlzLnVzYWdlRGlyLnJlYWRKc29uPExvZ2luSW5mb3JtYXRpb24+KExPR0lOX0RBVEFfS0VZKSA7XG5cbiAgICBpZiAobG9naW5JbmZvICYmIGxvZ2luSW5mby5leHBpcmF0aW9uVGltZU1zID4gRGF0ZS5ub3coKSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBDb2RlQXJ0aWZhY3RSZXBvLmV4aXN0aW5nKGxvZ2luSW5mby5yZXBvc2l0b3J5TmFtZSwgdGhpcy5yZXBvT3B0aW9ucyk7XG4gICAgICBleGlzdGluZy5zZXRMb2dpbkluZm9ybWF0aW9uKGxvZ2luSW5mbyk7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZXBvc2l0b3J5IG5hbWUgZ2l2ZW4sIGFuZCBubyByZXBvc2l0b3J5IGFjdGl2YXRlZCByZWNlbnRseS4gTG9naW4gdG8gYSByZXBvIG9yIHBhc3MgYSByZXBvIG5hbWUuJyk7XG4gIH1cbn1cbiJdfQ==