Skip to content

Commit

Permalink
Merge branch 'firebase:master' into 8168-fix
Browse files Browse the repository at this point in the history
  • Loading branch information
fivecar authored Feb 5, 2025
2 parents 2abd10b + c308c00 commit 9271475
Show file tree
Hide file tree
Showing 10 changed files with 37 additions and 17 deletions.
2 changes: 2 additions & 0 deletions firebase-vscode/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
## NEXT

- Added `extraEnv` setting to help extension development.

## 0.12.2

- Updated internal `firebase-tools` dependency to 13.29.3
Expand Down
5 changes: 5 additions & 0 deletions firebase-vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,11 @@
"type": "boolean",
"default": false,
"markdownDescription": "%ext.config.debug%"
},
"firebase.extraEnv": {
"type": "object",
"default": {},
"markdownDescription": "%ext.config.extraEnv%"
}
}
},
Expand Down
3 changes: 2 additions & 1 deletion firebase-vscode/package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"ext.config.idx.viewMetricNotice": "Show data collection notice on next startup (IDX Only)",
"ext.config.emulators.importPath": "Path to import emulator data from",
"ext.config.emulators.exportPath": "Path to export emulator data to",
"ext.config.emulators.exportOnExit": "If true, data will be exported to exportPath when the emulator shuts down"
"ext.config.emulators.exportOnExit": "If true, data will be exported to exportPath when the emulator shuts down",
"ext.config.debug": "When true, add the --debug flag to any commands run by the extension",
"ext.config.extraEnv": "Extra environment variables to provide during deploy or emulation. Useful during extension development to enable experiments or hit non-production environments."
}
2 changes: 1 addition & 1 deletion firebase-vscode/src/core/webhook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export async function registerWebhooks() {
const port = await findOpenPort(DEFAULT_PORT);

if (port !== DEFAULT_PORT) {
setTerminalEnvVars("VSCODE_WEBHOOK_PORT", port.toString());
setTerminalEnvVars({"VSCODE_WEBHOOK_PORT": port.toString()});
}

server.listen(port, () => {
Expand Down
4 changes: 3 additions & 1 deletion firebase-vscode/src/data-connect/sdk-generation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ export function registerFdcSdkGeneration(
(args: { appFolder: string }) => {
analyticsLogger.logger.logUsage(DATA_CONNECT_EVENT_NAME.INIT_SDK_CLI);
// Lets do it from the right directory
setTerminalEnvVars(FDC_APP_FOLDER, args.appFolder);
const e: Record<string, string> = {}
e[FDC_APP_FOLDER] = args.appFolder;
setTerminalEnvVars(e);
runCommand(`${settings.firebasePath} init dataconnect:sdk`);
},
);
Expand Down
10 changes: 6 additions & 4 deletions firebase-vscode/src/data-connect/terminal.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
import { TelemetryLogger, TerminalOptions } from "vscode";
import { TerminalOptions } from "vscode";
import { ExtensionBrokerImpl } from "../extension-broker";
import vscode, { Disposable } from "vscode";
import { checkLogin } from "../core/user";
import { DATA_CONNECT_EVENT_NAME, AnalyticsLogger } from "../analytics";
import { getSettings } from "../utils/settings";
import { currentProjectId } from "../core/project";

const environmentVariables: Record<string, string> = {};
let environmentVariables: Record<string, string> = {};

const executionOptions: vscode.ShellExecutionOptions = {
env: environmentVariables,
};

export function setTerminalEnvVars(envVar: string, value: string) {
environmentVariables[envVar] = value;
export function setTerminalEnvVars(env: Record<string, string>) {
environmentVariables = {...environmentVariables, ...env};
}

export function runCommand(command: string) {
const settings = getSettings();
setTerminalEnvVars(settings.extraEnv ?? {});
const terminalOptions: TerminalOptions = {
name: "Data Connect Terminal",
env: environmentVariables,
Expand All @@ -43,6 +44,7 @@ export function runTerminalTask(
presentationOptions: vscode.TaskPresentationOptions = { focus: true },
): Promise<string> {
const settings = getSettings();
setTerminalEnvVars(settings.extraEnv ?? {});
const type = "firebase-" + Date.now();
return new Promise(async (resolve, reject) => {
vscode.tasks.onDidEndTaskProcess(async (e) => {
Expand Down
6 changes: 4 additions & 2 deletions firebase-vscode/src/data-connect/toolkit.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import * as vscode from "vscode";
import { ExtensionBrokerImpl } from "../extension-broker";
import { effect, signal } from "@preact/signals-core";
import { effect } from "@preact/signals-core";
import { firebaseRC } from "../core/config";
import { dataConnectConfigs, firebaseConfig } from "./config";
import { runEmulatorIssuesStream } from "./emulator-stream";
import { runDataConnectCompiler } from "./core-compiler";
import { DataConnectToolkitController } from "../../../src/emulator/dataconnectToolkitController";
import { DataConnectEmulatorArgs } from "../emulator/dataconnectEmulator";
import { Config } from "../config";
import { RC } from "../rc";
import { findOpenPort } from "../utils/port_utils";
import { pluginLogger } from "../logger-wrapper";
import { getSettings } from "../utils/settings";

const DEFAULT_PORT = 50001;
/** FDC-specific emulator logic; Toolkit and emulator */
Expand All @@ -37,6 +37,7 @@ export class DataConnectToolkit implements vscode.Disposable {
// special function to start FDC emulator with special flags & port
async startFDCToolkit(configDir: string, config: Config, RC: RC) {
const port = await findOpenPort(DEFAULT_PORT);
const settings = getSettings();
const toolkitArgs: DataConnectEmulatorArgs = {
projectId: "toolkit",
listen: [{ address: "localhost", port, family: "IPv4" }],
Expand All @@ -46,6 +47,7 @@ export class DataConnectToolkit implements vscode.Disposable {
autoconnectToPostgres: false,
enable_output_generated_sdk: true,
enable_output_schema_extensions: true,
extraEnv: settings.extraEnv,
};
pluginLogger.info(`Starting Data Connect toolkit (version ${DataConnectToolkitController.getVersion()}) on port ${port}`);
return DataConnectToolkitController.start(toolkitArgs);
Expand Down
1 change: 0 additions & 1 deletion firebase-vscode/src/utils/env.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
// Set by the `package.json` file
export const isTest = !!process.env.TEST;
export const isDebug = !!process.env.DEBUG;
2 changes: 2 additions & 0 deletions firebase-vscode/src/utils/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export interface Settings {
readonly exportPath: string;
readonly exportOnExit: boolean;
readonly debug: boolean;
readonly extraEnv: Record<string, string>;
}

// TODO: Temporary fallback for bashing, this should probably point to the global firebase binary on the system
Expand Down Expand Up @@ -45,6 +46,7 @@ export function getSettings(): Settings {
exportPath: config.get<string>("emulators.exportPath", "./exportedData"),
exportOnExit: config.get<boolean>("emulators.exportOnExit", false),
debug: config.get<boolean>("debug", false),
extraEnv: config.get<Record<string,string>>("extraEnv", {}),
};
}

Expand Down
19 changes: 12 additions & 7 deletions src/emulator/dataconnectEmulator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export interface DataConnectEmulatorArgs {
enable_output_generated_sdk: boolean;
importPath?: string;
debug?: boolean;
extraEnv?: Record<string, string>;
}

export interface DataConnectGenerateArgs {
Expand Down Expand Up @@ -92,13 +93,17 @@ export class DataConnectEmulator implements EmulatorInstance {
} catch (err: any) {
this.logger.log("DEBUG", `'fdc build' failed with error: ${err.message}`);
}
await start(Emulators.DATACONNECT, {
auto_download: this.args.auto_download,
listen: listenSpecsToString(this.args.listen),
config_dir: resolvedConfigDir,
enable_output_schema_extensions: this.args.enable_output_schema_extensions,
enable_output_generated_sdk: this.args.enable_output_generated_sdk,
});
await start(
Emulators.DATACONNECT,
{
auto_download: this.args.auto_download,
listen: listenSpecsToString(this.args.listen),
config_dir: resolvedConfigDir,
enable_output_schema_extensions: this.args.enable_output_schema_extensions,
enable_output_generated_sdk: this.args.enable_output_generated_sdk,
},
this.args.extraEnv,
);

this.usingExistingEmulator = false;
if (this.args.autoconnectToPostgres) {
Expand Down

0 comments on commit 9271475

Please sign in to comment.