in src/schematics/deploy/actions.ts [374:485]
export default async function deploy(
firebaseTools: FirebaseTools,
context: BuilderContext,
staticBuildTarget: BuildTarget,
serverBuildTarget: BuildTarget | undefined,
prerenderBuildTarget: BuildTarget | undefined,
firebaseProject: string,
options: DeployBuilderOptions,
firebaseToken?: string,
) {
if (!firebaseToken) {
await firebaseTools.login();
const user = await firebaseTools.login({ projectRoot: context.workspaceRoot });
console.log(`Logged into Firebase as ${user.email}.`);
}
if (prerenderBuildTarget) {
const run = await context.scheduleTarget(
targetFromTargetString(prerenderBuildTarget.name),
prerenderBuildTarget.options
);
await run.result;
} else {
if (!context.target) {
throw new Error('Cannot execute the build target');
}
context.logger.info(`📦 Building "${context.target.project}"`);
const builders = [
context.scheduleTarget(
targetFromTargetString(staticBuildTarget.name),
staticBuildTarget.options
).then(run => run.result)
];
if (serverBuildTarget) {
builders.push(context.scheduleTarget(
targetFromTargetString(serverBuildTarget.name),
serverBuildTarget.options
).then(run => run.result));
}
await Promise.all(builders);
}
try {
await firebaseTools.use(firebaseProject, {
project: firebaseProject,
projectRoot: context.workspaceRoot,
});
} catch (e) {
throw new Error(`Cannot select firebase project '${firebaseProject}'`);
}
options.firebaseProject = firebaseProject;
const logger = new winston.transports.Console({
level: 'info',
format: winston.format.printf((info) => {
const emulator = info[tripleBeam.SPLAT as any]?.[1]?.metadata?.emulator;
const text = info[tripleBeam.SPLAT as any]?.[0];
if (text?.replace) {
const plainText = text.replace(/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]/g, '');
if (emulator?.name === 'hosting' && plainText.startsWith('Local server: ')) {
open(plainText.split(': ')[1]);
}
}
return [info.message, ...(info[tripleBeam.SPLAT as any] || [])]
.filter((chunk) => typeof chunk === 'string')
.join(' ');
})
});
firebaseTools.logger.logger.add(logger);
if (serverBuildTarget) {
if (options.ssr === 'cloud-run') {
await deployToCloudRun(
firebaseTools,
context,
context.workspaceRoot,
staticBuildTarget,
serverBuildTarget,
options,
firebaseToken,
);
} else {
await deployToFunction(
firebaseTools,
context,
context.workspaceRoot,
staticBuildTarget,
serverBuildTarget,
options,
firebaseToken,
);
}
} else {
await deployToHosting(
firebaseTools,
context,
context.workspaceRoot,
options,
firebaseToken,
);
}
}