diff --git a/desktop/app/src/fb-stubs/config.tsx b/desktop/app/src/fb-stubs/config.tsx index 08cf3a8fe..dcbf058ad 100644 --- a/desktop/app/src/fb-stubs/config.tsx +++ b/desktop/app/src/fb-stubs/config.tsx @@ -7,10 +7,13 @@ * @format */ +import ReleaseChannel from '../ReleaseChannel'; + export default { updateServer: 'https://www.facebook.com/fbflipper/public/latest.json', showLogin: false, showFlipperRating: false, warnFBEmployees: true, isFBBuild: false, + getReleaseChannel: () => ReleaseChannel.STABLE, }; diff --git a/desktop/app/src/init.tsx b/desktop/app/src/init.tsx index e64f112e6..c7de39b7f 100644 --- a/desktop/app/src/init.tsx +++ b/desktop/app/src/init.tsx @@ -20,6 +20,7 @@ import {Store} from './reducers/index'; import dispatcher from './dispatcher/index'; import TooltipProvider from './ui/components/TooltipProvider'; import config from './utils/processConfig'; +import appConfig from '../src/fb-stubs/config'; import {initLauncherHooks} from './utils/launcher'; import {setPersistor} from './utils/persistor'; import React from 'react'; @@ -40,6 +41,7 @@ import { _setGlobalInteractionReporter, } from 'flipper-plugin'; import isProduction from './utils/isProduction'; +import ReleaseChannel from './ReleaseChannel'; if (process.env.NODE_ENV === 'development' && os.platform() === 'darwin') { // By default Node.JS has its internal certificate storage and doesn't use @@ -116,7 +118,10 @@ function init() { store, {name: 'loadTheme', fireImmediately: true, throttleMs: 500}, (state) => ({ - sandy: GK.get('flipper_sandy') && !state.settingsState.disableSandy, + sandy: + (GK.get('flipper_sandy') || + appConfig.getReleaseChannel() === ReleaseChannel.INSIDERS) && + !state.settingsState.disableSandy, dark: state.settingsState.darkMode, }), (theme) => { diff --git a/desktop/app/src/sandy-chrome/TemporarilyTitlebar.tsx b/desktop/app/src/sandy-chrome/TemporarilyTitlebar.tsx index dad15e415..824d07347 100644 --- a/desktop/app/src/sandy-chrome/TemporarilyTitlebar.tsx +++ b/desktop/app/src/sandy-chrome/TemporarilyTitlebar.tsx @@ -18,6 +18,8 @@ import UpdateIndicator from '../chrome/UpdateIndicator'; import {Version} from '../chrome/TitleBar'; import {useStore} from '../utils/useStore'; import {remote} from 'electron'; +import config from '../fb-stubs/config'; +import ReleaseChannel from '../ReleaseChannel'; const version = remote.app.getVersion(); @@ -54,7 +56,13 @@ export function TemporarilyTitlebar() { [Sandy] Flipper{' '} {!isProduction() && } {!isProduction() && } - {version + (isProduction() ? '' : '-dev')} + + {version + + (isProduction() ? '' : '-dev') + + (config.getReleaseChannel() !== ReleaseChannel.STABLE + ? `-${config.getReleaseChannel()}` + : '')} + {isAutoUpdaterEnabled() ? ( ) : ( diff --git a/desktop/app/src/utils/useIsDarkMode.tsx b/desktop/app/src/utils/useIsDarkMode.tsx index 75568c07a..1dba64626 100644 --- a/desktop/app/src/utils/useIsDarkMode.tsx +++ b/desktop/app/src/utils/useIsDarkMode.tsx @@ -8,7 +8,9 @@ */ import {useStore} from '../../../app/src/utils/useStore'; +import config from '../fb-stubs/config'; import GK from '../fb-stubs/GK'; +import ReleaseChannel from '../ReleaseChannel'; /** * This hook returns whether dark mode is currently being used. * Generally should be avoided in favor of using the above theme object, @@ -17,7 +19,8 @@ import GK from '../fb-stubs/GK'; export function useIsDarkMode(): boolean { return useStore( (state) => - GK.get('flipper_sandy') && + (GK.get('flipper_sandy') || + config.getReleaseChannel() === ReleaseChannel.INSIDERS) && !state.settingsState.disableSandy && state.settingsState.darkMode, ); diff --git a/desktop/scripts/build-release.ts b/desktop/scripts/build-release.ts index 805502f34..021f8648c 100755 --- a/desktop/scripts/build-release.ts +++ b/desktop/scripts/build-release.ts @@ -61,6 +61,11 @@ const argv = yargs type: 'number', default: 0, }, + channel: { + description: 'Release channel for the build', + choices: ['stable', 'insiders'], + default: 'stable', + }, }) .help() .strict() @@ -79,6 +84,12 @@ const argv = yargs }) .parse(process.argv.slice(1)); +if (isFB) { + process.env.FLIPPER_FB = 'true'; +} + +process.env.FLIPPER_RELEASE_CHANNEL = argv.channel; + async function generateManifest(versionNumber: string) { await fs.writeFile( path.join(distDir, 'manifest.json'), @@ -93,6 +104,7 @@ async function modifyPackageManifest( buildFolder: string, versionNumber: string, hgRevision: string | null, + channel: string, ) { // eslint-disable-next-line no-console console.log('Creating package.json manifest'); @@ -108,6 +120,7 @@ async function modifyPackageManifest( if (hgRevision != null) { manifest.revision = hgRevision; } + manifest.releaseChannel = channel; await fs.writeFile( path.join(buildFolder, 'package.json'), JSON.stringify(manifest, null, ' '), @@ -244,9 +257,6 @@ function downloadIcons(buildFolder: string) { } (async () => { - if (isFB) { - process.env.FLIPPER_FB = 'true'; - } const dir = await buildFolder(); // eslint-disable-next-line no-console console.log('Created build directory', dir); @@ -258,7 +268,7 @@ function downloadIcons(buildFolder: string) { await compileRenderer(dir); const versionNumber = getVersionNumber(argv.version); const hgRevision = await genMercurialRevision(); - await modifyPackageManifest(dir, versionNumber, hgRevision); + await modifyPackageManifest(dir, versionNumber, hgRevision, argv.channel); await fs.ensureDir(distDir); await generateManifest(versionNumber); await buildDist(dir); diff --git a/desktop/scripts/start-dev-server.ts b/desktop/scripts/start-dev-server.ts index 29f7b4ee4..db67bc91f 100644 --- a/desktop/scripts/start-dev-server.ts +++ b/desktop/scripts/start-dev-server.ts @@ -71,6 +71,11 @@ const argv = yargs '[FB-internal only] Will yield `true` on any GK. Disabled by default. Setting env var FLIPPER_ENABLE_ALL_GKS is equivalent', type: 'boolean', }, + channel: { + describe: + '[FB-internal only] Release channel. "stable" by default. Setting env var "FLIPPER_RELEASE_CHANNEL" is equivalent.', + choices: ['stable', 'insiders'], + }, }) .version('DEV') .help() @@ -115,6 +120,10 @@ if (argv['enabled-plugins'] !== undefined) { process.env.FLIPPER_ENABLED_PLUGINS = argv['enabled-plugins'].join(','); } +if (argv.channel !== undefined) { + process.env.FLIPPER_RELEASE_CHANNEL = argv.channel; +} + function looksLikeDevServer(): boolean { const hn = hostname(); if (/^devvm.*\.facebook\.com$/.test(hn)) {