From 56361debb25ea35f0cd6aad2355a6641aa20fe2c Mon Sep 17 00:00:00 2001 From: Anton Nikolaev Date: Tue, 8 Dec 2020 12:35:53 -0800 Subject: [PATCH] Differentiate insider builds from stable builds Summary: Each build will have an embedded file specifying the target release channel for the build. This allows us to do some customisations, e.g. show "Insiders" label in the title and enable Sandy by default for insiders builds. Reviewed By: jknoxville Differential Revision: D25399045 fbshipit-source-id: 8e26d0754d0713ced823f86b30b54491d55b4d97 --- desktop/app/src/fb-stubs/config.tsx | 3 +++ desktop/app/src/init.tsx | 7 ++++++- .../src/sandy-chrome/TemporarilyTitlebar.tsx | 10 +++++++++- desktop/app/src/utils/useIsDarkMode.tsx | 5 ++++- desktop/scripts/build-release.ts | 18 ++++++++++++++---- desktop/scripts/start-dev-server.ts | 9 +++++++++ 6 files changed, 45 insertions(+), 7 deletions(-) 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)) {