@pradyumn-el/pollycli
Version:
pollycli lets users access the functionalities of Polly over a command line interface
278 lines (231 loc) • 9.24 kB
JavaScript
import { parseArgumentsIntoOptions, promptForMissingValues } from './init';
import { login, isAlreadyLoggedIn, logout, whoami }from './auth';
import { submitJob, displayJobStatus, cancelJob } from './job';
import { helpSection } from './help';
import { listPollyProjects, createProject } from './projects'
import { getJobLogs } from './logs';
import { syncFiles, listFiles, copyFile } from './files';
import { dockerLoginCommand, createADockerRepo, listAllDockerRepos, listAllDockerCommits, dockerLogoutCommand, updateDockerRepo, dockerBuild, dockerBuildStatus } from './docker';
import { appAdd, appUpdate, getAppsList, getLogList, sampleAppFile } from './apps';
import { generateNotebookTemplate, notebookDockerBuild, notebookTestScript, notebookDockerBuildStatus} from './notebooks';
import { buildStudioComponent, componentBuildStatus, generateStudioComponentTemplate } from './studio';
const os = require('os');
const path = require('path');
const pollymsg = require('./message');
import { Store } from 'data-store';
import { createEnvironment, removeEnvironment, updateEnvironment, sampleEnvFormat } from './jupyter-env';
import { deleteWorkflow, getWorkflow, getWorkflowLogs, submitWorkflow } from './workflows';
import { installExtraDependencies, awsIsPresent } from '../scripts/downloader';
/**
* This is the starting point of this CLI script
* @param {*} args
*/
export async function main(args) {
global.pollystore = new Store(
{ path: path.join(os.homedir(), '.config/pollycli/credentials.json') }
);
let options = await parseArgumentsIntoOptions(args);
await helpSection(options);
options = await promptForMissingValues(options);
if(options.type === 'files') {
try {
if(!awsIsPresent()) {
/*
* Install aws-cli. This is a one time setup. On a successful install, this
* step won't be performed. The installation should happen as silently as
* possible
*/
const update = false
await installExtraDependencies(update);
}
} catch (err) {}
}
// When the user login login the user and exit
if (options.type == 'user-management' && options.action == 'login') {
const islogged = await login(options.creds.username, options.creds.password);
if (islogged) {
pollymsg.pollyMessage("Use the command polly --help to learn how to use the CLI");
process.exit(0);
}
}
if (options.type == 'user-management' && options.action == 'logout') {
const isout= await logout();
if (isout) {
pollymsg.pollyMessage("Adios, see you soon!");
process.exit(0);
}
}
if (options.type == 'user-management' && options.action == 'whoami') {
await whoami();
}
// If the user is not logging in but is trying to use other cli facilities
// check if the user is logged in if not logged in refresh with refresh token
if (!await isAlreadyLoggedIn()) {
process.exit(1);
}
if (options.type == 'workspaces' && options.action == 'list') {
let type = null;
let value = null;
if(options.latest) {
type = 'latest'
value = options.latest;
} else if(options.oldest) {
type = 'oldest'
value = options.oldest;
} else if (options.all){
type = 'all'
value = true;
} else {
pollymsg.pollyError("Unknown option for workspaces");
}
await listPollyProjects(type, value);
process.exit(0);
}
if (options.type == 'workspaces' && options.action == 'create') {
await createProject(options.workspace_name, options.workspace_description);
process.exit(0);
}
// Now the busness logic goes from here
if (options.type == 'jobs' && options.action == 'submit') {
await submitJob(options.workspace_id, options.job_file);
process.exit(0);
}
if (options.type == 'jobs' && options.action == 'status' && options.workspace_id) {
await displayJobStatus(options.workspace_id, options.job_id);
process.exit(0);
}
if (options.type == 'jobs' && options.action == 'logs' && options.workspace_id && options.workspace_id) {
await getJobLogs(options.workspace_id, options.job_id, 'all', options.attempt_num);
process.exit(0);
}
if (options.type == 'jobs' && options.action == 'cancel' && options.workspace_id && options.workspace_id) {
await cancelJob(options.workspace_id, options.job_id);
process.exit(0);
}
if (options.type == 'files' && options.action == 'sync') {
if(global.verbose) {
options.verbose = true
}
await syncFiles(options.workspace_id, options.source_path,
options.destination_path, options.verbose, {"is_report": options.is_report});
}
if (options.type == 'files' && options.action == 'list') {
await listFiles(options.workspace_id, options.workspace_path);
}
if (options.type == 'files' && options.action == 'copy') {
await copyFile(options.workspace_id.toString(), options.source_path,
options.destination_path, {"is_report": options.is_report});
}
if (options.type == 'dockers' && options.action == 'login') {
await dockerLoginCommand();
process.exit(0);
}
if (options.type == 'dockers' && options.action == 'logout') {
await dockerLogoutCommand();
process.exit(0);
}
if (options.type == 'dockers' && options.action == 'create' && options.name && options.description) {
await createADockerRepo(options.name, options.description, options.public);
process.exit(0);
}
if (options.type == 'dockers' && options.action == 'update' && options.name) {
await updateDockerRepo(options.name, options.public);
process.exit(0);
}
if (options.type == 'dockers' && options.action == 'list') {
await listAllDockerRepos(options.own, options.public, options.all);
process.exit(0);
}
if (options.type == 'dockers' && options.action == 'commit-list' && options.name) {
await listAllDockerCommits(options.name);
process.exit(0);
}
if (options.type == 'dockers' && options.action == 'build' && options.name && options.path) {
await dockerBuild(options.name, options.path);
process.exit(0);
}
if (options.type == 'dockers' && options.action == 'build-status') {
await dockerBuildStatus(options.id);
process.exit(0);
}
if (options.type == 'notebooks' && options.action == 'build') {
await notebookDockerBuild(".");
process.exit(0);
}
if (options.type == 'notebooks' && options.action == 'build-status' && options.id) {
await notebookDockerBuildStatus(options.id);
process.exit(0);
}
if (options.type == 'notebooks' && options.action == 'new-environment' && options.name && options.env_type) {
await generateNotebookTemplate(options.env_type, options.name);
process.exit(0);
}
if (options.type == 'notebooks' && options.action == 'test') {
await notebookTestScript();
process.exit(0);
}
if (options.type == 'apps' && options.action == 'logs' && options.run_id) {
await getLogList(options.run_id, options.log_id);
process.exit(0);
}
if (options.type == 'apps' && options.action == 'list') {
await getAppsList(options.run_id, options.log_id);
process.exit(0);
}
if (options.type == 'apps' && options.action == 'update') {
await appUpdate(options.name, options.app_file, options.app_info);
process.exit(0);
}
if (options.type == 'apps' && options.action == 'create') {
await appAdd(options.app_file, options.app_info);
process.exit(0);
}
if (options.type == 'apps' && options.action == 'sample') {
sampleAppFile();
process.exit(0);
}
// if (options.type == 'studio' && options.action == 'build-component') {
// await buildStudioComponent(".");
// process.exit(0);
// }
// if (options.type == 'studio' && options.action == 'component-build-status' && options.id) {
// await componentBuildStatus(options.id);
// process.exit(0);
// }
// if (options.type == 'studio' && options.action == 'new-component' && options.item_type) {
// await generateStudioComponentTemplate(options.item_type, options.name);
// process.exit(0);
// }
if (options.type == 'environment' && options.action == 'create') {
await createEnvironment(options.env_file, options.env_info);
process.exit(0);
}
if (options.type == 'environment' && options.action == 'update') {
await updateEnvironment(options.env_name, options.env_info);
process.exit(0);
}
if (options.type == 'environment' && options.action == 'remove') {
await removeEnvironment(options.env_name);
process.exit(0);
}
if (options.type == 'environment' && options.action == 'sample') {
sampleEnvFormat();
process.exit(0);
}
if (options.type == 'workflows' && options.action == 'submit') {
await submitWorkflow(options.workspace_id, options.config);
process.exit(0);
}
if (options.type == 'workflows' && options.action == 'cancel') {
await deleteWorkflow(options.run_id);
process.exit(0);
}
if (options.type == 'workflows' && options.action == 'status') {
await getWorkflow(options.run_id);
process.exit(0);
}
if (options.type == 'workflows' && options.action == 'logs') {
await getWorkflowLogs(options.run_id);
process.exit(0);
}
}