vega-frontend-monorepo/tools/utils/setup-environment.ts
botond 80dee1e03d
fix: use netlify git env vars (#727)
* fix: use netlify git env vars

* fix: make git info vars optional in env

* fix: remove git info parsing, and use netlify only

* fix: handle missing git repo url

* fix: format
2022-07-08 11:19:05 +01:00

86 lines
2.4 KiB
TypeScript

import * as fs from 'fs';
import * as path from 'path';
import * as log from 'npmlog';
import * as dotenv from 'dotenv';
import type { ExecutorContext } from '@nrwl/devkit';
process.env['NX_GIT_COMMIT_HASH'] = process.env['COMMIT_REF'] ?? 'dev';
process.env['NX_GIT_BRANCH'] = process.env['BRANCH'] ?? 'dev';
process.env['NX_GIT_ORIGIN_URL'] = process.env['REPOSITORY_URL'] ?? '';
const logEnvData = (
envMap: Record<string, string>,
envFiles: string[],
env?: string,
defaultEnvFile?: string,
loggerScope?: string
) => {
if (env && !envMap[env]) {
log.warn(loggerScope, `No environment called "${env}" found.`);
log.info(
loggerScope,
envFiles.length > 0
? `You can create a new environment by putting an ".env.${env}" file in your project root, or you can use the following available ones: ${envFiles.join(
', '
)}.`
: 'To get started with environments, you can create an ".env" file in your project root with the desired variables.'
);
}
if (!envMap[env]) {
log.info(
loggerScope,
defaultEnvFile
? `Using "${defaultEnvFile}" as the default project environment.`
: 'Serving the project only using the environment variables scoped to your CLI.'
);
} else {
log.info(
loggerScope,
`Using "${envMap[env]}" as the default project environment.`
);
}
};
const filenameToEnv = (filename: string) => filename.replace('.env.', '');
const getDefaultEnvFile = (envMap: Record<string, string>) => {
return envMap['local'] || envMap['.env'];
};
const getEnvFile = (env: string, envFiles: string[], loggerScope?: string) => {
const envMap = envFiles.reduce(
(acc, filename) => ({
...acc,
[filenameToEnv(filename)]: filename,
}),
{}
);
const defaultEnvFile = getDefaultEnvFile(envMap);
logEnvData(envMap, envFiles, env, defaultEnvFile, loggerScope);
return envMap[env] || defaultEnvFile;
};
export default async function setup(
env: string,
context: ExecutorContext,
loggerScope?: string
) {
const { root } = context.workspace.projects[context.projectName];
const workspacePath = path.join(context.cwd, root);
const files = await fs.promises.readdir(workspacePath);
const envFile = getEnvFile(
env,
files.filter((f) => f.startsWith('.env')),
loggerScope
);
if (env && envFile) {
dotenv.config({ path: path.join(workspacePath, envFile), override: true });
}
}