From 2a25c6aaa4206edcfca179d8cab0201492b730b6 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 17 Aug 2020 13:41:19 -0600 Subject: [PATCH 1/3] Update configs for new settings structure --- config.sample.json | 6 +----- element.io/app/config.json | 3 +-- element.io/develop/config.json | 16 +--------------- 3 files changed, 3 insertions(+), 22 deletions(-) diff --git a/config.sample.json b/config.sample.json index 662865c041..52e47f03f1 100644 --- a/config.sample.json +++ b/config.sample.json @@ -26,11 +26,7 @@ "defaultCountryCode": "GB", "showLabsSettings": false, "features": { - "feature_new_spinner": "labs", - "feature_pinning": "labs", - "feature_custom_status": "labs", - "feature_custom_tags": "labs", - "feature_state_counters": "labs" + "feature_new_spinner": false }, "default_federate": true, "default_theme": "light", diff --git a/element.io/app/config.json b/element.io/app/config.json index f0af8b82bb..c8867d3dd6 100644 --- a/element.io/app/config.json +++ b/element.io/app/config.json @@ -12,8 +12,7 @@ ], "hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web", "bug_report_endpoint_url": "https://element.io/bugreports/submit", - "features": { - }, + "showLabsSettings": false, "piwik": { "url": "https://piwik.riot.im/", "siteId": 1, diff --git a/element.io/develop/config.json b/element.io/develop/config.json index be5b58909a..bcf6142d18 100644 --- a/element.io/develop/config.json +++ b/element.io/develop/config.json @@ -12,21 +12,7 @@ ], "hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web", "bug_report_endpoint_url": "https://element.io/bugreports/submit", - "features": { - "feature_new_spinner": "labs", - "feature_pinning": "labs", - "feature_custom_status": "labs", - "feature_custom_tags": "labs", - "feature_state_counters": "labs", - "feature_many_integration_managers": "labs", - "feature_mjolnir": "labs", - "feature_dm_verification": "labs", - "feature_bridge_state": "labs", - "feature_presence_in_room_list": "labs", - "feature_custom_themes": "labs", - "feature_roomlist_preview_reactions_dms": "labs", - "feature_roomlist_preview_reactions_all": "labs" - }, + "showLabsSettings": true, "piwik": { "url": "https://piwik.riot.im/", "siteId": 1, From 3e924941c3c6b3f29e7b889c4f6f6b9b3d181b51 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 17 Aug 2020 14:00:04 -0600 Subject: [PATCH 2/3] Update feature flags documentation for new feature behaviour --- docs/feature-flags.md | 68 +++++++++++++------------------------------ 1 file changed, 20 insertions(+), 48 deletions(-) diff --git a/docs/feature-flags.md b/docs/feature-flags.md index 115c3b25f2..5fb5545fdf 100644 --- a/docs/feature-flags.md +++ b/docs/feature-flags.md @@ -35,7 +35,7 @@ clients commit to doing the associated clean up work once a feature stabilises. When starting work on a feature, we should create a matching feature flag: 1. Add a new - [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.js) + [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts) of the form: ```js "feature_cats": { @@ -47,17 +47,9 @@ When starting work on a feature, we should create a matching feature flag: ``` 2. Check whether the feature is enabled as appropriate: ```js - SettingsStore.isFeatureEnabled("feature_cats") + SettingsStore.getValue("feature_cats") ``` -3. Add the feature to the set of labs on - [develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json) - and [nightly](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/nightly/config.json): -```json - "features": { - "feature_cats": "labs" - }, -``` -4. Document the feature in the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md) +3. Document the feature in the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md) With these steps completed, the feature is disabled by default, but can be enabled on develop and nightly by interested users for testing. @@ -67,7 +59,7 @@ The following lists a few common options. ## Enabling by default on develop and nightly -Set the feature to `enable` in the +Set the feature to `true` in the [develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json) and [nightly](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/nightly/config.json) @@ -75,34 +67,37 @@ configs: ```json "features": { - "feature_cats": "enable" + "feature_cats": true }, ``` ## Enabling by default on staging, app, and release -Set the feature to `enable` in the +Set the feature to `true` in the [staging / app](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json) and [release](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/release/config.json) configs. -**Warning:** While this does mean the feature is enabled by default for -https://app.element.io and official Element Desktop builds, it will not be enabled by -default for self-hosted installs, custom desktop builds, etc. To cover those -cases as well, the best options at the moment are converting to a regular -setting defaulted on or to remove the flag. Simply enabling the existing flag by -default in `Settings.js` -[does not work currently](https://github.com/vector-im/riot-web/issues/10360). +**Note:** The above will only enable the feature for https://app.element.io and official Element +Desktop builds. It will not be enabled for self-hosted installed, custom desktop builds, etc. To +cover these cases, change the setting's `default` in `Settings.ts` to `true`. ## Feature deployed successfully -Once we're confident that a feature is working well, we should remove the flag: +Once we're confident that a feature is working well, we should remove or convert the flag. -1. Remove the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.js) -2. Remove all `isFeatureEnabled` lines that test for the feature's setting +If the feature is meant to be turned off/on by the user: +1. Remove `isFeature` from the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts) +2. Change the `default` to `true` (if desired). 3. Remove the feature from the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md) -4. Remove feature state from +4. Celebrate! 🥳 + +If the feature is meant to be forced on (non-configurable): +1. Remove the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts) +2. Remove all `getValue` lines that test for the feature. +3. Remove the feature from the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md) +4. If applicable, remove the feature state from [develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json), [nightly](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/nightly/config.json), [staging / app](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json), @@ -110,26 +105,3 @@ Once we're confident that a feature is working well, we should remove the flag: [release](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/release/config.json) configs 5. Celebrate! 🥳 - -## Convert to a regular setting (optional) - -Sometimes we decide a feature should always be user-controllable as a setting -even after it has been fully deployed. In that case, we would craft a new, -regular setting: - -1. Remove the feature flag from - [settings](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.js) - and add a regular setting with the appropriate levels for your feature -2. Replace the `isFeatureEnabled` lines with `getValue` or similar calls - according to the [settings - docs](https://github.com/matrix-org/matrix-react-sdk/blob/develop/docs/settings.md) - (checking carefully, as we may want a different mix of code paths when the - feature is always present but gated by a setting) -3. Remove the feature from the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md) -4. Remove feature state from - [develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json), - [nightly](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/nightly/config.json), - [staging / app](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json), - and - [release](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/release/config.json) - configs From 2c952b422befb635c586e58f1e8690e708a949e0 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 17 Aug 2020 14:02:19 -0600 Subject: [PATCH 3/3] Update config.md for new feature behaviour --- docs/config.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/config.md b/docs/config.md index d342aaf4f2..a9d05d8618 100644 --- a/docs/config.md +++ b/docs/config.md @@ -22,12 +22,12 @@ For a good example, see https://develop.element.io/config.json. `default_hs_url` is specified. When multiple sources are specified, it is unclear which should take priority and therefore the application cannot continue. * As of Element 1.4.0, identity servers are optional. See [Identity servers](#identity-servers) below. -1. `features`: Lookup of optional features that may be `enable`d, `disable`d, or - exposed to the user in the `labs` section of settings. The available - optional experimental features vary from release to release and are [documented](labs.md). The feature flag process is - [documented](feature-flags.md) as well. -1. `showLabsSettings`: Shows the "labs" tab of user settings even when no `features` are enabled - or present. Useful for getting at settings which may be otherwise hidden. +1. `features`: Lookup of optional features that may be force-enabled (`true`) or force-disabled (`false`). + When features are not listed here, their defaults will be used, and users can turn them on/off if `showLabsSettings` + allows them to. The available optional experimental features vary from release to release and are + [documented](labs.md). The feature flag process is [documented](feature-flags.md) as well. +1. `showLabsSettings`: Shows the "labs" tab of user settings. Useful to allow users to turn on experimental features + they might not otherwise have access to. 1. `brand`: String to pass to your homeserver when configuring email notifications, to let the homeserver know what email template to use when talking to you. 1. `branding`: Configures various branding and logo details, such as: