jsii-release
Version:
Release jsii modules to multiple package managers
133 lines • 15.9 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 (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==
;