appcenter-cli
Version:
Command line tool for Visual Studio App Center
60 lines (51 loc) • 2.35 kB
text/typescript
import { Command, CommandResult, help, success, failure, ErrorCodes, shortName, longName, hasArg, required } from "../../util/commandline";
import { out } from "../../util/interaction";
import { AppCenterClient, models, clientRequest } from "../../util/apis";
const debug = require("debug")("appcenter-cli:commands:orgs:create");
import { inspect } from "util";
import { getPortalOrgLink } from "../../util/portal/portal-helper";
import { getOrgUsers, pickAdmins } from "./lib/org-users-helper";
("Create a new organization")
export default class OrgCreateCommand extends Command {
("Display name of the organization")
("d")
("display-name")
displayName: string;
("Name of the organization")
("n")
("name")
name: string;
async run(client: AppCenterClient, portalBaseUrl: string): Promise<CommandResult> {
let organizationInfo: models.OrganizationResponse;
try {
const httpResponse = await out.progress("Creating new organization...", clientRequest<models.OrganizationResponse>((cb) => client.organizations.createOrUpdate({
displayName: this.displayName,
name: this.name
}, cb)));
if (httpResponse.response.statusCode < 400) {
organizationInfo = httpResponse.result;
} else {
throw httpResponse.response;
}
} catch (error) {
if (error.statusCode === 409) {
return failure(ErrorCodes.InvalidParameter, `organization ${this.name || this.displayName} already exists`);
} else {
debug(`Failed to create organization - ${inspect(error)}`);
return failure(ErrorCodes.Exception, "failed to create organization");
}
}
const admins: models.OrganizationUserResponse[] = pickAdmins(await getOrgUsers(client, organizationInfo.name, debug));
out.text(`Successfully created organization ${organizationInfo.name}`);
out.report([
["Name", "name"],
["Display name", "displayName"],
["URL", "url"],
["Admins", "admins", (adminsArray: models.OrganizationUserResponse[]) => adminsArray.map((admin) => admin.name).join(", ")]
], { name: organizationInfo.name, displayName: organizationInfo.displayName, url: getPortalOrgLink(portalBaseUrl, organizationInfo.name), admins});
return success();
}
}