jsii-release
Version:
Release jsii modules to multiple package managers
143 lines • 16.3 kB
JavaScript
;
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=