MM-52818 - create config setting to enable/disable playbooks product (#23508)

* create config setting to enable/disable playbooks product

* fix to config name

* fix typo

* revert changes to package-lock.json

* update name of test

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
This commit is contained in:
Scott Bishel
2023-06-05 15:18:20 -06:00
committed by GitHub
parent 3705d7af4d
commit 22275fa0f5
7 changed files with 33 additions and 3 deletions

View File

@@ -607,6 +607,7 @@ const defaultServerConfig: AdminConfig = {
},
ProductSettings: {
EnablePublicSharedBoards: false,
EnablePlaybooks: true,
},
PluginSettings: {
Enable: true,

View File

@@ -88,6 +88,10 @@ func (s *Server) shouldStart(product string) bool {
s.Log().Warn("Skipping Playbooks start: disabled via env var")
return false
}
if !*s.Config().ProductSettings.EnablePlaybooks {
s.Log().Warn("Skipping Playbooks start: disabled via configuration")
return false
}
}
return true

View File

@@ -144,6 +144,8 @@ func GenerateClientConfig(c *model.Config, telemetryID string, license *model.Li
props["AllowSyncedDrafts"] = strconv.FormatBool(*c.ServiceSettings.AllowSyncedDrafts)
props["DelayChannelAutocomplete"] = strconv.FormatBool(*c.ExperimentalSettings.DelayChannelAutocomplete)
props["EnablePlaybooks"] = strconv.FormatBool(*c.ProductSettings.EnablePlaybooks)
if license != nil {
props["ExperimentalEnableAuthenticationTransfer"] = strconv.FormatBool(*c.ServiceSettings.ExperimentalEnableAuthenticationTransfer)

View File

@@ -326,6 +326,20 @@ func TestGetClientConfig(t *testing.T) {
"ExperimentalSharedChannels": "true",
},
},
{
"Default Playbooks Enabled",
&model.Config{
ProductSettings: model.ProductSettings{},
},
"",
&model.License{
Features: &model.Features{},
SkuShortName: "other",
},
map[string]string{
"EnablePlaybooks": "true",
},
},
}
for _, testCase := range testCases {

View File

@@ -2879,6 +2879,7 @@ func (s *CloudSettings) SetDefaults() {
type ProductSettings struct {
EnablePublicSharedBoards *bool
EnablePlaybooks *bool
}
func (s *ProductSettings) SetDefaults(plugins map[string]map[string]any) {
@@ -2889,6 +2890,9 @@ func (s *ProductSettings) SetDefaults(plugins map[string]map[string]any) {
s.EnablePublicSharedBoards = NewBool(false)
}
}
if s.EnablePlaybooks == nil {
s.EnablePlaybooks = NewBool(true)
}
}
type PluginState struct {

View File

@@ -37,8 +37,8 @@ function configureClient() {
function loadRemoteModules() {
/* eslint-disable no-console */
return async (/*dispatch: DispatchFunc, getState: GetStateFunc*/) => {
// const config = getConfig(getState());
return async (dispatch: DispatchFunc, getState: GetStateFunc) => {
const config = getConfig(getState());
/**
* products contains a map of product IDs to a function that will load all of their parts. Calling that
@@ -47,7 +47,7 @@ function loadRemoteModules() {
* Note that these import paths must be statically defined or else they won't be found at runtime. They
* can't be constructed based on the name of a product at runtime.
*/
const products = [
let products = [
{
id: 'boards',
load: () => ({
@@ -65,6 +65,9 @@ function loadRemoteModules() {
}),
},
];
if (config.EnablePlaybooks !== 'true') {
products = products.filter((p) => p.id !== 'playbooks');
}
await Promise.all(products.map(async (product) => {
if (!REMOTE_CONTAINERS[product.id]) {

View File

@@ -82,6 +82,7 @@ export type ClientConfig = {
EnableOAuthServiceProvider: string;
EnableOpenServer: string;
EnableOutgoingWebhooks: string;
EnablePlaybooks: string;
EnablePostIconOverride: string;
EnablePostUsernameOverride: string;
EnablePreviewFeatures: string;
@@ -818,6 +819,7 @@ export type JobSettings = {
export type ProductSettings = {
EnablePublicSharedBoards: boolean;
EnablePlaybooks: boolean;
};
export type PluginSettings = {