firebase-ci
Version:
Simplified Firebase interaction for continuous integration including deploying hosting, functions, and database/storage rules.
97 lines (70 loc) • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = mapEnv;
var _get2 = _interopRequireDefault(require("lodash/get"));
var _map2 = _interopRequireDefault(require("lodash/map"));
var _chalk = _interopRequireDefault(require("chalk"));
var _logger = require("../utils/logger");
var _files = require("../utils/files");
var _async = require("../utils/async");
var _commands = require("../utils/commands");
var _ci = require("../utils/ci");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const skipPrefix = 'Skipping firebase-ci mapEnv';
function strFromEnvironmentVarSetting(functionsVar, envVar) {
if (!process.env[envVar]) {
const msg = `${_chalk.default.cyan(envVar)} does not exist on within environment variables`;
(0, _logger.warn)(msg);
return '';
}
return `${functionsVar}="${process.env[envVar]}"`;
}
function buildConfigSetArgs(mapEnvSettings) {
const settingsStrsArr = (0, _map2.default)(mapEnvSettings, strFromEnvironmentVarSetting).filter(Boolean);
if (!settingsStrsArr.length) {
return null;
}
const projectKey = (0, _ci.getProjectKey)(mapEnvSettings);
return ['functions:config:set', ...settingsStrsArr, '-P', projectKey];
}
async function mapEnv(copySettings) {
const settings = (0, _files.getFile)('.firebaserc');
const mapEnvSettings = (0, _get2.default)(settings, 'ci.mapEnv', copySettings);
if (!mapEnvSettings) {
const msg = 'mapEnv parameter with settings needed in .firebaserc!';
(0, _logger.warn)(msg);
return null;
}
const fallbackProjectName = (0, _ci.getFallbackProjectKey)();
const projectKey = (0, _ci.getProjectKey)(copySettings);
const projectName = (0, _get2.default)(settings, `projects.${projectKey}`);
const fallbackProjectSetting = (0, _get2.default)(settings, `projects.${fallbackProjectName}`);
if (!projectName) {
const nonProjectBranch = `${skipPrefix} - Project ${_chalk.default.cyan(projectKey)} is not an alias, checking for fallback...`;
(0, _logger.warn)(nonProjectBranch);
if (!fallbackProjectSetting) {
const nonFallbackBranch = `${skipPrefix} - Fallback Project: ${_chalk.default.cyan(fallbackProjectName)} is a not an alias, exiting...`;
(0, _logger.warn)(nonFallbackBranch);
return nonProjectBranch;
}
return null;
}
const setConfigArgs = buildConfigSetArgs(mapEnvSettings);
if (!setConfigArgs) {
(0, _logger.warn)(`No variables from ${_chalk.default.cyan('mapEnv')} settings found in environment, skipping mapping of environment variables`);
return null;
}
(0, _logger.info)('Mapping Environment to Firebase Functions...');
const [configSetErr] = await (0, _async.to)((0, _commands.runCommand)({
command: 'firebase',
args: setConfigArgs
}));
if (configSetErr) {
const errMsg = `Error setting Firebase functions config variables from variables CI environment (mapEnv):`;
(0, _logger.error)(errMsg, configSetErr);
throw new Error(errMsg);
}
(0, _logger.info)('Successfully set functions config from variables in CI environment');
}