diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..ff65059 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v16.13.0 diff --git a/readme.md b/readme.md index 22afc8a..a499ab4 100644 --- a/readme.md +++ b/readme.md @@ -1,25 +1,15 @@ -# pwcli CLI +# Photowall CLI -A CLI for pwcli. +A CLI for Photowall, a platform for doing any type of commands or automation +needed for the photowall organisation. -## Customizing your CLI +# Installation -Check out the documentation at https://github.com/infinitered/gluegun/tree/master/docs. +1. Clone the repo to a local folder. +2. Build the project with `yarn build` +3. Connect a runnable command with `yarn link` +4. Open a new terminal window and run `pwcli` -## Publishing to NPM - -To package your CLI up for NPM, do this: - -```shell -$ npm login -$ npm whoami -$ npm lint -$ npm test -(if typescript, run `npm run build` here) -$ npm publish -``` - -# License - -MIT - see LICENSE +# Usage +When running `pwcli` command in the terminal is will open a interactive view but all commands are accessable through shortcuts. So if you want to run status on development testservers its possible to run `pwcli d ts s` for d = development, ts = test servers, s = status. Shortcuts are listed in the interactive view. diff --git a/src/cli.ts b/src/cli.ts index 47aa5ef..dfef351 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,4 +1,4 @@ -const { build } = require('gluegun'); +const { build } = require('gluegun') /** * Create the cli and kick it off @@ -21,15 +21,15 @@ async function run(argv) { run: toolbox => toolbox.print.info('No help for you!') }) // provides default for help, h, --help, -h .version() // provides default for version, v, --version, -v - .create(); + .create() // enable the following method if you'd like to skip loading one of these core extensions // this can improve performance if they're not necessary for your project: // .exclude(['meta', 'strings', 'print', 'filesystem', 'semver', 'system', 'prompt', 'http', 'template', 'patching', 'package-manager']) // and run it - const toolbox = await cli.run(argv); + const toolbox = await cli.run(argv) // send it back (for testing, mostly) - return toolbox; + return toolbox } module.exports = { run } diff --git a/src/commands/deployment/testservers/create/create.ts b/src/commands/deployment/testservers/create/create.ts index c13ed99..41b600d 100644 --- a/src/commands/deployment/testservers/create/create.ts +++ b/src/commands/deployment/testservers/create/create.ts @@ -1,6 +1,6 @@ import { GluegunMenuToolbox } from '@lenne.tech/gluegun-menu' const chalk = require('chalk'); -const { AutoComplete, Input, Confirm } = require('enquirer'); +const { Input, Confirm } = require('enquirer'); import { Octokit } from "@octokit/core"; import { GluegunPrint } from 'gluegun'; const os = require("os"); @@ -38,7 +38,6 @@ const getDownloadFileFromRepoCommand = (token: string, org: string, repo: string } const getCreateStackCommand = (stackName: string, branch: string, templateFile: string, dockerImage: string, githubToken: string, composerAuth: string) => { - const stack = 'photowall'; const stackDomain = stackName.replace('photowall-', ''); const cmd = [ `aws cloudformation create-stack --stack-name ${stackName}`, @@ -110,9 +109,6 @@ const getConfirmation = async (branchName: string, stackName: string) => { } } -/** - * Subsection1 menu - */ module.exports = { name: 'create', alias: ['c'], @@ -222,22 +218,22 @@ module.exports = { await system.run(getDownloadFileFromRepoCommand(config.gh_token, 'Photowall', 'photowall', 'cloudformation/ecr-lifecycle-policy.json')); await system.run(getDownloadFileFromRepoCommand(config.gh_token, 'Photowall', 'photowall', 'cloudformation/ecs-service.yaml')); - const aws_account_id = strings.trim(await system.run(`aws sts get-caller-identity --query Account --output text`)); - const aws_region = strings.trim(await system.run(`aws configure get region`)); - const github_token = strings.trim(await system.run(`aws ssm get-parameter --with-decryption --name /github/CODE_PIPELINE_TOKEN --output text --query Parameter.Value`)); + const awsAccountId = strings.trim(await system.run(`aws sts get-caller-identity --query Account --output text`)); + const awsRegion = strings.trim(await system.run(`aws configure get region`)); + const githubToken = strings.trim(await system.run(`aws ssm get-parameter --with-decryption --name /github/CODE_PIPELINE_TOKEN --output text --query Parameter.Value`)); print.fancy(await system.run(`aws ecr create-repository --repository ${stackName}`)); - print.fancy(await system.run(`aws ecr get-login-password --region ${aws_region} | docker login --username AWS --password-stdin ${aws_account_id}.dkr.ecr.${aws_region}.amazonaws.com`)); + print.fancy(await system.run(`aws ecr get-login-password --region ${awsRegion} | docker login --username AWS --password-stdin ${awsAccountId}.dkr.ecr.${awsRegion}.amazonaws.com`)); print.fancy(await system.run(`docker pull nginx`)); - print.fancy(await system.run(`docker tag nginx ${aws_account_id}.dkr.ecr.${aws_region}.amazonaws.com/${stackName}:latest`)); - print.fancy(await system.run(`docker push ${aws_account_id}.dkr.ecr.${aws_region}.amazonaws.com/${stackName}:latest`)); + print.fancy(await system.run(`docker tag nginx ${awsAccountId}.dkr.ecr.${awsRegion}.amazonaws.com/${stackName}:latest`)); + print.fancy(await system.run(`docker push ${awsAccountId}.dkr.ecr.${awsRegion}.amazonaws.com/${stackName}:latest`)); - const dockerImage = `${aws_account_id}.dkr.ecr.${aws_region}.amazonaws.com/${stackName}`; + const dockerImage = `${awsAccountId}.dkr.ecr.${awsRegion}.amazonaws.com/${stackName}`; let composerAuthToken = await system.run(`aws ssm get-parameter --with-decryption --name /github/COMPOSER_TOKEN --output text --query Parameter.Value`); composerAuthToken = composerAuthToken.replace('\n', ''); - const composer_auth = `'{\"github-oauth\":{\"github.com\":\"${composerAuthToken}\"}}'`; + const composerAuth = `'{\"github-oauth\":{\"github.com\":\"${composerAuthToken}\"}}'`; - const createCommand = getCreateStackCommand(stackName, branchName, 'file://ecs-service.yaml', dockerImage, github_token, composer_auth); + const createCommand = getCreateStackCommand(stackName, branchName, 'file://ecs-service.yaml', dockerImage, githubToken, composerAuth); print.fancy(await system.run(createCommand, {cwd: '/tmp/', trim: true})); } } catch (e) { diff --git a/src/commands/deployment/testservers/delete/delete.ts b/src/commands/deployment/testservers/delete/delete.ts index c408bbe..29e28f9 100644 --- a/src/commands/deployment/testservers/delete/delete.ts +++ b/src/commands/deployment/testservers/delete/delete.ts @@ -48,9 +48,6 @@ const runCommand = async (system: GluegunSystem, cmd : string | null) => { return null; }; -/** - * Subsection1 menu - */ module.exports = { name: 'delete', alias: ['d'], diff --git a/src/commands/deployment/testservers/status/status.ts b/src/commands/deployment/testservers/status/status.ts index 30cdda1..c8b9735 100644 --- a/src/commands/deployment/testservers/status/status.ts +++ b/src/commands/deployment/testservers/status/status.ts @@ -9,9 +9,6 @@ type Stack = { updated: string, }; -/** - * Subsection1 menu - */ module.exports = { name: 'status', alias: ['s'], diff --git a/src/commands/deployment/testservers/update/update.ts b/src/commands/deployment/testservers/update/update.ts index 88b7544..c20cedd 100644 --- a/src/commands/deployment/testservers/update/update.ts +++ b/src/commands/deployment/testservers/update/update.ts @@ -107,9 +107,6 @@ const getConfirmation = async (branchName: string, stackName: string) => { } } -/** - * Subsection1 menu - */ module.exports = { name: 'update', alias: ['u'], diff --git a/src/commands/setup/settings/settings.ts b/src/commands/setup/settings/settings.ts index 2ca394e..1157429 100644 --- a/src/commands/setup/settings/settings.ts +++ b/src/commands/setup/settings/settings.ts @@ -97,7 +97,7 @@ module.exports = { // } // } - system.run('touch ~/.pwcli_settings'); + await system.run('touch ~/.pwcli_settings'); print.info(`Created configuration file ${chalk.yellow(`~/.pwcli_settings`)}`); const config = { gh_token: '', @@ -120,7 +120,7 @@ module.exports = { if (await (new Confirm({ message: `Ok to save the these settings to ${chalk.yellow(`~/.pwcli_settings`)}?` })).run()) { - system.run(`echo '${JSON.stringify(config)}' > ~/.pwcli_settings`); + await system.run(`echo '${JSON.stringify(config)}' > ~/.pwcli_settings`); } else { print.info('Ok then.'); if (toolbox.fromMenu()) await toolbox.menu.showMenu();