UNPKG

jsii-release

Version:

Release jsii modules to multiple package managers

143 lines 16.3 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 () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWFydGlmYWN0LWNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2RlYXJ0aWZhY3QvY29kZWFydGlmYWN0LWNsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2REFBK0M7QUFDL0MsMkNBQTZCO0FBQzdCLHdFQUF5RTtBQUN6RSwyQ0FBNkI7QUFDN0IsMkRBQWtHO0FBQ2xHLG1DQUFnQztBQUNoQywyQ0FBaUU7QUFDakUsdUNBQTREO0FBQzVELDJDQUFtRTtBQUNuRSx1Q0FBK0Q7QUFDL0QsMkNBQXVDO0FBRXZDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQztBQU0vQixNQUFhLGVBQWU7SUFHMUIsWUFBNkIsVUFBa0MsRUFBRTtRQUFwQyxZQUFPLEdBQVAsT0FBTyxDQUE2QjtRQUZqRCxhQUFRLEdBQUcsb0JBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUc5QyxDQUFDO0lBRUQsSUFBWSxXQUFXO1FBQ3JCLE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUEsK0NBQXdCLEVBQUM7Z0JBQ2pFLE1BQU0sRUFBRTtvQkFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhO29CQUNuQyxlQUFlLEVBQUUsSUFBSTtvQkFDckIsZUFBZSxFQUFFLFdBQVc7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sb0NBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE1BQU0s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cm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZyb21UZW1wb3JhcnlDcmVkZW50aWFscyB9IGZyb20gJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzJztcbmltcG9ydCAqIGFzIGdsb2IgZnJvbSAnZ2xvYic7XG5pbXBvcnQgeyBDb2RlQXJ0aWZhY3RSZXBvLCBDb2RlQXJ0aWZhY3RSZXBvT3B0aW9ucywgTG9naW5JbmZvcm1hdGlvbiB9IGZyb20gJy4vY29kZWFydGlmYWN0LXJlcG8nO1xuaW1wb3J0IHsgc2hlbGwgfSBmcm9tICcuL3NoZWxsJztcbmltcG9ydCB7IHVwbG9hZEphdmFQYWNrYWdlcywgbWF2ZW5Mb2dpbiB9IGZyb20gJy4vc3RhZ2luZy9tYXZlbic7XG5pbXBvcnQgeyB1cGxvYWROcG1QYWNrYWdlcywgbnBtTG9naW4gfSBmcm9tICcuL3N0YWdpbmcvbnBtJztcbmltcG9ydCB7IHVwbG9hZERvdG5ldFBhY2thZ2VzLCBudWdldExvZ2luIH0gZnJvbSAnLi9zdGFnaW5nL251Z2V0JztcbmltcG9ydCB7IHVwbG9hZFB5dGhvblBhY2thZ2VzLCBwaXBMb2dpbiB9IGZyb20gJy4vc3RhZ2luZy9waXAnO1xuaW1wb3J0IHsgVXNhZ2VEaXIgfSBmcm9tICcuL3VzYWdlLWRpcic7XG5cbmNvbnN0IExPR0lOX0RBVEFfS0VZID0gJ2xvZ2luJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQXJ0aWZhY3RDbGlPcHRpb25zIHtcbiAgcmVhZG9ubHkgYXNzdW1lUm9sZUFybj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENvZGVBcnRpZmFjdENsaSB7XG4gIHB1YmxpYyByZWFkb25seSB1c2FnZURpciA9IFVzYWdlRGlyLmRlZmF1bHQoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IENvZGVBcnRpZmFjdENsaU9wdGlvbnMgPSB7fSkge1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcmVwb09wdGlvbnMoKTogQ29kZUFydGlmYWN0UmVwb09wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVkZW50aWFsczogdGhpcy5vcHRpb25zLmFzc3VtZVJvbGVBcm4gPyBmcm9tVGVtcG9yYXJ5Q3JlZGVudGlhbHMoe1xuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBSb2xlQXJuOiB0aGlzLm9wdGlvbnMuYXNzdW1lUm9sZUFybixcbiAgICAgICAgICBEdXJhdGlvblNlY29uZHM6IDM2MDAsXG4gICAgICAgICAgUm9sZVNlc3Npb25OYW1lOiAncHVibGliLWNhJyxcbiAgICAgICAgfSxcbiAgICAgIH0pIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgcmFuZG9tIHJlcG9zaXRvcnksIHJldHVybiBpdHMgbmFtZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZSgpIHtcbiAgICBjb25zdCByZXBvID0gYXdhaXQgQ29kZUFydGlmYWN0UmVwby5jcmVhdGVSYW5kb20odGhpcy5yZXBvT3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlcG8ucmVwb3NpdG9yeU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHRoZSBnaXZlbiByZXBvXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVsZXRlKHJlcG9OYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVwbyA9IGF3YWl0IHRoaXMucmVwb0Zyb21OYW1lKHJlcG9OYW1lKTtcbiAgICBhd2FpdCByZXBvLmRlbGV0ZSgpO1xuXG4gICAgaWYgKCFyZXBvTmFtZSkge1xuICAgICAgYXdhaXQgdGhpcy51c2FnZURpci5kZWxldGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9nIGluIHRvIHRoZSBnaXZlbiByZXBvLCB3cml0ZSBhY3RpdmF0aW9uIGluc3RydWN0aW5zIHRvIHRoZSB1c2FnZSBkaXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dpbihyZXBvTmFtZT86IHN0cmluZykge1xuICAgIGNvbnN0IHJlcG8gPSBhd2FpdCB0aGlzLnJlcG9Gcm9tTmFtZShyZXBvTmFtZSk7XG4gICAgY29uc3QgbG9naW4gPSBhd2FpdCByZXBvLmxvZ2luKCk7XG5cbiAgICBhd2FpdCB0aGlzLnVzYWdlRGlyLnJlc2V0KCk7XG4gICAgYXdhaXQgdGhpcy51c2FnZURpci5wdXRKc29uKExPR0lOX0RBVEFfS0VZLCBsb2dpbik7XG5cbiAgICBhd2FpdCB0aGlzLnVzYWdlRGlyLmFkZFRvRW52KHtcbiAgICAgIENPREVBUlRJRkFDVF9SRVBPOiBsb2dpbi5yZXBvc2l0b3J5TmFtZSxcbiAgICB9KTtcblxuICAgIGF3YWl0IG5wbUxvZ2luKGxvZ2luLCB0aGlzLnVzYWdlRGlyKTtcbiAgICBhd2FpdCBwaXBMb2dpbihsb2dpbiwgdGhpcy51c2FnZURpcik7XG4gICAgYXdhaXQgbWF2ZW5Mb2dpbihsb2dpbiwgdGhpcy51c2FnZURpcik7XG4gICAgYXdhaXQgbnVnZXRMb2dpbihsb2dpbiwgdGhpcy51c2FnZURpcik7XG5cbiAgICByZXR1cm4gbG9naW47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHVibGlzaChkaXJlY3Rvcnk6IHN0cmluZywgcmVwb05hbWU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXBvID0gYXdhaXQgdGhpcy5yZXBvRnJvbU5hbWUocmVwb05hbWUpO1xuICAgIGNvbnN0IGxvZ2luID0gYXdhaXQgcmVwby5sb2dpbigpO1xuXG4gICAgYXdhaXQgdXBsb2FkTnBtUGFja2FnZXMoZ2xvYi5zeW5jKHBhdGguam9pbihkaXJlY3RvcnksICdqcycsICcqLnRneicpKSwgbG9naW4sIHRoaXMudXNhZ2VEaXIpO1xuXG4gICAgYXdhaXQgdXBsb2FkUHl0aG9uUGFja2FnZXMoZ2xvYi5zeW5jKHBhdGguam9pbihkaXJlY3RvcnksICdweXRob24nLCAnKicpKSwgbG9naW4pO1xuXG4gICAgYXdhaXQgdXBsb2FkSmF2YVBhY2thZ2VzKGdsb2Iuc3luYyhwYXRoLmpvaW4oZGlyZWN0b3J5LCAnamF2YScsICcqKicsICcqLnBvbScpKSwgbG9naW4sIHRoaXMudXNhZ2VEaXIpO1xuXG4gICAgYXdhaXQgdXBsb2FkRG90bmV0UGFja2FnZXMoZ2xvYi5zeW5jKHBhdGguam9pbihkaXJlY3RvcnksICdkb3RuZXQnLCAnKionLCAnKi5udXBrZycpKSwgdGhpcy51c2FnZURpcik7XG5cbiAgICBjb25zb2xlLmxvZygn8J+bjSBDb25maWd1cmluZyBwYWNrYWdlcyBmb3IgdXBzdHJlYW0gdmVyc2lvbnMnKTtcbiAgICBhd2FpdCByZXBvLm1hcmtBbGxVcHN0cmVhbUFsbG93KCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2MoKSB7XG4gICAgYXdhaXQgQ29kZUFydGlmYWN0UmVwby5nYyh0aGlzLnJlcG9PcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMudXNhZ2VEaXIuYWN0aXZhdGVJbkN1cnJlbnRQcm9jZXNzKCk7XG4gICAgYXdhaXQgc2hlbGwoY29tbWFuZCwge1xuICAgICAgc2hlbGw6IHRydWUsXG4gICAgICBzaG93OiAnYWx3YXlzJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBydW5JbnRlcmFjdGl2ZWx5KGNvbW1hbmQ6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMudXNhZ2VEaXIuYWN0aXZhdGVJbkN1cnJlbnRQcm9jZXNzKCk7XG4gICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjb21tYW5kLCB7XG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgc3RkaW86IFsnaW5oZXJpdCcsICdpbmhlcml0JywgJ2luaGVyaXQnXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBDb2RlQXJ0aWZhY3RSZXBvIG9iamVjdCwgZWl0aGVyIGZyb20gdGhlIG5hbWUgYXJndW1lbnQgb3IgdGhlIG1vc3QgcmVjZW50bHkgYWN0aXZhdGVkIHJlcG9zaXRvcnlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVwb0Zyb21OYW1lKHJlcG9OYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKHJlcG9OYW1lKSB7XG4gICAgICByZXR1cm4gQ29kZUFydGlmYWN0UmVwby5leGlzdGluZyhyZXBvTmFtZSwgdGhpcy5yZXBvT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9naW5JbmZvID0gYXdhaXQgdGhpcy51c2FnZURpci5yZWFkSnNvbjxMb2dpbkluZm9ybWF0aW9uPihMT0dJTl9EQVRBX0tFWSkgO1xuXG4gICAgaWYgKGxvZ2luSW5mbyAmJiBsb2dpbkluZm8uZXhwaXJhdGlvblRpbWVNcyA+IERhdGUubm93KCkpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gQ29kZUFydGlmYWN0UmVwby5leGlzdGluZyhsb2dpbkluZm8ucmVwb3NpdG9yeU5hbWUsIHRoaXMucmVwb09wdGlvbnMpO1xuICAgICAgZXhpc3Rpbmcuc2V0TG9naW5JbmZvcm1hdGlvbihsb2dpbkluZm8pO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVwb3NpdG9yeSBuYW1lIGdpdmVuLCBhbmQgbm8gcmVwb3NpdG9yeSBhY3RpdmF0ZWQgcmVjZW50bHkuIExvZ2luIHRvIGEgcmVwbyBvciBwYXNzIGEgcmVwbyBuYW1lLicpO1xuICB9XG59XG4iXX0=