UNPKG

firebase-ci

Version:

Simplified Firebase interaction for continuous integration including deploying hosting, functions, and database/storage rules.

97 lines (70 loc) 3.14 kB
"use strict"; 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'); }