envx-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +550 -0
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +281 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/decrypt.d.ts +3 -0
- package/dist/commands/decrypt.d.ts.map +1 -0
- package/dist/commands/decrypt.js +206 -0
- package/dist/commands/decrypt.js.map +1 -0
- package/dist/commands/encrypt.d.ts +3 -0
- package/dist/commands/encrypt.d.ts.map +1 -0
- package/dist/commands/encrypt.js +194 -0
- package/dist/commands/encrypt.js.map +1 -0
- package/dist/commands/interactive.d.ts +4 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +218 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +299 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/index.d.ts +167 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +76 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/types/index.d.ts +64 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/exec.d.ts +32 -0
- package/dist/utils/exec.d.ts.map +1 -0
- package/dist/utils/exec.js +208 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/file.d.ts +22 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +200 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/interactive.d.ts +18 -0
- package/dist/utils/interactive.d.ts.map +1 -0
- package/dist/utils/interactive.js +365 -0
- package/dist/utils/interactive.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createEncryptCommand = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const commander_1 = require("commander");
|
|
9
|
+
const schemas_1 = require("../schemas");
|
|
10
|
+
const exec_1 = require("../utils/exec");
|
|
11
|
+
const file_1 = require("../utils/file");
|
|
12
|
+
const interactive_1 = require("../utils/interactive");
|
|
13
|
+
const createEncryptCommand = () => {
|
|
14
|
+
const command = new commander_1.Command('encrypt');
|
|
15
|
+
command
|
|
16
|
+
.description('Encrypt environment files')
|
|
17
|
+
.option('-e, --environment <env>', 'Environment name (e.g., development, staging, production)')
|
|
18
|
+
.option('-p, --passphrase <passphrase>', 'Passphrase for encryption')
|
|
19
|
+
.option('-s, --secret <secret>', 'Secret key from environment variable')
|
|
20
|
+
.option('-c, --cwd <path>', 'Working directory path')
|
|
21
|
+
.option('-i, --interactive', 'Interactive mode for selecting files')
|
|
22
|
+
.action(async (options) => {
|
|
23
|
+
try {
|
|
24
|
+
await executeEncrypt(options);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
exec_1.CliUtils.error(`Encryption failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return command;
|
|
32
|
+
};
|
|
33
|
+
exports.createEncryptCommand = createEncryptCommand;
|
|
34
|
+
async function executeEncrypt(rawOptions) {
|
|
35
|
+
exec_1.CliUtils.header('Environment File Encryption');
|
|
36
|
+
const cwd = rawOptions.cwd || exec_1.ExecUtils.getCurrentDir();
|
|
37
|
+
if (!exec_1.ExecUtils.isGpgAvailable()) {
|
|
38
|
+
exec_1.CliUtils.error('GPG is not available. Please install GPG to use encryption features.');
|
|
39
|
+
interactive_1.InteractiveUtils.displayPrerequisites();
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
const availableEnvironments = await file_1.FileUtils.findAllEnvironments(cwd);
|
|
43
|
+
if (availableEnvironments.length === 0) {
|
|
44
|
+
exec_1.CliUtils.warning('No environment files found in the current directory.');
|
|
45
|
+
exec_1.CliUtils.info('Use the "create" command to create environment files first.');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
let environment = rawOptions.environment;
|
|
49
|
+
let passphrase = rawOptions.passphrase;
|
|
50
|
+
if (!environment) {
|
|
51
|
+
if (availableEnvironments.length === 1) {
|
|
52
|
+
environment = availableEnvironments[0];
|
|
53
|
+
exec_1.CliUtils.info(`Using environment: ${exec_1.CliUtils.formatEnvironment(environment)}`);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
environment = await interactive_1.InteractiveUtils.selectEnvironment(availableEnvironments, 'Select environment to encrypt:');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (!availableEnvironments.includes(environment)) {
|
|
60
|
+
throw new Error(`Environment '${environment}' not found. Available: ${availableEnvironments.join(', ')}`);
|
|
61
|
+
}
|
|
62
|
+
if (!passphrase) {
|
|
63
|
+
const envrcConfig = await file_1.FileUtils.readEnvrc(cwd);
|
|
64
|
+
const secretVar = file_1.FileUtils.generateSecretVariableName(environment);
|
|
65
|
+
if (rawOptions.secret && envrcConfig[rawOptions.secret]) {
|
|
66
|
+
passphrase = envrcConfig[rawOptions.secret];
|
|
67
|
+
exec_1.CliUtils.info(`Using secret from .envrc: ${chalk_1.default.cyan(rawOptions.secret)}`);
|
|
68
|
+
}
|
|
69
|
+
else if (envrcConfig[secretVar]) {
|
|
70
|
+
passphrase = envrcConfig[secretVar];
|
|
71
|
+
exec_1.CliUtils.info(`Using secret from .envrc: ${chalk_1.default.cyan(secretVar)}`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
passphrase = await interactive_1.InteractiveUtils.promptPassphrase('Enter encryption passphrase:');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const options = (0, schemas_1.validateEncryptOptions)({
|
|
78
|
+
environment,
|
|
79
|
+
passphrase,
|
|
80
|
+
cwd,
|
|
81
|
+
secret: rawOptions.secret
|
|
82
|
+
});
|
|
83
|
+
exec_1.CliUtils.info('Testing GPG operation...');
|
|
84
|
+
const gpgTest = exec_1.ExecUtils.testGpgOperation(passphrase);
|
|
85
|
+
if (!gpgTest.success) {
|
|
86
|
+
throw new Error(`GPG test failed: ${gpgTest.message}`);
|
|
87
|
+
}
|
|
88
|
+
exec_1.CliUtils.success('GPG test passed');
|
|
89
|
+
const envFiles = await file_1.FileUtils.findEnvFiles(environment, cwd);
|
|
90
|
+
const unencryptedFiles = envFiles.filter(file => !file.encrypted && file.exists);
|
|
91
|
+
if (unencryptedFiles.length === 0) {
|
|
92
|
+
exec_1.CliUtils.warning(`No unencrypted .env.${environment} files found to encrypt.`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
exec_1.CliUtils.info(`Found ${unencryptedFiles.length} file(s) to encrypt:`);
|
|
96
|
+
unencryptedFiles.forEach(file => {
|
|
97
|
+
console.log(` • ${exec_1.CliUtils.formatPath(file.path, cwd)}`);
|
|
98
|
+
});
|
|
99
|
+
let filesToProcess = unencryptedFiles;
|
|
100
|
+
if (rawOptions.interactive && unencryptedFiles.length > 1) {
|
|
101
|
+
const selectedPaths = await interactive_1.InteractiveUtils.selectFiles(unencryptedFiles.map(f => file_1.FileUtils.getRelativePath(f.path, cwd)), 'Select files to encrypt:');
|
|
102
|
+
filesToProcess = unencryptedFiles.filter(file => selectedPaths.includes(file_1.FileUtils.getRelativePath(file.path, cwd)));
|
|
103
|
+
}
|
|
104
|
+
if (filesToProcess.length === 0) {
|
|
105
|
+
exec_1.CliUtils.info('No files selected for encryption.');
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!rawOptions.interactive) {
|
|
109
|
+
const confirm = await interactive_1.InteractiveUtils.confirmOperation(`Encrypt ${filesToProcess.length} file(s) for ${exec_1.CliUtils.formatEnvironment(environment)}?`);
|
|
110
|
+
if (!confirm) {
|
|
111
|
+
exec_1.CliUtils.info('Operation cancelled.');
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exec_1.CliUtils.subheader('Encrypting Files');
|
|
116
|
+
let successCount = 0;
|
|
117
|
+
let errorCount = 0;
|
|
118
|
+
for (const envFile of filesToProcess) {
|
|
119
|
+
const relativePath = file_1.FileUtils.getRelativePath(envFile.path, cwd);
|
|
120
|
+
console.log();
|
|
121
|
+
exec_1.CliUtils.info(`Processing: ${chalk_1.default.cyan(relativePath)}`);
|
|
122
|
+
try {
|
|
123
|
+
const encryptedPath = file_1.FileUtils.getEncryptedPath(envFile.path);
|
|
124
|
+
const encryptedExists = await file_1.FileUtils.fileExists(encryptedPath);
|
|
125
|
+
if (encryptedExists) {
|
|
126
|
+
const tempDecryptedPath = `${envFile.path}.temp.${Date.now()}`;
|
|
127
|
+
try {
|
|
128
|
+
const decryptResult = exec_1.ExecUtils.decryptFile(encryptedPath, tempDecryptedPath, passphrase);
|
|
129
|
+
if (decryptResult.success) {
|
|
130
|
+
const filesIdentical = await file_1.FileUtils.filesAreIdentical(envFile.path, tempDecryptedPath);
|
|
131
|
+
if (await file_1.FileUtils.fileExists(tempDecryptedPath)) {
|
|
132
|
+
exec_1.ExecUtils.removeFile(tempDecryptedPath);
|
|
133
|
+
}
|
|
134
|
+
if (filesIdentical) {
|
|
135
|
+
exec_1.CliUtils.success('File already encrypted with same content - skipping');
|
|
136
|
+
successCount++;
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
exec_1.CliUtils.warning('File has changes - updating encrypted version');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
exec_1.CliUtils.warning('Could not decrypt existing file - creating new encrypted version');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (await file_1.FileUtils.fileExists(tempDecryptedPath)) {
|
|
149
|
+
exec_1.ExecUtils.removeFile(tempDecryptedPath);
|
|
150
|
+
}
|
|
151
|
+
exec_1.CliUtils.warning('Error comparing with existing encrypted file - proceeding with encryption');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const encryptResult = exec_1.ExecUtils.encryptFile(envFile.path, passphrase);
|
|
155
|
+
if (encryptResult.success) {
|
|
156
|
+
exec_1.CliUtils.success(`Encrypted: ${chalk_1.default.cyan(relativePath)}`);
|
|
157
|
+
exec_1.CliUtils.info(`Created: ${chalk_1.default.cyan(relativePath + '.gpg')}`);
|
|
158
|
+
successCount++;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
exec_1.CliUtils.error(`Failed to encrypt: ${encryptResult.message}`);
|
|
162
|
+
if (encryptResult.errors) {
|
|
163
|
+
encryptResult.errors.forEach(error => {
|
|
164
|
+
console.log(chalk_1.default.red(` • ${error}`));
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
errorCount++;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
exec_1.CliUtils.error(`Error processing ${relativePath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
172
|
+
errorCount++;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
console.log();
|
|
176
|
+
exec_1.CliUtils.subheader('Encryption Summary');
|
|
177
|
+
if (successCount > 0) {
|
|
178
|
+
exec_1.CliUtils.success(`Successfully encrypted ${successCount} file(s)`);
|
|
179
|
+
}
|
|
180
|
+
if (errorCount > 0) {
|
|
181
|
+
exec_1.CliUtils.error(`Failed to encrypt ${errorCount} file(s)`);
|
|
182
|
+
}
|
|
183
|
+
if (successCount > 0) {
|
|
184
|
+
console.log();
|
|
185
|
+
exec_1.CliUtils.info('Next steps:');
|
|
186
|
+
console.log(chalk_1.default.gray('• Add *.gpg files to your version control'));
|
|
187
|
+
console.log(chalk_1.default.gray('• Consider adding .env.* files to .gitignore'));
|
|
188
|
+
console.log(chalk_1.default.gray('• Use "envx decrypt" to decrypt files when needed'));
|
|
189
|
+
}
|
|
190
|
+
if (errorCount > 0) {
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=encrypt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../../src/commands/encrypt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/commands/interactive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,wBAAwB,QAAO,OAkB3C,CAAC;AAiNF,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B/D"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createInteractiveCommand = void 0;
|
|
7
|
+
exports.showQuickStart = showQuickStart;
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const commander_1 = require("commander");
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const schemas_1 = require("../schemas");
|
|
12
|
+
const exec_1 = require("../utils/exec");
|
|
13
|
+
const file_1 = require("../utils/file");
|
|
14
|
+
const interactive_1 = require("../utils/interactive");
|
|
15
|
+
const createInteractiveCommand = () => {
|
|
16
|
+
const command = new commander_1.Command('interactive');
|
|
17
|
+
command
|
|
18
|
+
.description('Interactive mode for setting up .envrc file with secrets')
|
|
19
|
+
.option('-c, --cwd <path>', 'Working directory path')
|
|
20
|
+
.option('--overwrite', 'Overwrite existing .envrc file without confirmation')
|
|
21
|
+
.option('--generate', 'Generate random secrets for all environments')
|
|
22
|
+
.action(async (options) => {
|
|
23
|
+
try {
|
|
24
|
+
await executeInteractive(options);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
exec_1.CliUtils.error(`Interactive setup failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return command;
|
|
32
|
+
};
|
|
33
|
+
exports.createInteractiveCommand = createInteractiveCommand;
|
|
34
|
+
async function executeInteractive(rawOptions) {
|
|
35
|
+
interactive_1.InteractiveUtils.displayWelcome();
|
|
36
|
+
const cwd = rawOptions.cwd || exec_1.ExecUtils.getCurrentDir();
|
|
37
|
+
const options = (0, schemas_1.validateInteractiveOptions)({
|
|
38
|
+
overwrite: rawOptions.overwrite,
|
|
39
|
+
cwd
|
|
40
|
+
});
|
|
41
|
+
const existingEnvironments = await file_1.FileUtils.findAllEnvironments(cwd);
|
|
42
|
+
const envrcPath = path_1.default.join(cwd, '.envrc');
|
|
43
|
+
const envrcExists = await file_1.FileUtils.fileExists(envrcPath);
|
|
44
|
+
if (envrcExists) {
|
|
45
|
+
exec_1.CliUtils.info(`Found existing .envrc file: ${exec_1.CliUtils.formatPath(envrcPath, cwd)}`);
|
|
46
|
+
if (!rawOptions.overwrite) {
|
|
47
|
+
const showCurrent = await interactive_1.InteractiveUtils.confirmOperation('Do you want to see the current .envrc contents?', true);
|
|
48
|
+
if (showCurrent) {
|
|
49
|
+
try {
|
|
50
|
+
const currentConfig = await file_1.FileUtils.readEnvrc(cwd);
|
|
51
|
+
const secrets = Object.keys(currentConfig).filter(key => key.endsWith('_SECRET'));
|
|
52
|
+
if (secrets.length > 0) {
|
|
53
|
+
console.log();
|
|
54
|
+
exec_1.CliUtils.subheader('Current Secrets in .envrc');
|
|
55
|
+
secrets.forEach(secret => {
|
|
56
|
+
const stage = secret.replace('_SECRET', '').toLowerCase();
|
|
57
|
+
console.log(` • ${exec_1.CliUtils.formatEnvironment(stage)}: ${chalk_1.default.cyan(secret)}`);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
exec_1.CliUtils.warning('No secrets found in current .envrc file');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
exec_1.CliUtils.error(`Could not read existing .envrc: ${error}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const overwrite = await interactive_1.InteractiveUtils.confirmOperation('Do you want to overwrite the existing .envrc file?', false);
|
|
69
|
+
if (!overwrite) {
|
|
70
|
+
exec_1.CliUtils.info('Keeping existing .envrc file. Use --overwrite flag to force overwrite.');
|
|
71
|
+
await showEnvrcUsageHelp(cwd);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const envrcConfig = await interactive_1.InteractiveUtils.setupEnvrc(cwd, existingEnvironments);
|
|
78
|
+
const writeResult = await file_1.FileUtils.writeEnvrc(cwd, envrcConfig);
|
|
79
|
+
if (writeResult.success) {
|
|
80
|
+
exec_1.CliUtils.success(`Successfully created .envrc file`);
|
|
81
|
+
console.log(`Location: ${exec_1.CliUtils.formatPath(writeResult.filePath, cwd)}`);
|
|
82
|
+
await showEnvrcUsageHelp(cwd);
|
|
83
|
+
await showDirenvSetup();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
exec_1.CliUtils.error(`Failed to create .envrc file: ${writeResult.message}`);
|
|
87
|
+
if (writeResult.error) {
|
|
88
|
+
console.log(chalk_1.default.red(` • ${writeResult.error.message}`));
|
|
89
|
+
}
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
if (error instanceof Error && error.message === 'Setup cancelled by user') {
|
|
95
|
+
exec_1.CliUtils.info('Setup cancelled.');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async function showEnvrcUsageHelp(cwd) {
|
|
102
|
+
console.log();
|
|
103
|
+
exec_1.CliUtils.subheader('How to Use .envrc');
|
|
104
|
+
const envrcConfig = await file_1.FileUtils.readEnvrc(cwd);
|
|
105
|
+
const secrets = Object.keys(envrcConfig).filter(key => key.endsWith('_SECRET'));
|
|
106
|
+
console.log('Your .envrc file contains secrets for encryption/decryption.');
|
|
107
|
+
console.log('You can now use envx commands without specifying passphrases:');
|
|
108
|
+
console.log();
|
|
109
|
+
secrets.forEach(secret => {
|
|
110
|
+
const stage = secret.replace('_SECRET', '').toLowerCase();
|
|
111
|
+
console.log(chalk_1.default.cyan(` envx encrypt -e ${stage}`));
|
|
112
|
+
console.log(chalk_1.default.cyan(` envx decrypt -e ${stage}`));
|
|
113
|
+
});
|
|
114
|
+
console.log();
|
|
115
|
+
console.log('Or specify a custom secret:');
|
|
116
|
+
console.log(chalk_1.default.cyan(' envx encrypt -e production -s PRODUCTION_SECRET'));
|
|
117
|
+
console.log();
|
|
118
|
+
}
|
|
119
|
+
async function showDirenvSetup() {
|
|
120
|
+
exec_1.CliUtils.subheader('Direnv Integration (Optional)');
|
|
121
|
+
console.log('For automatic environment loading, you can use direnv:');
|
|
122
|
+
console.log();
|
|
123
|
+
try {
|
|
124
|
+
exec_1.ExecUtils.exec('direnv --version', { silent: true });
|
|
125
|
+
exec_1.CliUtils.success('Direnv is already installed!');
|
|
126
|
+
console.log();
|
|
127
|
+
console.log('To enable automatic loading:');
|
|
128
|
+
console.log(chalk_1.default.cyan(' direnv allow'));
|
|
129
|
+
console.log();
|
|
130
|
+
console.log('This will automatically export the secrets when you enter this directory.');
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
exec_1.CliUtils.info('Direnv is not installed. To install:');
|
|
134
|
+
console.log();
|
|
135
|
+
console.log(chalk_1.default.yellow('macOS:'));
|
|
136
|
+
console.log(chalk_1.default.cyan(' brew install direnv'));
|
|
137
|
+
console.log();
|
|
138
|
+
console.log(chalk_1.default.yellow('Ubuntu/Debian:'));
|
|
139
|
+
console.log(chalk_1.default.cyan(' sudo apt install direnv'));
|
|
140
|
+
console.log();
|
|
141
|
+
console.log(chalk_1.default.yellow('Other systems:'));
|
|
142
|
+
console.log(chalk_1.default.cyan(' https://direnv.net/docs/installation.html'));
|
|
143
|
+
console.log();
|
|
144
|
+
console.log('After installation, add to your shell profile:');
|
|
145
|
+
console.log(chalk_1.default.cyan(' eval "$(direnv hook bash)" # for bash'));
|
|
146
|
+
console.log(chalk_1.default.cyan(' eval "$(direnv hook zsh)" # for zsh'));
|
|
147
|
+
console.log();
|
|
148
|
+
console.log('Then run:');
|
|
149
|
+
console.log(chalk_1.default.cyan(' direnv allow'));
|
|
150
|
+
}
|
|
151
|
+
console.log();
|
|
152
|
+
exec_1.CliUtils.warning('Security Note:');
|
|
153
|
+
console.log(chalk_1.default.yellow('• Never commit .envrc to version control'));
|
|
154
|
+
console.log(chalk_1.default.yellow('• Add .envrc to your .gitignore file'));
|
|
155
|
+
console.log(chalk_1.default.yellow('• The secrets in .envrc are sensitive data'));
|
|
156
|
+
}
|
|
157
|
+
async function showEnvironmentSummary(cwd) {
|
|
158
|
+
const environments = await file_1.FileUtils.findAllEnvironments(cwd);
|
|
159
|
+
if (environments.length === 0) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
exec_1.CliUtils.subheader('Environment Files Summary');
|
|
163
|
+
const tableRows = [];
|
|
164
|
+
for (const env of environments.sort()) {
|
|
165
|
+
const envFiles = await file_1.FileUtils.findEnvFiles(env, cwd);
|
|
166
|
+
const unencrypted = envFiles.filter(f => !f.encrypted && f.exists);
|
|
167
|
+
const encrypted = envFiles.filter(f => f.encrypted && f.exists);
|
|
168
|
+
let status = '';
|
|
169
|
+
if (unencrypted.length > 0 && encrypted.length > 0) {
|
|
170
|
+
status = chalk_1.default.yellow('Mixed');
|
|
171
|
+
}
|
|
172
|
+
else if (encrypted.length > 0) {
|
|
173
|
+
status = chalk_1.default.green('Encrypted');
|
|
174
|
+
}
|
|
175
|
+
else if (unencrypted.length > 0) {
|
|
176
|
+
status = chalk_1.default.red('Unencrypted');
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
status = chalk_1.default.gray('No files');
|
|
180
|
+
}
|
|
181
|
+
const totalFiles = unencrypted.length + encrypted.length;
|
|
182
|
+
const fileCount = totalFiles > 0 ? `${totalFiles} file(s)` : 'No files';
|
|
183
|
+
tableRows.push([
|
|
184
|
+
exec_1.CliUtils.formatEnvironment(env),
|
|
185
|
+
fileCount,
|
|
186
|
+
status
|
|
187
|
+
]);
|
|
188
|
+
}
|
|
189
|
+
exec_1.CliUtils.printTable(['Environment', 'Files', 'Status'], tableRows);
|
|
190
|
+
console.log();
|
|
191
|
+
exec_1.CliUtils.info('Commands to manage your environment files:');
|
|
192
|
+
console.log(chalk_1.default.gray('• envx create -e <env> Create new environment file'));
|
|
193
|
+
console.log(chalk_1.default.gray('• envx encrypt -e <env> Encrypt environment files'));
|
|
194
|
+
console.log(chalk_1.default.gray('• envx decrypt -e <env> Decrypt environment files'));
|
|
195
|
+
}
|
|
196
|
+
async function showQuickStart(cwd) {
|
|
197
|
+
exec_1.CliUtils.header('EnvX Quick Start');
|
|
198
|
+
console.log('Welcome to EnvX! Here\'s how to get started:');
|
|
199
|
+
console.log();
|
|
200
|
+
console.log(chalk_1.default.bold('1. Create environment files:'));
|
|
201
|
+
console.log(chalk_1.default.cyan(' envx create -i'));
|
|
202
|
+
console.log();
|
|
203
|
+
console.log(chalk_1.default.bold('2. Set up secrets for encryption:'));
|
|
204
|
+
console.log(chalk_1.default.cyan(' envx interactive'));
|
|
205
|
+
console.log();
|
|
206
|
+
console.log(chalk_1.default.bold('3. Encrypt your environment files:'));
|
|
207
|
+
console.log(chalk_1.default.cyan(' envx encrypt -e production'));
|
|
208
|
+
console.log();
|
|
209
|
+
console.log(chalk_1.default.bold('4. Commit encrypted files to git:'));
|
|
210
|
+
console.log(chalk_1.default.cyan(' git add *.gpg'));
|
|
211
|
+
console.log(chalk_1.default.cyan(' git commit -m "Add encrypted environment files"'));
|
|
212
|
+
console.log();
|
|
213
|
+
console.log(chalk_1.default.bold('5. Decrypt when needed:'));
|
|
214
|
+
console.log(chalk_1.default.cyan(' envx decrypt -e production'));
|
|
215
|
+
console.log();
|
|
216
|
+
await showEnvironmentSummary(cwd);
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=interactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/commands/interactive.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,iBAAe,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CA4F/C;AAyOD,OAAO,EAAE,aAAa,EAAE,CAAC"}
|