Skip to content

Commit f1bc8d2

Browse files
committed
feat: add secret command
Signed-off-by: zxypro1 <1018995004@qq.com>
1 parent bf60b54 commit f1bc8d2

File tree

8 files changed

+342
-141
lines changed

8 files changed

+342
-141
lines changed

package-lock.json

Lines changed: 201 additions & 137 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,13 @@
6666
"devDependencies": {
6767
"@serverless-devs/core": "^0.1.67-beta.1",
6868
"@serverless-devs/credential": "^0.0.9-beta.1",
69-
"@serverless-devs/engine": "^0.1.4-beta.8",
70-
"@serverless-devs/load-application": "^0.0.14-beta.5",
69+
"@serverless-devs/engine": "^0.1.4-beta.10",
70+
"@serverless-devs/load-application": "^0.0.14-beta.6",
7171
"@serverless-devs/load-component": "^0.0.8-beta.1",
7272
"@serverless-devs/logger": "^0.0.5",
73-
"@serverless-devs/parse-spec": "^0.0.28-beta.7",
73+
"@serverless-devs/parse-spec": "^0.0.28-beta.9",
7474
"@serverless-devs/registry": "^0.0.10",
75+
"@serverless-devs/secret": "^0.0.2-beta.4",
7576
"@serverless-devs/utils": "^0.0.16-beta.1",
7677
"@types/fs-extra": "^11.0.4",
7778
"@types/inquirer": "^9.0.7",

src/command/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ const commandDict = {
1515
preview: 'preview/index.ts',
1616
component: 'component/index.ts',
1717
verify: 'verify/index.ts',
18-
cli: 'cli/index.ts'
18+
cli: 'cli/index.ts',
19+
secret: 'secret/index.ts',
1920
};
2021

2122
const root = async (program: Command) => {

src/command/secret/command/add.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { Command } from 'commander';
2+
import chalk from 'chalk';
3+
import { emoji } from '@/utils';
4+
import { getSecretManager } from '../utils';
5+
import logger from '@/logger';
6+
7+
const description = `Add a secret or overwrite a secret.
8+
9+
Example:
10+
$ s secret add --key demo --value demo
11+
$ s secret add --key demo --value demo -f
12+
13+
${emoji('📖')} Document: Temporarily unavailable`;
14+
15+
export default (program: Command) => {
16+
const command = program.command('add');
17+
18+
command
19+
.usage('[options]')
20+
.description(description)
21+
.summary(`Add a secret`)
22+
.requiredOption('--key <key>', 'Secret key')
23+
.requiredOption('--value <value>', 'Secret value')
24+
.option('-f, --force', 'Mandatory overwrite key information')
25+
.helpOption('-h, --help', 'Display help for command')
26+
.action(async options => {
27+
const secretManager = getSecretManager();
28+
const value = secretManager.getSecret(options.key);
29+
if (value && !options.force) {
30+
logger.warn(`The secret ${options.key} already exists, please use --force to overwrite`);
31+
return;
32+
}
33+
secretManager.addSecret(options.key, options.value);
34+
logger.write(chalk.green(`Secret [${options.key}] has been successfully added.`));
35+
});
36+
};

src/command/secret/command/get.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { Command } from 'commander';
2+
import chalk from 'chalk';
3+
import { emoji } from '@/utils';
4+
import { getSecretManager } from '../utils';
5+
import { handleSecret } from '@/command/config/utils';
6+
import logger from '@/logger';
7+
import { isEmpty } from 'lodash';
8+
import jsYaml from 'js-yaml';
9+
10+
const description = `Preview Secrets.
11+
12+
Example:
13+
$ s secret get
14+
$ s secret get --key demo
15+
16+
${emoji('📖')} Document: Temporarily unavailable`;
17+
18+
export default (program: Command) => {
19+
const command = program.command('get');
20+
21+
command
22+
.usage('[options]')
23+
.description(description)
24+
.summary(`Preview secrets`)
25+
.option('--key <key>', 'Secret key')
26+
.helpOption('-h, --help', 'Display help for command')
27+
.action(async options => {
28+
const { key } = options;
29+
const secretManager = getSecretManager();
30+
const secrets = handleSecret(secretManager.getAllSecrets());
31+
if (isEmpty(key)) {
32+
logger.write(jsYaml.dump(secrets));
33+
} else {
34+
if (!secrets[key]) {
35+
logger.error(`Secret [${key}] does not exist.`);
36+
return;
37+
}
38+
logger.write(jsYaml.dump(secrets[key]));
39+
}
40+
});
41+
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { Command } from 'commander';
2+
import chalk from 'chalk';
3+
import { emoji } from '@/utils';
4+
import logger from '@/logger';
5+
import { getSecretManager } from '../utils';
6+
7+
const description = `Delete a secret.
8+
9+
Example:
10+
$ s secret delete --key demo
11+
12+
${emoji('📖')} Document: Temporarily unavailable`;
13+
14+
export default (program: Command) => {
15+
const command = program.command('delete');
16+
17+
command
18+
.usage('[options]')
19+
.description(description)
20+
.summary(`Delete a secret`)
21+
.requiredOption('--key <key>', 'Secret key')
22+
.helpOption('-h, --help', 'Display help for command')
23+
.action(async options => {
24+
const { key } = options;
25+
const secretManager = getSecretManager();
26+
try {
27+
secretManager.deleteSecret(key);
28+
logger.write(chalk.green(`Secret [${key}] has been successfully deleted.`));
29+
} catch (error) {
30+
logger.error(error);
31+
}
32+
});
33+
};

src/command/secret/index.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { Command } from 'commander';
2+
import { emoji, mount, suggestCommand } from '@/utils';
3+
import chalk from 'chalk';
4+
5+
const description = `Secret Manager is used to manage the secret of cloud vendors.
6+
7+
${emoji('📖')} Document: Temporarily unavailable`;
8+
9+
export default (program: Command) => {
10+
const configProgram = program.command('secret');
11+
suggestCommand(configProgram);
12+
configProgram
13+
.description(description)
14+
.summary(`Manage the secret of cloud vendors`)
15+
.usage('[commands] [options]')
16+
.addHelpCommand(false)
17+
.helpOption('-h, --help', 'Display help for command');
18+
19+
mount('secret/command/add.ts', configProgram);
20+
mount('secret/command/get.ts', configProgram);
21+
mount('secret/command/remove.ts', configProgram);
22+
};

src/command/secret/utils/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import SecretManager from '@serverless-devs/secret';
2+
3+
export const getSecretManager = () => SecretManager.getInstance();

0 commit comments

Comments
 (0)