123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.deploy = void 0;
- const logger_1 = require("../logger");
- const api_1 = require("../api");
- const colorette_1 = require("colorette");
- const lodash_1 = require("lodash");
- const projectUtils_1 = require("../projectUtils");
- const utils_1 = require("../utils");
- const error_1 = require("../error");
- const track_1 = require("../track");
- const lifecycleHooks_1 = require("./lifecycleHooks");
- const experiments = require("../experiments");
- const HostingTarget = require("./hosting");
- const DatabaseTarget = require("./database");
- const FirestoreTarget = require("./firestore");
- const FunctionsTarget = require("./functions");
- const StorageTarget = require("./storage");
- const RemoteConfigTarget = require("./remoteconfig");
- const ExtensionsTarget = require("./extensions");
- const frameworks_1 = require("../frameworks");
- const requirePermissions_1 = require("../requirePermissions");
- const deploy_1 = require("../commands/deploy");
- const TARGETS = {
- hosting: HostingTarget,
- database: DatabaseTarget,
- firestore: FirestoreTarget,
- functions: FunctionsTarget,
- storage: StorageTarget,
- remoteconfig: RemoteConfigTarget,
- extensions: ExtensionsTarget,
- };
- const chain = async function (fns, context, options, payload) {
- for (const latest of fns) {
- await latest(context, options, payload);
- }
- };
- const deploy = async function (targetNames, options, customContext = {}) {
- const projectId = (0, projectUtils_1.needProjectId)(options);
- const payload = {};
- const context = Object.assign({ projectId }, customContext);
- const predeploys = [];
- const prepares = [];
- const deploys = [];
- const releases = [];
- const postdeploys = [];
- const startTime = Date.now();
- if (targetNames.includes("hosting")) {
- const config = options.config.get("hosting");
- if (Array.isArray(config) ? config.some((it) => it.source) : config.source) {
- experiments.assertEnabled("webframeworks", "deploy a web framework to hosting");
- const usedToTargetFunctions = targetNames.includes("functions");
- await (0, frameworks_1.prepareFrameworks)(targetNames, context, options);
- const nowTargetsFunctions = targetNames.includes("functions");
- if (nowTargetsFunctions && !usedToTargetFunctions) {
- if (context.hostingChannel && !experiments.isEnabled("pintags")) {
- throw new error_1.FirebaseError("Web frameworks with dynamic content do not yet support deploying to preview channels");
- }
- await (0, requirePermissions_1.requirePermissions)(deploy_1.TARGET_PERMISSIONS["functions"]);
- }
- }
- }
- for (const targetName of targetNames) {
- const target = TARGETS[targetName];
- if (!target) {
- return Promise.reject(new error_1.FirebaseError(`${(0, colorette_1.bold)(targetName)} is not a valid deploy target`));
- }
- predeploys.push((0, lifecycleHooks_1.lifecycleHooks)(targetName, "predeploy"));
- prepares.push(target.prepare);
- deploys.push(target.deploy);
- releases.push(target.release);
- postdeploys.push((0, lifecycleHooks_1.lifecycleHooks)(targetName, "postdeploy"));
- }
- logger_1.logger.info();
- logger_1.logger.info((0, colorette_1.bold)((0, colorette_1.white)("===") + " Deploying to '" + projectId + "'..."));
- logger_1.logger.info();
- (0, utils_1.logBullet)("deploying " + (0, colorette_1.bold)(targetNames.join(", ")));
- await chain(predeploys, context, options, payload);
- await chain(prepares, context, options, payload);
- await chain(deploys, context, options, payload);
- await chain(releases, context, options, payload);
- await chain(postdeploys, context, options, payload);
- if ((0, lodash_1.has)(options, "config.notes.databaseRules")) {
- await (0, track_1.track)("Rules Deploy", options.config.notes.databaseRules);
- }
- const duration = Date.now() - startTime;
- await (0, track_1.track)("Product Deploy", [...targetNames].sort().join(","), duration);
- logger_1.logger.info();
- (0, utils_1.logSuccess)((0, colorette_1.bold)((0, colorette_1.underline)("Deploy complete!")));
- logger_1.logger.info();
- const deployedHosting = (0, lodash_1.includes)(targetNames, "hosting");
- logger_1.logger.info((0, colorette_1.bold)("Project Console:"), (0, utils_1.consoleUrl)(options.project, "/overview"));
- if (deployedHosting) {
- (0, lodash_1.each)(context.hosting.deploys, (deploy) => {
- logger_1.logger.info((0, colorette_1.bold)("Hosting URL:"), (0, utils_1.addSubdomain)(api_1.hostingOrigin, deploy.config.site));
- });
- const versionNames = context.hosting.deploys.map((deploy) => deploy.version);
- return { hosting: versionNames.length === 1 ? versionNames[0] : versionNames };
- }
- else {
- return { hosting: undefined };
- }
- };
- exports.deploy = deploy;
|