-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
49 lines (40 loc) · 1.9 KB
/
Copy pathindex.js
File metadata and controls
49 lines (40 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import debug from 'debug'
import isEmpty from 'lodash.isempty'
import { backUpEnvFile, readEnvFile, resolveCurrentEnvFile, writeEnvFile } from './lib/env-file-handler.js'
import { getAwsSecrets } from './lib/get-aws-secrets.js'
import { getDiff } from './lib/get-diff.js'
import { getPackageName } from './lib/get-package-name.js'
import { getSecretName } from './lib/get-secret-name.js'
const debugLogger = debug('smenv:index')
export async function smenv({
secretName,
packageName,
environment = process.env.NODE_ENV || 'local',
isSupportEnvironment = false,
isBackupCurrentFile = false,
awsSettings = {},
getAwsSecretsFunc = getAwsSecrets
}) {
const currentFileName = await resolveCurrentEnvFile(isSupportEnvironment, environment)
debugLogger(`current env file name: ${currentFileName}`)
if (isBackupCurrentFile) {
const backupFileName = await backUpEnvFile(currentFileName)
debugLogger(`current file backed up: ${backupFileName}`)
}
const calcPackageName = packageName || (await getPackageName())
const calcSecretName = getSecretName(secretName, calcPackageName, environment)
debugLogger(`going to pull secret from AWS for ${calcSecretName}`)
const awsSecrets = await getAwsSecretsFunc(calcSecretName, awsSettings)
debugLogger(`AWS Secrets: ${JSON.stringify(awsSecrets)}`)
const currentEnvContent = await readEnvFile(currentFileName)
debugLogger(`current env content: ${JSON.stringify(currentEnvContent)}`)
const filesDiff = getDiff(currentEnvContent, awsSecrets)
debugLogger('diff from AWS secret: ', JSON.stringify(filesDiff))
if (isEmpty(filesDiff.added) && isEmpty(filesDiff.deleted) && isEmpty(filesDiff.updated)) {
debugLogger('no changes detected')
return { isDiff: false, envs: currentEnvContent }
}
await writeEnvFile(currentFileName, awsSecrets)
debugLogger(`current file written: ${currentFileName}`)
return { isDiff: true, filesDiff, envs: awsSecrets }
}