diff --git a/desktop/app/src/dispatcher/__tests__/plugins.node.tsx b/desktop/app/src/dispatcher/__tests__/plugins.node.tsx index da58a0811..ba1854285 100644 --- a/desktop/app/src/dispatcher/__tests__/plugins.node.tsx +++ b/desktop/app/src/dispatcher/__tests__/plugins.node.tsx @@ -162,14 +162,16 @@ test('requirePlugin loads plugin', () => { expect(plugin!.id).toBe(TestPlugin.id); }); -test('newest version of each plugin is taken', () => { - const plugins: PluginDetails[] = [ +test('newest version of each plugin is used', () => { + const bundledPlugins: PluginDetails[] = [ {...samplePluginDetails, name: 'flipper-plugin-test1', version: '0.1.0'}, { ...samplePluginDetails, name: 'flipper-plugin-test2', version: '0.1.0-alpha.201', }, + ]; + const installedPlugins: PluginDetails[] = [ { ...samplePluginDetails, name: 'flipper-plugin-test2', @@ -177,7 +179,10 @@ test('newest version of each plugin is taken', () => { }, {...samplePluginDetails, name: 'flipper-plugin-test1', version: '0.10.0'}, ]; - const filteredPlugins = filterNewestVersionOfEachPlugin(plugins); + const filteredPlugins = filterNewestVersionOfEachPlugin( + bundledPlugins, + installedPlugins, + ); expect(filteredPlugins).toHaveLength(2); expect(filteredPlugins).toContainEqual({ ...samplePluginDetails, @@ -190,3 +195,42 @@ test('newest version of each plugin is taken', () => { version: '0.1.0-alpha.201', }); }); + +test('bundled versions are used when env var FLIPPER_DISABLE_PLUGIN_AUTO_UPDATE is set even if newer versions are installed', () => { + process.env.FLIPPER_DISABLE_PLUGIN_AUTO_UPDATE = 'true'; + try { + const bundledPlugins: PluginDetails[] = [ + {...samplePluginDetails, name: 'flipper-plugin-test1', version: '0.1.0'}, + { + ...samplePluginDetails, + name: 'flipper-plugin-test2', + version: '0.1.0-alpha.21', + }, + ]; + const installedPlugins: PluginDetails[] = [ + { + ...samplePluginDetails, + name: 'flipper-plugin-test2', + version: '0.1.0-alpha.201', + }, + {...samplePluginDetails, name: 'flipper-plugin-test1', version: '0.10.0'}, + ]; + const filteredPlugins = filterNewestVersionOfEachPlugin( + bundledPlugins, + installedPlugins, + ); + expect(filteredPlugins).toHaveLength(2); + expect(filteredPlugins).toContainEqual({ + ...samplePluginDetails, + name: 'flipper-plugin-test1', + version: '0.1.0', + }); + expect(filteredPlugins).toContainEqual({ + ...samplePluginDetails, + name: 'flipper-plugin-test2', + version: '0.1.0-alpha.21', + }); + } finally { + delete process.env.FLIPPER_DISABLE_PLUGIN_AUTO_UPDATE; + } +}); diff --git a/desktop/app/src/dispatcher/plugins.tsx b/desktop/app/src/dispatcher/plugins.tsx index bbea21b8f..34ecac8ee 100644 --- a/desktop/app/src/dispatcher/plugins.tsx +++ b/desktop/app/src/dispatcher/plugins.tsx @@ -51,10 +51,7 @@ export default (store: Store, logger: Logger) => { const initialPlugins: Array< typeof FlipperPlugin | typeof FlipperDevicePlugin - > = filterNewestVersionOfEachPlugin([ - ...getBundledPlugins(), - ...getDynamicPlugins(), - ]) + > = filterNewestVersionOfEachPlugin(getBundledPlugins(), getDynamicPlugins()) .filter(checkDisabled(disabledPlugins)) .filter(checkGK(gatekeepedPlugins)) .map(requirePlugin(failedPlugins, defaultPluginsIndex)) @@ -80,13 +77,18 @@ export default (store: Store, logger: Logger) => { }; export function filterNewestVersionOfEachPlugin( - plugins: PluginDetails[], + bundledPlugins: PluginDetails[], + dynamicPlugins: PluginDetails[], ): PluginDetails[] { const pluginByName: {[key: string]: PluginDetails} = {}; - for (const plugin of plugins) { + for (const plugin of bundledPlugins) { + pluginByName[plugin.name] = plugin; + } + for (const plugin of dynamicPlugins) { if ( !pluginByName[plugin.name] || - semver.gt(plugin.version, pluginByName[plugin.name].version, true) + (!process.env.FLIPPER_DISABLE_PLUGIN_AUTO_UPDATE && + semver.gt(plugin.version, pluginByName[plugin.name].version, true)) ) { pluginByName[plugin.name] = plugin; } diff --git a/desktop/scripts/start-dev-server.ts b/desktop/scripts/start-dev-server.ts index 8214ed42a..d8dd173fa 100644 --- a/desktop/scripts/start-dev-server.ts +++ b/desktop/scripts/start-dev-server.ts @@ -45,6 +45,11 @@ if (process.argv.includes('--no-embedded-plugins')) { if (process.argv.includes('--fast-refresh')) { process.env.FLIPPER_FAST_REFRESH = 'true'; } +// By default plugin auto-update is disabled in dev mode, +// but it is possible to enable it using this command line argument. +if (!process.argv.includes('--plugin-auto-update')) { + process.env.FLIPPER_DISABLE_PLUGIN_AUTO_UPDATE = 'true'; +} function launchElectron(port: number) { const entry = process.env.FLIPPER_FAST_REFRESH ? 'init-fast-refresh' : 'init';