From 823b65b3b5c2529774d00274e62e849fc21f322b Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 16 Oct 2023 08:34:35 -0400 Subject: [PATCH] V9.1-documentation (#6647) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update conf.py * [MM-54289] Document pprof metrics in Support Packet (#6674) * Document pprof metrics in support package * Fix paragraph * Update source/manage/common-support-packet.rst * Update source/manage/common-support-packet.rst --------- Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> * Convert group messages to private channels (#6690) * Convert group messages to private channels * Incorporated reviewer feedback * Added new & changed v9.1 config settings (#6686) * Added new & changed v9.1 config settings * Incorporated developer feedback * Update source/configure/plugins-configuration-settings.rst Co-authored-by: Caleb Roseland * Table formatting fix --------- Co-authored-by: Caleb Roseland * Invite user groups using ``/invite`` slash command (#6687) * Invite user groups with invite slash command * Update source/collaborate/built-in-slash-commands.rst * Notification keyword keyboard management (#6692) * v9.1 changelog & docs (#6662) * Update self-managed-changelog.md * Update self-managed-changelog.md * Update self-managed-changelog.md * Update download-latest-tarball.rst * Update open-source-components.rst * Update release-lifecycle.rst * Update important-upgrade-notes.rst * Update self-managed-changelog.md * Update self-managed-changelog.md * Apply suggestions from code review Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> * Update self-managed-changelog.md * Update self-managed-changelog.md * Update self-managed-changelog.md * Update self-managed-changelog.md * Add link * Update self-managed-changelog.md * Add contributors * Update self-managed-changelog.md * Update self-managed-changelog.md * Update self-managed-changelog.md * Update known issues * Update self-managed-changelog.md * Update self-managed-changelog.md * Apply suggestions from code review Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> * Update self-managed-changelog.md * Update self-managed-changelog.md --------- Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> * Contextual shortcut details added (#6696) * Replaced regular log levels for audit-specific levels (#6702) * Replaced regular log levels for audit-specific * Incorporated reviewer feedback * External provider: out of desktop app during login (#6700) * External provider: out of desktop app during login * Incorporated reviewer feedback * Add documentation on GM notifications (#6684) * Update channel-types.rst * Update source/collaborate/channel-types.rst * Update source/collaborate/channel-types.rst * Incorporated reviewer feedback * Incorporated reviewer feedback --------- Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> * Added contextual links between monitoring & alerts (#6705) * Docs listening: Added DB config settings link (#6704) * Added missing redirects reported by community (#6703) * Panes are resizable (#6701) * Panes are resizable * Update source/guides/use-mattermost.rst * Plan/deployment badge update for pprof metrics (#6694) * Added availability & badge tables (#6707) * Added availability & badge tables * updated status and badge images to be higher quality and transparent backgrounds --------- Co-authored-by: Matthew Birtch * Custom user groups can add users to teams (#6699) * Can restore archived custom user groups (#6698) * Channel filter options when browsing channels (#6691) * Can include archived channels in export (#6695) * Can include archived channels in export * Added archived channels flag --------- Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> Co-authored-by: Ben Schumacher Co-authored-by: Caleb Roseland Co-authored-by: Daniel Espino García Co-authored-by: Matthew Birtch --- source/collaborate/access-your-workspace.rst | 3 + source/collaborate/browse-channels.rst | 12 ++- .../collaborate/built-in-slash-commands.rst | 3 +- source/collaborate/channel-types.rst | 10 +- .../collaborate-within-channels.rst | 6 +- source/collaborate/convert-group-messages.rst | 20 ++++ .../collaborate/convert-public-channels.rst | 2 +- source/collaborate/invite-people.rst | 10 +- source/collaborate/keyboard-shortcuts.rst | 3 +- source/collaborate/mention-people.rst | 14 ++- .../organize-using-custom-user-groups.rst | 34 ++++-- source/comply/audit-log.rst | 13 +-- source/conf.py | 8 +- .../plugins-configuration-settings.rst | 18 ++-- .../configure/site-configuration-settings.rst | 43 ++++++++ source/guides/use-mattermost.rst | 6 +- source/images/away.png | Bin 0 -> 2772 bytes source/images/dnd.png | Bin 0 -> 4162 bytes source/images/dot-badge.png | Bin 0 -> 14691 bytes source/images/numbered-badge.png | Bin 0 -> 14293 bytes source/images/offline.png | Bin 0 -> 2985 bytes source/images/online.png | Bin 0 -> 2558 bytes source/install/download-latest-tarball.rst | 2 +- source/install/self-managed-changelog.md | 99 +++++++++++++++++- source/install/trouble_mysql.rst | 3 +- source/manage/cloud-data-export.rst | 2 +- source/manage/common-support-packet.rst | 21 +++- source/manage/mmctl-command-line-tool.rst | 5 +- source/manage/telemetry.rst | 4 +- .../preferences/manage-your-notifications.rst | 18 +++- .../set-your-status-availability.rst | 41 +++++++- source/scale/performance-alerting.rst | 25 +++-- source/scale/performance-monitoring.rst | 8 +- source/upgrade/important-upgrade-notes.rst | 30 ++++++ source/upgrade/open-source-components.rst | 2 + source/upgrade/release-lifecycle.rst | 2 + 36 files changed, 397 insertions(+), 70 deletions(-) create mode 100644 source/collaborate/convert-group-messages.rst create mode 100644 source/images/away.png create mode 100644 source/images/dnd.png create mode 100644 source/images/dot-badge.png create mode 100644 source/images/numbered-badge.png create mode 100644 source/images/offline.png create mode 100644 source/images/online.png diff --git a/source/collaborate/access-your-workspace.rst b/source/collaborate/access-your-workspace.rst index f727bda9bc7..ea01372355c 100644 --- a/source/collaborate/access-your-workspace.rst +++ b/source/collaborate/access-your-workspace.rst @@ -43,6 +43,9 @@ Mattermost is accessible through a URL link. You'll receive a link from your Mat 3. Enter your user credentials to log into Mattermost. 4. The team that displays first in the team sidebar opens. If you're not a member of a team yet, you're prompted to select a team to join. + .. note:: + + When you log into Mattermost using external user credentials, such as Google or Office 365, you'll temporarily leave the desktop app during login while authenticating your credentials. Once you're successfully logged in to Mattermost, you'll be returned to the desktop app. See the `Single Sign-On (SSO) <#single-sign-on-sso>`__ section below for details on the external providers that Mattermosts supports. .. tab:: Mobile diff --git a/source/collaborate/browse-channels.rst b/source/collaborate/browse-channels.rst index d6d0813134b..0f4dfd1be27 100644 --- a/source/collaborate/browse-channels.rst +++ b/source/collaborate/browse-channels.rst @@ -13,15 +13,23 @@ Browse channels 1. Select the **Plus** |plus-icon| icon at the top of the channel sidebar to see all available public channels you can join that you're not already a member of. 2. Select **Browse Channels**. - 3. Search for channels by name or scroll through the list. + 3. Search for channels by name or scroll through the list. 4. Select **Join** next to any channel to become a member of that channel. + .. tip:: + + From Mattermost v9.1, you can filter the list of channels by public, private, or archived channels, and you can hide all channels you're already a member of. + .. tab:: Mobile 1. Tap the **Plus** |plus-icon| icon located in the top right corner of the app to see all available public channels you can join that you're not already a member of. 2. Tap **Browse Channels**. 3. Search for channels by name or filter the list of channels to show only public or archived channels. - 4. Tap a channel to become a member of that channel. + 4. Tap a channel to become a member of that channel. + + .. tip:: + + You can filter the list of channels by public, archived, or shared channels. .. tip:: diff --git a/source/collaborate/built-in-slash-commands.rst b/source/collaborate/built-in-slash-commands.rst index 7c22da110ad..1a44dcd9cdd 100644 --- a/source/collaborate/built-in-slash-commands.rst +++ b/source/collaborate/built-in-slash-commands.rst @@ -18,7 +18,8 @@ The following built-in slash comamnds are available in your Mattermost workspace Invite people ~~~~~~~~~~~~~ -- Invite one person using ``/invite user1`` or ``/invite @user1`` +- Invite one person using ``/invite user1`` or ``/invite @user1``. +- Invite a custom user group using ``/invite @usergroup``. - Invite multiple people using ``/invite @user1 @user2``. - Invite one person to a specific channel using ``/invite @user1 ~channel1``, or ``/invite @user1 channel1``. - Invite multiple people to multiple channels using ``/invite @user1 @user2 ~channel1 ~channel2``. diff --git a/source/collaborate/channel-types.rst b/source/collaborate/channel-types.rst index 32e819156bc..9c27f2105f9 100644 --- a/source/collaborate/channel-types.rst +++ b/source/collaborate/channel-types.rst @@ -29,13 +29,17 @@ Channel members can choose to leave private channels at any time. Direct messages --------------- -Direct messages are channels for conversations between two people. You can also start a direct message with people on other teams when enabled by the System Admin. Only members of the conversation can see direct messages and channel heading information, including last active status of the other user, when enabled. +Direct messages conversations between 2 people. You can start a direct message with people on other teams `when enabled by the system admin `__. Only members of the conversation can see direct messages and channel heading information, including the last active status of the other user. + +Direct messages increment the numbered badge and trigger a notification unless the direct message is muted, or your notifications are disabled. See the `notification documentation `__ for details on customizing notifications based on your preferences. Group messages -------------- -Group messages are channels for conversations among three or more people and up to seven people. You can also start a group message with people on other teams when enabled by the System Admin. Only members of the conversation can see group messages. +Group messages are conversations between 3 to 7 people. You can also start a group message with people on other teams when `enabled by the system admin `__. Only members of the conversation can see group messages. Group messages always display a new message badge. + +From Mattermost v9.1, group messages increment the numbered badge and trigger a notification unless the direct message is muted, or your notifications are disabled. You can control how you're notified about group message conversations by going to **Settings > Notifications**. See the `notification documentation `__ to learn more. .. tip:: - Create a private channel to communicate with more than seven people. + Want to have a group conversation with more than 7 people? You can `create a private channel `__. Alternatively, from Mattermost v9.1, you can `convert the group message to a private channel `__. diff --git a/source/collaborate/collaborate-within-channels.rst b/source/collaborate/collaborate-within-channels.rst index fd2e9835f0c..e5d1df73b87 100644 --- a/source/collaborate/collaborate-within-channels.rst +++ b/source/collaborate/collaborate-within-channels.rst @@ -49,7 +49,8 @@ Learn more about collaborating within Mattermost channels: Communicate a channel's focus and scope Create channels Rename channels - Convert public channels to private + Convert public channels to private channels + Convert group messages to private channels Join and leave channels Make calls in Mattermost Manage channel members @@ -68,7 +69,8 @@ Learn more about collaborating within Mattermost channels: * :doc:`Navigate between channels ` - Learn how to navigate between channels. * :doc:`Create channels ` - Create channels to organize discussion by topic, project, or focus. * :doc:`Rename a channel ` - Rename channels to make them more discoverable. -* :doc:`Convert public channels to private ` - Learn how to convert channel access and visibility. +* :doc:`Convert public channels to private channels ` - Learn how to convert channel access and visibility. +* :doc:`Convert group messages to private channels ` - Learn how to convert group messages to private channels. * :doc:`Manage channel members ` - Add and remove users from channels. * :doc:`Mark channels as favorites ` - Mark commonly visited channels as favorites. * :doc:`Mark channels as unread ` - Mark channels unread to return to messages later. diff --git a/source/collaborate/convert-group-messages.rst b/source/collaborate/convert-group-messages.rst new file mode 100644 index 00000000000..4f646778f03 --- /dev/null +++ b/source/collaborate/convert-group-messages.rst @@ -0,0 +1,20 @@ +Convert group messages to private channels +========================================== + +.. include:: ../_static/badges/allplans-cloud-selfhosted.rst + :start-after: :nosearch: + +You can change the members of your group conversation by converting the group message to a private channel. When a group message is converted to private, its history and membership are preserved. Membership in a private channel remains as invitation only. + +.. note:: + + - Any member of an existing group message, except `guests `__, can convert that group message to a private channel. + - All group message particpants must share at least one team membership. + - You can convert a group message to a private channel using a web browser or the desktop app. + +To convert a group message to a private channel: + +1. Select the group message name at the top of the center pane to access the drop-down menu, then select **Convert to Private Channel**. +2. Specify the team where the new private channel will be created. You're prompted to specify a team when all group message members share more than one team membership. +3. Enter a channel name. +4. Select **Convert to private channel**. \ No newline at end of file diff --git a/source/collaborate/convert-public-channels.rst b/source/collaborate/convert-public-channels.rst index 44d800eed69..d999a8c37eb 100644 --- a/source/collaborate/convert-public-channels.rst +++ b/source/collaborate/convert-public-channels.rst @@ -36,4 +36,4 @@ Convert private channels to public channels Due to potential security concerns with sharing private channel history, only system admins can convert private channels to public channels via **System Console > Channels > Edit (Channel Configuration)**. -Alternatively, System Admins can perform this action using the `mmctl channel modify command `__. \ No newline at end of file +Alternatively, system admins can perform this action using the `mmctl channel modify command `__. \ No newline at end of file diff --git a/source/collaborate/invite-people.rst b/source/collaborate/invite-people.rst index e922357c072..4590032e1e3 100644 --- a/source/collaborate/invite-people.rst +++ b/source/collaborate/invite-people.rst @@ -17,8 +17,14 @@ All users can add existing Mattermost users to a Mattermost team or channel, unl .. tip:: - Add users to a channel by selecting the channel name and selecting **Add Members**. - - Add groups of users to a channel by `creating a custom group `__ and `@mentioning `__ the custom group in a channel. Mattermost will prompt to you to add any users who aren't already members of that channel. - - A guest is a special role that is restricted to only the channels they have been invited to. When guest access is enabled, you can invite guests or users external to the organization, such as vendors or customers. + - Add groups of users to a channel or team by `creating a custom group `__ and `@mentioning `__ the custom group in a channel. + + - Mattermost prompts to you to add any users who aren't already members of that channel to the channel. + - From Mattermost v9.1, you're given the option to add any users who aren't already members of that team to the team, if you have the permissions to do so. + + - A `guest user `__ in Mattermost is a special role that is restricted to only the channels they have been invited to. When `guest access is enabled `__ by the system admin, you can invite guests or users external to the organization, such as vendors or customers. + + - Once guests are invited to the team, you can add them to the channel. Send a direct invite ~~~~~~~~~~~~~~~~~~~~ diff --git a/source/collaborate/keyboard-shortcuts.rst b/source/collaborate/keyboard-shortcuts.rst index bdc9cf47c85..af31e35056e 100644 --- a/source/collaborate/keyboard-shortcuts.rst +++ b/source/collaborate/keyboard-shortcuts.rst @@ -42,7 +42,8 @@ The following keyboard shortcuts for channels are supported in all `supported br +-------------------------------------+------------------------------+----------------------------------------------------------------------------------+ | :kbd:`Alt` + select channel | :kbd:`⌥` + select channel | Mark the last post in the channel as unread. | +-------------------------------------+------------------------------+----------------------------------------------------------------------------------+ -| :kbd:`Ctrl` :kbd:`K` | :kbd:`⌘` :kbd:`K` | Open the **Find Channels** dialog. | +| :kbd:`Ctrl` :kbd:`K` | :kbd:`⌘` :kbd:`K` | - If text isn't selected: Open the **Find Channels** dialog. | +| | | - If text is selected: Create a hyperlink in the format ``[linktext](URL)``. | +-------------------------------------+------------------------------+----------------------------------------------------------------------------------+ | :kbd:`Ctrl` :kbd:`Shift` :kbd:`K` | :kbd:`⌘` :kbd:`⇧` :kbd:`K` | Open the **Direct Messages** dialog. | +-------------------------------------+------------------------------+----------------------------------------------------------------------------------+ diff --git a/source/collaborate/mention-people.rst b/source/collaborate/mention-people.rst index e6e2405c585..d78ed64f874 100644 --- a/source/collaborate/mention-people.rst +++ b/source/collaborate/mention-people.rst @@ -11,6 +11,7 @@ When you want to get the attention of specific Mattermost users, you can use @me - `@all <#channel-and-all>`__ - `@here <#here>`__ - `@groupname <#groupname>`__ +- `@customusergroupname <#customusergroupname>`__ .. note:: @@ -85,6 +86,17 @@ As with ``@username`` mentions, use *@* to bring up a list of groups that can be @dev-managers great work hitting all of our code coverage goals this quarter! +@customusergroupname +-------------------- + +.. include:: ../_static/badges/ent-pro-only.rst + :start-after: :nosearch: + +You can add groups of users to a channel or team by `creating a custom group `__ and @mentioning that custom group in a channel. + +- Mattermost prompts to you to add any users who aren't already members of that channel to the channel. +- From Mattermost v9.1, you're given the option to add any users who aren't already members of that team to the team, if you have the permissions to do so. + Words that trigger mentions --------------------------- @@ -107,7 +119,7 @@ Select **Jump** next to a search result in the right-hand sidebar to jump the ce Confirmation dialog warnings ---------------------------- -When your system admin has configured Mattermost to require confirmations for @messages, you must confirm any mention that will trigger notifications for more than five users before sending the notification. +When your system admin has configured Mattermost to require confirmations for @mentions, you must confirm any mention that will trigger notifications for more than five users before sending the notification. This confirmation dialog only appears when your system admin has configured this setting in the System Console. See our `configuration settings `__ product documentation for details. This configuration setting is supported on the Mattermost Mobile App (from v1.34) if the `AD/LDAP groups `__ feature is enabled. diff --git a/source/collaborate/organize-using-custom-user-groups.rst b/source/collaborate/organize-using-custom-user-groups.rst index adbb4f27267..3c352052c83 100644 --- a/source/collaborate/organize-using-custom-user-groups.rst +++ b/source/collaborate/organize-using-custom-user-groups.rst @@ -4,13 +4,19 @@ Manage custom groups (beta) .. include:: ../_static/badges/ent-pro-cloud-selfhosted.rst :start-after: :nosearch: +.. |more-icon-vertical| image:: ../images/dots-vertical_F01D9.svg + :alt: Use the More icon in the top left corner to access Mattermost desktop apps customization settings. + +.. |plus| image:: ../images/plus_F0415.svg + :alt: The Plus icon provides access to channel and direct message functionality. + *Not available in legacy Enterprise Edition E10/E20* Custom groups (beta) reduce noise and improve focus by notifying the right people in a channel at the right time, while maintaining transparency for all members in that channel. Custom user groups let you notify up to 256 users at a time rather than notifying users individually. For example, perhaps you want to @mention a cross-functional team about a bug fixes needed for an upcoming feature release, without notifying everyone else in the channel. Using a custom group notifies the cross-functional team immediately, while keeping important stakeholders in the loop on the status of the feature release. -Or perhaps you want to add a group of users to a channel. When you @mention a custom group in a channel, Mattermost prompts you to add anyone from that custom group who isn't already a channel member. +Or perhaps you want to add a group of users to a team and a channel. When you @mention a custom group in a channel, Mattermost prompts you to add anyone from that custom group who isn't already a channel and team member. See the `invite people to your workspace `__ documentation for details. Once a custom user group has been created, you can mention that group the same way you @mention another Mattermost member. See the `mention people in messages `__ documentation for details. @@ -23,7 +29,7 @@ Once a custom user group has been created, you can mention that group the same w Create a custom group --------------------- -1. Using Mattermost in a web browser or the desktop app, select **+** from the top of the channel sidebar, then select **Create New User Group**. +1. Using Mattermost in a web browser or the desktop app, select |plus| at the top of the channel sidebar, then select **Create New User Group**. 2. Specify a name and mention. The mention is the handle you use to @mention a notification to the group. Group names must be unique across the Mattermost workspace. If a name is in use as a channel name, display name, or another custom group's name, it won't be available. @@ -47,17 +53,21 @@ To manage a custom user group in a web browser or the desktop app, select **User Review available groups ~~~~~~~~~~~~~~~~~~~~~~~ -Review a list of all available custom user groups, search for specific groups by name, or filter the list of groups to display only groups you're a member of. +Review a list of all available custom user groups, search for specific groups by name. + +.. tip:: + + You can filter the list of groups to display only groups you're a member of, or only archived groups. Change name or mention ~~~~~~~~~~~~~~~~~~~~~~ -1. From the **More Actions** icon to the right of any custom group, select **View Group**. +1. From the **More Actions** |more-icon-vertical| icon to the right of any custom group, select **View Group**. .. image:: ../images/manage-user-groups.png :alt: Access tools to manage your custom user groups. -2. From the **More Actions** icon, select **Edit Details**. +2. From the **More Actions** |more-icon-vertical| icon, select **Edit Details**. .. image:: ../images/edit-custom-group.png :alt: Edit details of a custom user group. @@ -75,12 +85,22 @@ Remove people Hover over a member, then select the **Trash** icon to remove them from the group. +Join a group +~~~~~~~~~~~~ + +While viewing the members of a group, from the **More Actions** |more-icon-vertical| icon, select **Join Group**. + Leave a group ~~~~~~~~~~~~~ -From the **More Actions** icon, select **Leave Group**. +From the **More Actions** |more-icon-vertical| icon, select **Leave Group**. Archive group ~~~~~~~~~~~~~ -From the **More Actions** icon, select **Archive Group**. When you archive a custom user group, you won’t be able to mention the group’s handle or view its members. However, the group isn't deleted from the list, and all members remain in the group unless manually removed. \ No newline at end of file +From the **More Actions** |more-icon-vertical| icon, select **Archive Group**. When you archive a custom user group, you won’t be able to mention the group’s handle or view its members. However, the group isn't deleted from the list, and all members remain in the group unless they're manually removed. + +Unarchive group +~~~~~~~~~~~~~~~ + +From Mattermost v9.1, you can restore an archived group. From the **More Actions** |more-icon-vertical| icon, filter the list of groups to show only archived groups. Select an archived group view details about the group, if preferreed, and then select **Restore Group**. \ No newline at end of file diff --git a/source/comply/audit-log.rst b/source/comply/audit-log.rst index b22fedd26d9..9e9947cf7a6 100644 --- a/source/comply/audit-log.rst +++ b/source/comply/audit-log.rst @@ -77,7 +77,6 @@ Examples of values for the ``AdvancedLoggingJSON`` setting are: } } - 2. Multi-line JSON in the ``config.json`` file: .. code-block:: json @@ -87,16 +86,14 @@ Examples of values for the ``AdvancedLoggingJSON`` setting are: "Type": "file", "Format": "plain", "Levels": [ - {"ID": 5, "Name": "debug", "Stacktrace": false}, - {"ID": 4, "Name": "info", "Stacktrace": false}, - {"ID": 3, "Name": "warn", "Stacktrace": false}, - {"ID": 2, "Name": "error", "Stacktrace": true}, - {"ID": 1, "Name": "fatal", "Stacktrace": true}, - {"ID": 0, "Name": "panic", "Stacktrace": true} + { "id": 100, "name": "audit-api" }, + { "id": 101, "name": "audit-content" }, + { "id": 102, "name": "audit-permissions" }, + { "id": 103, "name": "audit-cli" } ], "Options": { "Compress": true, - "Filename": "mattermost_logr.log", + "Filename": "audit.log", "MaxAgeDays": 1, "MaxBackups": 10, "MaxSizeMB": 500 diff --git a/source/conf.py b/source/conf.py index 04c5858a99a..53c7d876849 100644 --- a/source/conf.py +++ b/source/conf.py @@ -132,6 +132,8 @@ def setup(_: Sphinx): "https://docs.mattermost.com/manage/mmctl-command-line-tool.html#mmctl-group-channel-disable", "administration/command-line-tools.html#mattermost-ldap-idmigrate": "https://docs.mattermost.com/manage/mmctl-command-line-tool.html#mmctl-ldap-idmigrate", +"administration/command-line-tools.html#platform-channel-move": + "https://docs.mattermost.com/manage/mmctl-command-line-tool.html#mmctl-channel-move", "administration/compliance.html": "https://docs.mattermost.com/comply/compliance-monitoring.html", "administration/compliance-export.html": @@ -1951,6 +1953,8 @@ def setup(_: Sphinx): "https://docs.mattermost.com/guides/deployment.html", "getting-started/welcome_email.html": "https://docs.mattermost.com/getting-started/welcome-email-to-end-users.html", +"getting-started/organizing-conversations.html": + "https://docs.mattermost.com/collaborate/organize-conversations.html", # Guides redirects "guides/administrator.html": @@ -3243,9 +3247,9 @@ def setup(_: Sphinx): # built documents. # # The short X.Y version. -# version = '9.0' +# version = '9.1' # The full version, including alpha/beta/rc tags. -# release = '9.0' +# release = '9.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/source/configure/plugins-configuration-settings.rst b/source/configure/plugins-configuration-settings.rst index a3e5a2f1262..c8b64362626 100644 --- a/source/configure/plugins-configuration-settings.rst +++ b/source/configure/plugins-configuration-settings.rst @@ -118,19 +118,23 @@ Enable Marketplace :configjson: .PluginSettings.EnableRemoteMarketplace :environment: MM_PLUGINSETTINGS_ENABLEREMOTEMARKETPLACE - - **true**: Mattermost attempts to connect to the endpoint set in MarketplaceURL. - - **false**: **(Default)** Mattermost does not attempt to connect to a remote Marketplace, and will show only pre-packaged and installed plugins. + - **true**: **(Default)** Mattermost attempts to connect to the endpoint set in MarketplaceURL. + - **false**: Mattermost doesn't attempt to connect to a remote Marketplace, and shows only pre-packaged and installed plugins. Enable remote Marketplace ~~~~~~~~~~~~~~~~~~~~~~~~~ +-------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------+ -| - **true**: Mattermost attempts to connect to the endpoint set in **Marketplace URL**. | - System Config path: **Plugins > Plugin Management** | -| If the connection fails, an error is displayed, and the Marketplace only shows pre-packaged and installed plugins. | - ``config.json`` setting: ``.PluginSettings.EnableRemoteMarketplace: false`` | -| - **false**: **(Default)** Mattermost does not attempt to connect to a remote Marketplace. | - Environment variable: ``MM_PLUGINSETTINGS_ENABLEREMOTEMARKETPLACE`` | -| The Marketplace will only show pre-packaged and installed plugins. Use this setting if your Mattermost server cannot connect to the Internet. | | +| - **true**: **(Default)** Mattermost attempts to connect to the endpoint set in **Marketplace URL**. | - System Config path: **Plugins > Plugin Management** | +| If the connection fails, an error is displayed, and the Marketplace only shows pre-packaged and installed plugins. | - ``config.json`` setting: ``.PluginSettings.EnableRemoteMarketplace: true`` | +| - **false**: Mattermost does not attempt to connect to a remote Marketplace. | - Environment variable: ``MM_PLUGINSETTINGS_ENABLEREMOTEMARKETPLACE`` | +| The Marketplace shows only pre-packaged and installed plugins. Use this setting if your Mattermost server cannot connect to the Internet. | | +-------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------+ -| **Note**: To connect to a remote Marketplace, **Enable Marketplace** must be **true**, and each Mattermost host must have network access to the endpoint set in **Marketplace URL**. | +| **Notes**: | +| | +| - From Mattermost v9.1, set this configuration setting value to ``true`` to access a configured remote marketplace URL. | +| - For Mattermost v9.0, the ``MM_FEATUREFLAGS_STREAMLINEDMARKETPLACE`` feature flag must be set to ``false``, and this configuration setting must be set to ``true`` to access a configured remote marketplace URL. | +| - Each Mattermost host must have network access to the endpoint set in MarketplaceURL. | +-------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------+ .. config:setting:: plugins-marketplaceurl diff --git a/source/configure/site-configuration-settings.rst b/source/configure/site-configuration-settings.rst index 900aea156be..a775efb36d6 100644 --- a/source/configure/site-configuration-settings.rst +++ b/source/configure/site-configuration-settings.rst @@ -455,6 +455,30 @@ Max channels per team | for Cloud deployments. | | +---------------------------------------------------------------------------------------+-----------------------------------------------------------------------+ +.. config:setting:: users-enablejoinleavemessages + :displayname: Enable join/leave messages by default (Users and teams) + :systemconsole: Site Configuration > Users and teams + :configjson: .TeamSettings.EnableJoinLeaveMessageByDefault + :environment: MM_TEAMSETTINGS_ENABLEJOINLEAVEMESSAGEBYDEFAULT + :description: Specify the default configuration of system messages displayed when users join or leave channels. + + - **true**: **(Default)** Join/Leave messages are displayed. + - **false**: Join/Leave messages are hidden. + +Enable join/leave messages by default +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ++---------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ +| Specify the default configuration of system messages displayed when users | - System Config path: **Site Configuration > Users and teams** | +| join or leave channels. | - ``config.json`` setting: ``.TeamSettings.EnableJoinLeaveMessageByDefault: true`` | +| | - Environment variable: ``MM_TEAMSETTINGS_ENABLEJOINLEAVEMESSAGEBYDEFAULT`` | +| - **true**: **(Default)** Join/Leave messages are displayed. | | +| - **false**: Join/Leave messages are hidden. | | +| | | +| Users can override this default by going to **Settings > Advanced > | | +| Enable Join/Leave Messages**. | | ++---------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ + .. config:setting:: users-restrictdirectmessage :displayname: Enable users to open direct message channels with (Users and teams) :systemconsole: Site Configuration > Users and teams @@ -1323,6 +1347,25 @@ Custom URL schemes | ``config.json`` setting: an array of strings | - Environment variable: ``MM_DISPLAYSETTINGS_CUSTOMURLSCHEMES`` | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------+ +.. config:setting:: posts-maxmarkdownnodes + :displayname: Maximum Markdown nodes (Posts) + :systemconsole: Site Configuration > Posts + :configjson: .DisplaySettings.MaxMarkdownNodes + :environment: MM_DISPLAYSETTINGS_MAXMARKDOWNNODES + :description: The maximum number of Markdown elements that can be included in a single piece of text in a message. Default is 0 which applies a Mattermost-specified limit. + +Maximum Markdown nodes +~~~~~~~~~~~~~~~~~~~~~~ + ++-------------------------------------------------------------+-----------------------------------------------------------------------+ +| The maximum number of Markdown elements (such as emojis, | - System Config path: **Site Configuration > Posts** | +| links, or table cells), that can be included in a single | - ``config.json`` setting: ``.DisplaySettings.MaxMarkdownNodes: 0`` | +| piece of text in a message. | - Environment variable: ``MM_DISPLAYSETTINGS_MAXMARKDOWNNODES`` | +| | | +| Numerical input. Default is **0** which applies a | | +| Mattermost-specified limit. | | ++-------------------------------------------------------------+-----------------------------------------------------------------------+ + .. config:setting:: posts-googleapikey :displayname: Google API key (Posts) :systemconsole: Site Configuration > Posts diff --git a/source/guides/use-mattermost.rst b/source/guides/use-mattermost.rst index 726e604eb7b..be0e82767b8 100644 --- a/source/guides/use-mattermost.rst +++ b/source/guides/use-mattermost.rst @@ -20,4 +20,8 @@ This Mattermost end user documentation is designed for anyone looking to connect * :doc:`Customize your preferences ` - Learn how to make Mattermost match the way you prefer to work. .. image:: ../images/Channels_Hero.png - :alt: An example of the Mattermost screen that includes teams, the channel sidebar, an active conversation in the center pane, reply threads in the right-hand pane. \ No newline at end of file + :alt: An example of the Mattermost screen that includes teams, the channel sidebar, an active conversation in the center pane, reply threads in the right-hand pane. + +.. tip:: + + From Mattermost v9.1, when using Mattermost in a browser or the desktop app, you can resize both the channel sidebar and right-hand sidebar panes! \ No newline at end of file diff --git a/source/images/away.png b/source/images/away.png new file mode 100644 index 0000000000000000000000000000000000000000..10ac04ae3240ce8fb7e02d395a40e6c3cca50758 GIT binary patch literal 2772 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 aP<{rbk~CBD1#i~?0000 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 DZy$Ui literal 0 HcmV?d00001 diff --git a/source/images/offline.png b/source/images/offline.png new file mode 100644 index 0000000000000000000000000000000000000000..07458cef0d5a8245dbafe1487d6ba0f10ae1e2d5 GIT binary patch literal 2985 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 f!!QiP96|mMGcw+&k00000NkvXXu0mjf#`Bra literal 0 HcmV?d00001 diff --git a/source/images/online.png b/source/images/online.png new file mode 100644 index 0000000000000000000000000000000000000000..1f0d8fd5eeb7bbe3015f5a177cfcf15e754f82d4 GIT binary patch literal 2558 zcmVGwzuJ~ARdh*x4UJjaRlfN~`cy-mYwaHazWZ+ZPc8&O5He&aL9_R_ z%D$ynNvPIH#HNuBkBWPxvH5;^-Gd+q!jKFkX!c%h+W+#_U$n*=vSC+*O%Q}(NiAse z|K55=LRK5VBI|{xl&&2=+;{~+5QG8fThQ1ltKYu$f}U29BT8ZW_~H7u5ClO;Nne6y zT+G|QIHXwFEJgq)5Uh`v3+_to9D*PSePZ=<(kR7@;rHVAWFdth2tuDs^*UkxyR8>G z=!P*;jHprKfu4%{nG?2M;m_6lX}GTALJ%gLL_wR|->PPq$xIEu_uT8}AHILIv5g6b z#Dj%{OPLD0(jJM(SY2ve0>?yc1YKxm;>YYq6@DoDmlQKqI6HppNU}yKJY8dG+{di0 zaEO);vLi>~y!6w>%p}IsNW^TvgbFqCV{~pukBY0lz^41!@i1cUFID*SwYeTgZ=IQz zWBlDX2#@QFI_|u8M_)%lNJG~cS{CX&(OUcd4E-3 z;cR}fQp9^KM^AoPgzthN^q`}lv2{k4(JDrP#w#jM5>Fx5^S4~534mO+G6~rUJvBZX z-P^eab`;&Cs^cz|8S@CN(Ef%Srxa@UA5>04*L3VqeKnO$s{bj~^_9ffgh`-d3@xSM?2 zlh$R;>N>*bMF*GDvXLiU#BA>M7Q36(!!>I()p*9NN^Ek z6>YZC+J3wwS~_scJt{LMUU!9;8nGWeQwkpDA5^xjYs#PwAZ)%e8SrgonOLeui#6{D zTWg9%T;nCx_bJyq6l1%!K6Gy$#X@(F51h@U_YH+C={jdrnN8_NB6On7)o}F|miP;Ie;dI`&fmyRjyTbE z<`yes>+~%YlXeRY{S9-{K}x?rOC%dHMh>W%6n3{JDHh@3~0zapMO}wp3x41n6nBuU>B#YZ7Qh`OZV&eVf#TPvPjF|ua`1$zqV_!sF5rFgAe>Y+%+v3 zVIfXxL5svJ+D;U;EX7Q?0eucfJILET?~TJIF#raj|nA#%6Y?n^|=@e|T_9qXE80>gC>8^E5mCY4 z>NoN0kmXhGc=8qaTidYI$@=^i1Rf z+nAZnQWo(v&%AEf6QVyfny=iz9}EVP3eju3{1yv8`}4Gkb+L4mP0nvMSxTxjPHG@}H zN5QeKu^k(7RPATHVK}=jx0fC6az3|#*X|pKV}>r8e_GY~rOGMlP7?fx0IU6tCcO6|sNa;{_ZvzfNjID;U>=sNU?S6TAwdh9}?l&(#J zbry$3?dZS>W|>He{RK$`*UV7y)>+9>%!ck~HVVQ4=qEgbuUT)Q>ApwH|3#LpX*Zr1 z4T2D(XQqo>&+W9XXI5xm@4Wl{#u`2W%%Z-rAv?G>nM@BtS3(!FwcQG_rm0X&dJ3Ao zSDW^4-#XM7?ds_Y`tp)Dt}N;Pa9; z>qutS`ID`((oYvNB4&ah48u_4`Rx6zvRP$4SWmN@=Cy2*X&*b+6Vho`5QO5B*#Ko; z1Q_sb1k2z}-&kx#nPtt+wZf@Y*B^YPoI(#Y7X(2N1VIo4K@bE%5ClOGginy40prvf U`{XmfWdHyG07*qoM6N<$f-Aw`TL1t6 literal 0 HcmV?d00001 diff --git a/source/install/download-latest-tarball.rst b/source/install/download-latest-tarball.rst index bda412a798c..daa0791b2b8 100644 --- a/source/install/download-latest-tarball.rst +++ b/source/install/download-latest-tarball.rst @@ -15,7 +15,7 @@ Using ``wget``, download the Mattermost Server release you want to install.
- wget https://releases.mattermost.com/9.0.1/mattermost-9.0.1-linux-amd64.tar.gz + wget https://releases.mattermost.com/9.1.0/mattermost-9.1.0-linux-amd64.tar.gz Copied to clipboard
diff --git a/source/install/self-managed-changelog.md b/source/install/self-managed-changelog.md index c2894458b0c..82ab2385254 100644 --- a/source/install/self-managed-changelog.md +++ b/source/install/self-managed-changelog.md @@ -6,12 +6,109 @@ See the [changelog in progress](https://bit.ly/2nK3cVf) for the upcoming release Latest Mattermost Releases: +- [Release v9.1 - Feature Release](#release-v9-1-feature-release) - [Release v9.0 - Major Release](#release-v9-0-major-release) - [Release v8.1 - Extended Support Release](#release-v8-1-extended-support-release) - [Release v8.0 - Major Release](#release-v8-0-major-release) -- [Release v7.10 - Feature Release](#release-v7-10-feature-release) - [Release v7.8 - Extended Support Release](#release-v7-8-extended-support-release) +## Release v9.1 - [Feature Release](https://docs.mattermost.com/upgrade/release-definitions.html#feature-release) + +**Release day: October 16, 2023** + +### Important Upgrade Notes + - Improved performance on data retention ``DeleteOrphanedRows`` queries. See the [Important Upgrade Notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html) for notes on a new migration that was added. Removed feature flag ``DataRetentionConcurrencyEnabled``. Data retention now runs without concurrency in order to avoid any performance degradation. Added a new configuration setting ``DataRetentionSettings.RetentionIdsBatchSize``, which allows admins to to configure how many batches of IDs will be fetched at a time when deleting orphaned reactions. The default value is 100. + +**IMPORTANT:** If you upgrade from a release earlier than v9.0, please read the other [Important Upgrade Notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html). + +### Compatibility + - Updated Chromium minimum supported version to 116+. + +### Improvements + +#### User Interface (UI) + - Added a **Cancel** button to the **Delete category** modal. + - Added the ability to resize the channel sidebar and right-hand sidebar. + - Added two new filtering options (show all channel types and show private channels) to the **Browse channels** modal. + - Pre-packaged GitLab plugin version [v1.7.0](https://github.com/mattermost/mattermost-plugin-gitlab/releases/tag/v1.7.0). + - Pre-packaged Calls plugin version [v0.20.0](https://github.com/mattermost/mattermost-plugin-calls/releases/tag/v0.20.0). + - Pre-packaged Playbooks version [v1.39.0](https://github.com/mattermost/mattermost-plugin-playbooks/releases/tag/v1.39.0). + - Added additional reaction options when viewing threads or messages when the sidebar is larger than its minimum width. + - Added a link to [notification documentation](https://docs.mattermost.com/preferences/manage-your-notifications.html) in the **Notification Settings** modal. + - Updated the post textbox measurement code to be more reliable. + - The ``/invite`` slash command now supports custom user groups. + - Re-enabled the remote marketplace functionality, when configured as per ``PluginSettings.EnableRemoteMarketplace`` [documentation](https://docs.mattermost.com/configure/plugins-configuration-settings.html#plugins-enableremotemarketplace). + - Added the ability to convert a group message to a private channel. + - Group messages (GMs) now behave like direct messages (DMs). The badge count increases for every new message. + +#### Administration + - Added ``mattermost-plugin-api`` into the ``mattermost`` GitHub repository. + - Updated the public server module version to v0.0.9. + - Added 2 new URL parameters to ``GET /api/v4/groups``: ``include_archived`` and ``filter_archived``. Added the ability to restore archived groups from the user groups modal. + - Added file storage information to the support package. + - A ``user_id`` is now included in all HTTP logs (debug level) to help determine who is generating unexpected traffic. + - Added new URL parameter to ``GET /api/v4/groups`` and ``GET /api/v4/groups/:group_id``. ``include_member_ids`` will add all the members ``user_ids`` to the group response objects. You can now also add group members to a channel, any members that are not part of the team can be added to the team through this flow and subsequently added the channel. + +#### Plugin Changes + - Added new frontend plugin extension point for the new messages separator bar. + - Added a new plugin extensibility point to add actions to the code blocks. + - Added the plugin hook ``UserHasBeenDeactivated``. + - Added a new server side plugin API method to set the searchable content for file info (``SetFileSearchableContent``). The ``MessageHasBeenPosted`` plugin hook is now executed after the attachments are linked to the post. + +### Bug Fixes + - Fixed keyboard support for the left-hand side channel menu, the left-hand side category menu, and the post dot menu. + - Fixed display name in the ``comment_on`` component. + - Fixed an issue with keyboard support for some menus with submenus. + - Fixed an issue with disappearing punctuation when following a group mention. + - Fixed an issue where compliance export jobs were not able to start after disabling and enabling the compliance export. + - Fixed a potential read after write issue when loading a license. + - Fixed the API to block any changes to direct and group messages names, display name, or purpose. + +### config.json +Multiple setting options were added to ``config.json``. Below is a list of the additions and their default values on install. The settings can be modified in ``config.json``, or the System Console when available. + +#### Changes to all plans: + - Removed ``ServiceSettingsDefaultGfycatAPISecret`` and ``ServiceSettingsDefaultGfycatAPIKey`` configuration settings. + - Under ``TeamSettings`` in ``config.json``: + - Added a new config setting ``EnableJoinLeaveMessageByDefault`` that sets the default value for ``UserSetting``, ``ADVANCED_FILTER_JOIN_LEAVE``. + - Under ``DisplaySettings`` in ``config.json``: + - Added a setting ``MaxMarkdownNodes`` to limit the maximum complexity of markdown text on mobile. + + #### Changes to Enterprise plan: + - Under ``DataRetentionSettings`` in ``config.json``: + - Added a new configuration setting ``RetentionIdsBatchSize``, which allows admins to to configure how many batches of IDs will be fetched at a time when deleting orphaned reactions. The default value is 100. + +### API Changes + - Added the ``X-Forwarded-For`` request header to the audit stream for all Rest API calls. + - Added API endpoint ``POST /api/v4/user/login/desktop_login``. Modified OAuth/SAML flows to include ``desktop_login`` where applicable. + - Added new API endpoint ``GET`` ``/api/v4/channels//common_teams`` to fetch list of teams common between members of a group message. + - Added new API endpoint ``POST`` ``/api/v4/channels//convert_to_channel`` to convert a group message to a private channel. + - Added a new ``MessageHasBeenDeleted`` hook to the plugin API. + - Moved the ``request`` package into the public shared folder. + +### Go Version + - v9.1 is built with Go ``v1.20.7``. + +### Known Issues + - LDAP mmctl commands are failing [MM-54929](https://mattermost.atlassian.net/browse/MM-54929). + - Converting a group message to a channel should show an error "A channel with that name already exists on the same team" for duplicate channel names [MM-54713](https://mattermost.atlassian.net/browse/MM-54713). + - Marking a group message as unread doesn't resurface the numbered notification badge [MM-54778](https://mattermost.atlassian.net/browse/MM-54778). + - Thread/posts jump when switching to and from preview mode [MM-54758](https://mattermost.atlassian.net/browse/MM-54758). + - Desktop UI doesn't show all content when the right-hand side thread is opened [MM-54696](https://mattermost.atlassian.net/browse/MM-54696). + - Left-hand side resize option overrides the **Browse/Create Channel** menu if To-Do plugin is installed [MM-54367](https://mattermost.atlassian.net/browse/MM-54367). + - Copy pasting images from Chrome fails [MM-54486](https://mattermost.atlassian.net/browse/MM-54486). + - Adding an @mention at the start of a post draft and pressing the left or right arrow key can clear the post draft and the undo history [MM-33823](https://mattermost.atlassian.net/browse/MM-33823). + - Status may sometimes get stuck as **Away** or **Offline** in High Availability mode with IP Hash turned off. + - Searching stop words in quotation marks with Elasticsearch enabled returns more than just the searched terms. + - Slack import through the CLI fails if email notifications are enabled. + - Push notifications don't always clear on iOS when running Mattermost in High Availability mode. + - The Playbooks left-hand sidebar doesn't update when a user is added to a run or playbook without a refresh. + - If a user isn't a member of a configured broadcast channel, posting a status update might fail without any error feedback. As a temporary workaround, join the configured broadcast channels, or remove those channels from the run configuration. + - The Playbooks left-hand sidebar does not update when a user is added to a run or playbook without a refresh. + +### Contributors + - [abhinav700](https://github.com/abhinav700), [agarciamontoro](https://github.com/agarciamontoro), [agnivade](https://github.com/agnivade), [alexdecamillo](https://github.com/alexdecamillo), [amyblais](https://github.com/amyblais), [andrleite](https://github.com/andrleite), [angeloskyratzakos](https://github.com/angeloskyratzakos), [asaadmahmood](https://github.com/asaadmahmood), [AsisRout](https://github.com/AsisRout), [ayusht2810](https://github.com/ayusht2810), [azigler](https://github.com/azigler), [BenCookie95](https://github.com/BenCookie95), [calebroseland](https://github.com/calebroseland), [cedarice](https://translate.mattermost.com/user/cedarice), [coltoneshaw](https://github.com/coltoneshaw), [cpoile](https://github.com/cpoile), [Crere89](https://translate.mattermost.com/user/Crere89), [crspeller](https://github.com/crspeller), [ctlaltdieliet](https://translate.mattermost.com/user/ctlaltdieliet), [cwarnermm](https://github.com/cwarnermm), [deivisonrpg](https://github.com/deivisonrpg), [devinbinnie](https://github.com/devinbinnie), [djanda97](https://github.com/djanda97), [Eleferen](https://translate.mattermost.com/user/Eleferen), [emdecr](https://github.com/emdecr), [enahum](https://github.com/enahum), [esethna](https://github.com/esethna), [fmartingr](https://github.com/fmartingr), [FokinAleksandr](https://github.com/FokinAleksandr), [gabrieljackson](https://github.com/gabrieljackson), [hanzei](https://github.com/hanzei), [harshilsharma63](https://github.com/harshilsharma63), [hibou.sage](https://translate.mattermost.com/user/hibou.sage), [hmhealey](https://github.com/hmhealey), [homerCOD](https://translate.mattermost.com/user/homerCOD), [ialorro](https://github.com/ialorro), [ifoukarakis](https://github.com/ifoukarakis), [intdev32](https://github.com/intdev32), [IronOnet](https://github.com/IronOnet), [isacikgoz](https://github.com/isacikgoz), [jasonblais](https://github.com/jasonblais), [jespino](https://github.com/jespino), [johnsonbrothers](https://github.com/johnsonbrothers), [jprusch](https://github.com/jprusch), [kaakaa](https://github.com/kaakaa), [kayazeren](https://github.com/kayazeren), [Kshitij-Katiyar](https://github.com/Kshitij-Katiyar), [kyeongsoosoo](https://github.com/kyeongsoosoo), [larkox](https://github.com/larkox), [lieut-data](https://github.com/lieut-data), [LimJiAn](https://github.com/LimJiAn), [limod](https://github.com/limod), [linkvn](https://github.com/linkvn), [M-ZubairAhmed](https://github.com/M-ZubairAhmed), [majo](https://translate.mattermost.com/user/majo), [manojmalik20](https://github.com/manojmalik20), [marie0394](https://translate.mattermost.com/user/marie0394), [maruTA-bis5](https://github.com/maruTA-bis5), [master7](https://translate.mattermost.com/user/master7), [matt-w99](https://github.com/matt-w99), [matthew-w](https://translate.mattermost.com/user/matthew-w), [matthewbirtch](https://github.com/matthewbirtch), [mickmister](https://github.com/mickmister), [milotype](https://translate.mattermost.com/user/milotype), [MohammedElansary-dev](https://translate.mattermost.com/user/MohammedElansary-dev), [mornaistar](https://github.com/mornaistar), [mt26691](https://translate.mattermost.com/user/mt26691), [mvitale1989](https://github.com/mvitale1989), [Navystack](https://translate.mattermost.com/user/Navystack), [nickmisasi](https://github.com/nickmisasi), [pvev](https://github.com/pvev), [RayYH](https://github.com/RayYH), [saturninoabril](https://github.com/saturninoabril), [sbishel](https://github.com/sbishel), [Sharuru](https://github.com/Sharuru), [sinansonmez](https://github.com/sinansonmez), [speedhs](https://github.com/speedhs), [sri-byte](https://github.com/sri-byte), [stafot](https://github.com/stafot), [streamer45](https://github.com/streamer45), [stylianosrigas](https://github.com/stylianosrigas), [teamzamong](https://github.com/teamzamong), [TheRealJoeFriel](https://github.com/TheRealJoeFriel), [ThrRip](https://github.com/ThrRip), [timmycheng](https://github.com/timmycheng), [toninis](https://github.com/toninis), [varghese.jose](https://github.com/varghesejose2020), [wiersgallak](https://github.com/wiersgallak), [wiggin77](https://github.com/wiggin77), [y4aniv](https://github.com/y4aniv), [yasserfaraazkhan](https://github.com/yasserfaraazkhan) + ## Release v9.0 - [Major Release](https://docs.mattermost.com/upgrade/release-definitions.html#major-release) - **9.0.1, released 2023-10-06** diff --git a/source/install/trouble_mysql.rst b/source/install/trouble_mysql.rst index b65b4804039..83af6747c74 100644 --- a/source/install/trouble_mysql.rst +++ b/source/install/trouble_mysql.rst @@ -8,7 +8,8 @@ Before you can run the Mattermost server, you must first install and configure a .. note:: - Additional database tuning guidance is available for specific Mattermost releases. See the `important upgrade notes `__ documentation for more details. + - Additional database tuning guidance is available for specific Mattermost releases. See the `important upgrade notes `__ documentation for more details. + - See the `database configuration settings `__ documentation for details on configuration options specific to MySQL databases. How you install MySQL varies depending upon which Linux distribution you use. However, once MySQL is installed, the configuration instructions are the same. For all distributions you must create a ``mattermost`` database and a ``mattermost`` database user. Failure to create these database diff --git a/source/manage/cloud-data-export.rst b/source/manage/cloud-data-export.rst index 70fb69b81a2..f612ddbc80a 100644 --- a/source/manage/cloud-data-export.rst +++ b/source/manage/cloud-data-export.rst @@ -57,7 +57,7 @@ Once you're logged in, run the following ``mmctl`` command: mmctl export create -Running this command creates a full export of the server, including attached files. Append ``--no-attachments`` if you do not wish to export attached files from your instance. This process can take some time, so ``mmctl`` will return immediately, and the job will run in the background on the Mattermost instance until the export is fully created. If successful, the command will immediately output a job ID, like this: +Running this command creates a full export of the server, including attached files. Append ``--no-attachments`` if you do not wish to export attached files from your instance, and append ``--with-archived-channels`` to include archived channels in the export file. This process can take some time, so ``mmctl`` will return immediately, and the job will run in the background on the Mattermost instance until the export is fully created. If successful, the command will immediately output a job ID, like this: .. code:: diff --git a/source/manage/common-support-packet.rst b/source/manage/common-support-packet.rst index 5e4b405b7f0..04d5afb3855 100644 --- a/source/manage/common-support-packet.rst +++ b/source/manage/common-support-packet.rst @@ -21,14 +21,31 @@ To generate a Support Packet: - ``plugins.json`` - ``sanitized_config.json`` - ``support_packet.yaml`` + - ``cpu.prof`` + - ``heap.prof`` + - ``goroutines`` - ``warning.txt`` (present when issues are encountered during packet generation) You'll be notified if any packet files are unavailable during packet generation. See the ``warning.txt`` file for details. -3. Plugins are not sanitized during packet generation. Sanitize any confidential details in the ``plugin.json`` file before sending the support packet to Mattermost. +3. Plugins are not sanitized during packet generation. Sanitize any confidential details in the ``plugin.json`` file before sending the Support Packet to Mattermost. .. note:: When sanitizing Support Packet data, replace details with example strings that contain the same special characters if possible, as special characters are common causes of configuration errors. - LDAP groups are not included during support packet generation. Only ``LDAP Version`` and ``LDAP Vendor`` are included when present. These values are included in the ``support_packet.yaml`` file. + LDAP groups are not included during Support Packet generation. Only ``LDAP Version`` and ``LDAP Vendor`` are included when present. These values are included in the ``support_packet.yaml`` file. + + +Go performance metrics +---------------------- + +The Support Packet contains 3 go runtime profiling files: + + - ``cpu.prof`` contains a 5-second CPU profile + - ``heap.prof`` contains a heap profile + - ``goroutines`` contains a dump of all the running go routines + +These files can be read using `pprof `_. + +Use ``go tool pprof -web X`` to open a visualization of the profile in your browser, replacing ``X`` with the profile's file name. diff --git a/source/manage/mmctl-command-line-tool.rst b/source/manage/mmctl-command-line-tool.rst index 3010f8001ad..2abb7772038 100644 --- a/source/manage/mmctl-command-line-tool.rst +++ b/source/manage/mmctl-command-line-tool.rst @@ -2278,8 +2278,9 @@ Create an export file. .. code-block:: sh - --no-attachments Omit to include file attachments in the export file. - -h, --help help for create + --no-attachments Omit to include file attachments in the export file. + --include-archived-channels Include archived channels in the export file. + -h, --help help for create **Options inherited from parent commands** diff --git a/source/manage/telemetry.rst b/source/manage/telemetry.rst index e476b7a436c..e3a1aae8723 100644 --- a/source/manage/telemetry.rst +++ b/source/manage/telemetry.rst @@ -89,7 +89,7 @@ Server Configuration Settings **Type values (enumerated integer and enumerated boolean)** - **ServiceSettings**: enum WebserverMode, bool EnableSecurityFixAlert, bool EnableInsecureOutgoingConnections, bool EnableIncomingWebhooks, bool EnableOutgoingWebhooks, bool EnableCommands, bool EnableDeveloper, bool EnableOnlyAdminIntegrations, bool EnablePostUsernameOverride, bool EnablePostIconOverride, bool EnableCustomEmoji, enum RestrictCustomEmojiCreation, bool EnableTesting, bool DeveloperFlags, bool EnableClientPerformanceDebugging, bool EnableMultifactorAuthentication, bool EnableOAuthServiceProvider, enum ConnectionSecurity, bool UseLetsEncrypt, bool Forward80To443, enum ConnectionSecurity, bool TLSStrictTransport, bool EnforceMultifactorAuthentication, enum RestrictPostDelete, bool AllowEditPost, bool EnableUserTypingMessages, bool EnablePostSearch, bool EnableUserStatuses, bool EnableChannelViewMessages, bool EnableEmojiPicker, bool EnableGifPicker, bool EnableAuthenticationTransfer, enum TeammateNameDisplay, bool EnableUserAccessTokens, enum MaximumLoginAttempts, bool ExtendSessionLengthWithActivity, enum SessionLengthWebInHours, enum SessionLengthMobileInHours, enum SessionLengthSSOInHours, int SessionCacheInMinutes, enum SessionIdleTimeoutInMinutes, enum PostEditTimeLimit, enum TimeBetweenUserTypingUpdatesMilliseconds, enum ClusterLogTimeoutMilliseconds, bool CloseUnusedDirectMessages, bool EnablePreviewFeatures, bool EnableTutorial, bool EnableOnboarding, bool ExperimentalEnableDefaultChannelLeaveJoinMessages, bool ExperimentalGroupUnreadChannels, bool AllowCookiesForSubdomains, bool EnableAPITeamDeletion, bool EnableAPITriggerAdminNotifications, bool EnableAPIUserDeletion, bool EnableAPIChannelDeletion, bool ExperimentalEnableHardenedMode, bool DisableLegacyMFA, bool ExperimentalStrictCSRFEnforcement, bool EnableEmailInvitations, bool ExperimentalChannelOrganization, bool ExperimentalChannelSidebarOrganization, bool EnableLegacySidebar, bool CorsAllowCredentials, bool CorsDebug, bool DisableBotsWhenOwnerIsDeactivated, bool EnableBotAccountCreation, bool RestrictLinkPreviews, bool EnablePermalinkPreviews, bool EnableSVGs, bool EnableLatex, bool EnableInlineLatex, bool EnableOpenTracing, bool Directory, bool RetentionDays, bool ExperimentalDataPrefetch, bool EnableLocalMode; **TeamSettings**: bool EnableUserCreation, bool EnableTeamCreation, bool RestrictTeamNames, enum RestrictTeamInvite, enum RestrictPublicChannelManagement, enum RestrictPrivateChannelManagement, enum RestrictPublicChannelCreation, enum RestrictPrivateChannelCreation, enum RestrictPublicChannelDeletion, enum RestrictPrivateChannelDeletion, enum RestrictPrivateChannelManageMembers, bool EnableOpenServer, bool EnableUserDeactivation, bool EnableCustomBrand, bool RestrictDirectMessage, enum MaxNotificationsPerChannel, bool EnableConfirmNotificationsToChannel; enum MaxUsersPerTeam, enum MaxChannelsPerTeam, bool EnableCustomUserStatuses, bool EnableLastActiveTime, bool ExperimentalTownSquareIsReadOnly, bool ExperimentalHideTownSquareinLHS, bool EnableXToLeaveChannelsFromLHS, bool ExperimentalEnableAutomaticReplies, bool ExperimentalViewArchivedChannels, bool LockTeammateNameDisplay; **ClientRequirementSettings**: enum AndroidLatestVersion, enum AndroidMinVersion, enum DesktopLatestVersion, enum DesktopMinVersion, enum IosLatestVersion, enum IosMinVersion; **DisplaySettings**: bool ExperimentalTimezone; **GuestAccountsSettings**: bool Enable, bool AllowEmailAccounts, bool EnforceMultifactorAuthentication; **SqlSettings**: enum DriverName, bool Trace, enum MaxIdleConns, enum ConnMaxIdleTimeMilliseconds, bool ConnMaxLifetimeMilliseconds; enum MaxOpenC onns, enum QueryTimeout, bool DisableDatabaseSearch; **LogSettings**: bool EnableConsole, enum ConsoleLevel, bool ConsoleJson, bool EnableFile, enum FileLevel, bool FileJson, bool EnableWebhookDebugging; **NotificationLogSettings**: bool EnableConsole, bool ConsoleLevel, bool ConsoleJson, bool EnableFile, bool FileLevel, bool FileJson **PasswordSettings**: bool Lowercase, bool Number, bool Uppercase, bool Symbol, enum MinimumLength; **FileSettings**: bool EnablePublicLink, enum DriverName, enum MaxFileSize, enum FileSettings.MaxImageResolution, enum MaxImageDecoderConcurrency, bool FileSettings.ExtractContent, bool FileSettings.ArchiveRecursion, bool AmazonS3SSL, bool AmazonS3SignV2, bool AmazonS3SSE, bool AmazonS3Trace, bool EnableFileAttachments, bool EnableMobileUpload, bool EnableMobileDownload; **EmailSettings**: bool EnableSignUpWithEmail, bool EnableSignInWithEmail, bool EnableSignInWithUsername, bool RequireEmailVerification, bool SendEmailNotifications, bool UseChannelInEmailNotifications, bool EmailNotificationContentsType, bool EnableSMTPAuth, enum ConnectionSecurity, bool SendPushNotifications, enum PushNotificationContents, bool EnableEmailBatching, bool SkipServerCertificateVerification, enum EmailBatchingBufferSize, enum EmailBatchingInterval, bool EnablePreviewModeBanner, enum SMTPServerTimeout; **MessageExportSettings**: bool DownloadExportResults; **RateLimitSettings**: bool EnableRateLimiter, bool VaryByRemoteAddr, bool VaryByUser, enum PerSec, enum MaxBurst, enum MemoryStoreSize; **PrivacySettings**: bool ShowEmailAddress, bool ShowFullName; **ThemeSettings**: bool EnableThemeSelection, bool AllowCustomThemes; **GitLabSettings**: bool Enable; **GoogleSettings**: bool Enable; **Office365Settings**: bool Enable; **SupportSettings**: bool CustomTermsOfServiceEnabled; enum CustomTermsOfServiceReAcceptancePeriod; **LdapSettings**: bool Enable, bool EnableSync, enum ConnectionSecurity, bool SkipCertificateVerification, enum SyncIntervalMinutes, enum QueryTimeout, enum MaxPageSize, bool EnableAdminFilter; **ComplianceSettings**: bool Enable, bool EnableDaily; **LocalizationSettings**: enum DefaultServerLocale, enum DefaultClientLocale, enum AvailableLocales; **SamlSettings**: bool Enable, bool EnableSyncWithLdap, bool IgnoreGuestsLdapSync, bool EnableSyncWithLdapIncludeAuth, bool Verify, bool Encrypt, bool SignRequest, bool EnableAdminFilter; **ClusterSettings**: bool Enable, bool UseIpAddress, bool UseExperimentalGossip, bool ReadOnlyConfig, bool EnableExperimentalGossipEncryption, bool EnableGossipCompression; **MetricsSettings**: bool Enable, enum BlockProfileRate; **WebrtcSettings** (only in v5.5 and earlier): bool Enable; **ExperimentalSettings** bool ClientSideCertEnable, bool EnablePostMetadata, bool LinkMetadataTimeoutMilliseconds, bool EnableClickToReply, bool RestrictSystemAdmin, bool UseNewSAMLLibrary, bool CloudBilling, bool RemoteClusters, bool EnableSharedChannels, bool EnableRemoteClusterService, bool PatchPluginsReactDOM, bool Disableappbar, bool AllowSyncedDrafts; **AnnouncementSettings**: bool EnableBanner, bool AllowBannerDismissal, bool AdminNoticesEnabled, bool UserNoticesEnabled; **ElasticsearchSettings**: bool EnableIndexing, bool EnableSearching, bool Sniff, enum PostIndexReplicas, enum PostIndexShards, enum LiveIndexingBatchSize, enum BatchSize, enum RequestTimeoutSeconds, bool SkipTLSVerification, bool Trace; **PluginSettings**: bool Enable, bool EnableUploads, bool EnableHealthCheck, bool EnableMarketplace, bool EnableRemoteMarketplace, bool AutomaticPrepackagedPlugins, bool RequirePluginSignature; **DataRetentionSettings**: bool EnableMessageDeletion, bool MessageRetentionDays, bool AllowInsecureDownloadUrl, bool EnableFileDeletion, bool FileRetentionDays, enum DeletionJobStartTime; **MessageExportSettings**: bool EnableExport, enum ExportFormat, enum DailyRunTime, enum ExportFromTimestamp, enum BatchSize, enum GlobalRelaySettings.CustomerType; **ExperimentalAuditSettings**: bool SysLogEnabled, bool SysLogInsecure, enum SysLogMaxQueueSize, bool FileEnabled, enum FileMaxSizeMB, enum FileMaxAgeDays, bool FileMaxBackups, bool FileCompress, enum FileMaxQueueSize; **BleveSettings**: bool EnableIndexing, bool EnableSearching, bool EnableAutocomplete, enum BatchSize; bool FeatureFlags + **ServiceSettings**: enum WebserverMode, bool EnableSecurityFixAlert, bool EnableInsecureOutgoingConnections, bool EnableIncomingWebhooks, bool EnableOutgoingWebhooks, bool EnableCommands, bool EnableDeveloper, bool EnableOnlyAdminIntegrations, bool EnablePostUsernameOverride, bool EnablePostIconOverride, bool EnableCustomEmoji, enum RestrictCustomEmojiCreation, bool EnableTesting, bool DeveloperFlags, bool EnableClientPerformanceDebugging, bool EnableMultifactorAuthentication, bool EnableOAuthServiceProvider, enum ConnectionSecurity, bool UseLetsEncrypt, bool Forward80To443, enum ConnectionSecurity, bool TLSStrictTransport, bool EnforceMultifactorAuthentication, enum RestrictPostDelete, bool AllowEditPost, bool EnableUserTypingMessages, bool EnablePostSearch, bool EnableUserStatuses, bool EnableChannelViewMessages, bool EnableEmojiPicker, bool EnableGifPicker, bool EnableAuthenticationTransfer, enum TeammateNameDisplay, bool EnableUserAccessTokens, enum MaximumLoginAttempts, bool ExtendSessionLengthWithActivity, enum SessionLengthWebInHours, enum SessionLengthMobileInHours, enum SessionLengthSSOInHours, int SessionCacheInMinutes, enum SessionIdleTimeoutInMinutes, enum PostEditTimeLimit, enum TimeBetweenUserTypingUpdatesMilliseconds, enum ClusterLogTimeoutMilliseconds, bool CloseUnusedDirectMessages, bool EnablePreviewFeatures, bool EnableTutorial, bool EnableOnboarding, bool ExperimentalEnableDefaultChannelLeaveJoinMessages, bool ExperimentalGroupUnreadChannels, bool AllowCookiesForSubdomains, bool EnableAPITeamDeletion, bool EnableAPITriggerAdminNotifications, bool EnableAPIUserDeletion, bool EnableAPIChannelDeletion, bool ExperimentalEnableHardenedMode, bool DisableLegacyMFA, bool ExperimentalStrictCSRFEnforcement, bool EnableEmailInvitations, bool ExperimentalChannelOrganization, bool ExperimentalChannelSidebarOrganization, bool EnableLegacySidebar, bool CorsAllowCredentials, bool CorsDebug, bool DisableBotsWhenOwnerIsDeactivated, bool EnableBotAccountCreation, bool RestrictLinkPreviews, bool EnablePermalinkPreviews, bool EnableSVGs, bool EnableLatex, bool EnableInlineLatex, bool EnableOpenTracing, bool Directory, bool RetentionDays, bool ExperimentalDataPrefetch, bool EnableLocalMode; **TeamSettings**: bool EnableUserCreation, bool EnableTeamCreation, bool RestrictTeamNames, enum RestrictTeamInvite, enum RestrictPublicChannelManagement, enum RestrictPrivateChannelManagement, enum RestrictPublicChannelCreation, enum RestrictPrivateChannelCreation, enum RestrictPublicChannelDeletion, enum RestrictPrivateChannelDeletion, enum RestrictPrivateChannelManageMembers, bool EnableOpenServer, bool EnableUserDeactivation, bool EnableCustomBrand, bool RestrictDirectMessage, enum MaxNotificationsPerChannel, bool EnableConfirmNotificationsToChannel; enum MaxUsersPerTeam, enum MaxChannelsPerTeam, bool EnableJoinLeaveMessageByDefault, bool EnableCustomUserStatuses, bool EnableLastActiveTime, bool ExperimentalTownSquareIsReadOnly, bool ExperimentalHideTownSquareinLHS, bool EnableXToLeaveChannelsFromLHS, bool ExperimentalEnableAutomaticReplies, bool ExperimentalViewArchivedChannels, bool LockTeammateNameDisplay; **ClientRequirementSettings**: enum AndroidLatestVersion, enum AndroidMinVersion, enum DesktopLatestVersion, enum DesktopMinVersion, enum IosLatestVersion, enum IosMinVersion; **DisplaySettings**: bool ExperimentalTimezone; **GuestAccountsSettings**: bool Enable, bool AllowEmailAccounts, bool EnforceMultifactorAuthentication; **SqlSettings**: enum DriverName, bool Trace, enum MaxIdleConns, enum ConnMaxIdleTimeMilliseconds, bool ConnMaxLifetimeMilliseconds; enum MaxOpenC onns, enum QueryTimeout, bool DisableDatabaseSearch; **LogSettings**: bool EnableConsole, enum ConsoleLevel, bool ConsoleJson, bool EnableFile, enum FileLevel, bool FileJson, bool EnableWebhookDebugging; **NotificationLogSettings**: bool EnableConsole, bool ConsoleLevel, bool ConsoleJson, bool EnableFile, bool FileLevel, bool FileJson **PasswordSettings**: bool Lowercase, bool Number, bool Uppercase, bool Symbol, enum MinimumLength; **FileSettings**: bool EnablePublicLink, enum DriverName, enum MaxFileSize, enum FileSettings.MaxImageResolution, enum MaxImageDecoderConcurrency, bool FileSettings.ExtractContent, bool FileSettings.ArchiveRecursion, bool AmazonS3SSL, bool AmazonS3SignV2, bool AmazonS3SSE, bool AmazonS3Trace, bool EnableFileAttachments, bool EnableMobileUpload, bool EnableMobileDownload; **EmailSettings**: bool EnableSignUpWithEmail, bool EnableSignInWithEmail, bool EnableSignInWithUsername, bool RequireEmailVerification, bool SendEmailNotifications, bool UseChannelInEmailNotifications, bool EmailNotificationContentsType, bool EnableSMTPAuth, enum ConnectionSecurity, bool SendPushNotifications, enum PushNotificationContents, bool EnableEmailBatching, bool SkipServerCertificateVerification, enum EmailBatchingBufferSize, enum EmailBatchingInterval, bool EnablePreviewModeBanner, enum SMTPServerTimeout; **MessageExportSettings**: bool DownloadExportResults; **RateLimitSettings**: bool EnableRateLimiter, bool VaryByRemoteAddr, bool VaryByUser, enum PerSec, enum MaxBurst, enum MemoryStoreSize; **PrivacySettings**: bool ShowEmailAddress, bool ShowFullName; **ThemeSettings**: bool EnableThemeSelection, bool AllowCustomThemes; **GitLabSettings**: bool Enable; **GoogleSettings**: bool Enable; **Office365Settings**: bool Enable; **SupportSettings**: bool CustomTermsOfServiceEnabled; enum CustomTermsOfServiceReAcceptancePeriod; **LdapSettings**: bool Enable, bool EnableSync, enum ConnectionSecurity, bool SkipCertificateVerification, enum SyncIntervalMinutes, enum QueryTimeout, enum MaxPageSize, bool EnableAdminFilter; **ComplianceSettings**: bool Enable, bool EnableDaily; **LocalizationSettings**: enum DefaultServerLocale, enum DefaultClientLocale, enum AvailableLocales; **SamlSettings**: bool Enable, bool EnableSyncWithLdap, bool IgnoreGuestsLdapSync, bool EnableSyncWithLdapIncludeAuth, bool Verify, bool Encrypt, bool SignRequest, bool EnableAdminFilter; **ClusterSettings**: bool Enable, bool UseIpAddress, bool UseExperimentalGossip, bool ReadOnlyConfig, bool EnableExperimentalGossipEncryption, bool EnableGossipCompression; **MetricsSettings**: bool Enable, enum BlockProfileRate; **WebrtcSettings** (only in v5.5 and earlier): bool Enable; **ExperimentalSettings** bool ClientSideCertEnable, bool EnablePostMetadata, bool LinkMetadataTimeoutMilliseconds, bool EnableClickToReply, bool RestrictSystemAdmin, bool UseNewSAMLLibrary, bool CloudBilling, bool RemoteClusters, bool EnableSharedChannels, bool EnableRemoteClusterService, bool PatchPluginsReactDOM, bool Disableappbar, bool AllowSyncedDrafts; **AnnouncementSettings**: bool EnableBanner, bool AllowBannerDismissal, bool AdminNoticesEnabled, bool UserNoticesEnabled; **ElasticsearchSettings**: bool EnableIndexing, bool EnableSearching, bool Sniff, enum PostIndexReplicas, enum PostIndexShards, enum LiveIndexingBatchSize, enum BatchSize, enum RequestTimeoutSeconds, bool SkipTLSVerification, bool Trace; **PluginSettings**: bool Enable, bool EnableUploads, bool EnableHealthCheck, bool EnableMarketplace, bool EnableRemoteMarketplace, bool AutomaticPrepackagedPlugins, bool RequirePluginSignature; **DataRetentionSettings**: bool EnableMessageDeletion, bool MessageRetentionDays, bool AllowInsecureDownloadUrl, bool EnableFileDeletion, bool FileRetentionDays, enum DeletionJobStartTime; **MessageExportSettings**: bool EnableExport, enum ExportFormat, enum DailyRunTime, enum ExportFromTimestamp, enum BatchSize, enum GlobalRelaySettings.CustomerType; **ExperimentalAuditSettings**: bool SysLogEnabled, bool SysLogInsecure, enum SysLogMaxQueueSize, bool FileEnabled, enum FileMaxSizeMB, enum FileMaxAgeDays, bool FileMaxBackups, bool FileCompress, enum FileMaxQueueSize; **BleveSettings**: bool EnableIndexing, bool EnableSearching, bool EnableAutocomplete, enum BatchSize; bool FeatureFlags **Counts (integer)** @@ -97,7 +97,7 @@ Server Configuration Settings **True/false (boolean)** value whether setting remains default (true) or non-default (false). **NOTE: No input data is used**: - **ServiceSettings**: bool SiteURL, bool WebsocketURL, bool TLSCertFile, bool TLSKeyFile, bool ReadTimeout, bool WriteTimeout,bool IdleTimeout, bool GoogleDeveloperKey, bool AllowCorsFrom, bool CorsExposedHeaders, bool AllowedUntrustedInternalConnections, bool GfycatApiKey, bool GfycatApiSecret, bool ManagedResourcePaths, bool CollapsedThreads, bool PostPriority, bool AllowPersistentNotifications, bool PersistentNotificationMaxCount, bool PersistentNotificationIntervalMinutes, bool PersistentNotificationMaxRecipients; **TeamSettings**: bool SiteName, bool CustomBrandText, bool CustomDescriptionText, bool UserStatusAwayTimeout, bool ExperimentalPrimaryTeam; **DisplaySettings**: bool CustomUrlSchemes; **GuestAccountSettings**: bool RestrictCreationToDomains, bool EnforceMultifactorAuthentication, bool HideTags; **LogSettings**: bool FileLocation; **NotificationLogSettings**: bool FileLocation; **EmailSettings**: bool FeedbackName, bool FeedbackEmail, bool FeedbackOrganization, bool LoginButtonColor, bool LoginButtonBorderColor, bool LoginButtonTextColor, bool ImageProxyType, bool ImageProxyURL, bool ImageProxyOptions; **RateLimitSettings**: bool VaryByHeader; **SupportSettings**: bool TermsOfServiceLink, bool PrivacyPolicyLink, bool AboutLink, bool HelpLink, bool ReportAProblemLink, bool AppCustomURLSchemes, bool SupportEmail; **ThemeSettings**: bool DefaultTheme; **TimeZoneSettings**: bool SupportedTimezonesPath; **LdapSettings**: bool FirstNameAttribute, bool LastNameAttribute, bool EmailAttribute, bool UserNameAttribute, bool NicknameAttribute, bool IdAttribute, bool PositionAttribute, bool LoginFieldName, bool LoginButtonColor, bool LoginButtonBorderColor, bool LoginButtonTextColor, bool GroupFilter, bool GroupDisplayNameAttribute, bool GroupIdAttribute, bool GuestFilter, bool AdminFilter; **SamlSettings**: bool SignatureAlgorithm, bool CanonicalAlgorithm, bool ScopingIDPProviderId, bool ScopingIDPName, bool IdAttribute, bool GuestAttribute, bool FirstNameAttribute, bool LastNameAttribute, bool EmailAttribute, bool UserNameAttribute, bool NicknameAttribute, bool LocaleAttribute, bool PositionAttribute, bool LoginIdAttribute, bool LoginButtonText, bool LoginButtonColor, bool LoginButtonBorderColor, bool LoginButtonTextColor, bool AdminFilter; **NativeAppSettings**: bool AppDownloadLink, bool AndroidAppDownloadLink, bool IosAppDownloadLink; **WebrtcSettings** (only in v5.5 and earlier): bool StunURI, bool TurnURI; **ClusterSettings**: bool NetworkInterface, bool BindAddress, bool AdvertiseAddress; **MetricsSettings**: bool BlockProfileRate; **AnalyticsSettings**: bool MaxUsersForStatistics; **ExperimentalSettings** bool ClientSideCertCheck; **AnnouncementSettings**: bool BannerColor, bool BannerTextColor; **ElasticsearchSettings**: bool ConnectionUrl, bool Username, bool Password, bool IndexPrefix; **PluginSettings**: bool MarketplaceUrl, bool SignaturePublicKeyFiles, bool ChimeraOAuthProxyUrl; **MessageExportSettings**: bool GlobalRelaySettings.SmtpUsername, bool GlobalRelaySettings.SmtpPassword, bool GlobalRelaySettings.EmailAddress + **ServiceSettings**: bool SiteURL, bool WebsocketURL, bool TLSCertFile, bool TLSKeyFile, bool ReadTimeout, bool WriteTimeout,bool IdleTimeout, bool GoogleDeveloperKey, bool AllowCorsFrom, bool CorsExposedHeaders, bool AllowedUntrustedInternalConnections, bool GfycatApiKey, bool GfycatApiSecret, bool ManagedResourcePaths, bool CollapsedThreads, bool PostPriority, bool AllowPersistentNotifications, bool PersistentNotificationMaxCount, bool PersistentNotificationIntervalMinutes, bool PersistentNotificationMaxRecipients; **TeamSettings**: bool SiteName, bool CustomBrandText, bool CustomDescriptionText, bool UserStatusAwayTimeout, bool ExperimentalPrimaryTeam; **DisplaySettings**: bool CustomUrlSchemes, bool MaxMarkdownNodes; **GuestAccountSettings**: bool RestrictCreationToDomains, bool EnforceMultifactorAuthentication, bool HideTags; **LogSettings**: bool FileLocation; **NotificationLogSettings**: bool FileLocation; **EmailSettings**: bool FeedbackName, bool FeedbackEmail, bool FeedbackOrganization, bool LoginButtonColor, bool LoginButtonBorderColor, bool LoginButtonTextColor, bool ImageProxyType, bool ImageProxyURL, bool ImageProxyOptions; **RateLimitSettings**: bool VaryByHeader; **SupportSettings**: bool TermsOfServiceLink, bool PrivacyPolicyLink, bool AboutLink, bool HelpLink, bool ReportAProblemLink, bool AppCustomURLSchemes, bool SupportEmail; **ThemeSettings**: bool DefaultTheme; **TimeZoneSettings**: bool SupportedTimezonesPath; **LdapSettings**: bool FirstNameAttribute, bool LastNameAttribute, bool EmailAttribute, bool UserNameAttribute, bool NicknameAttribute, bool IdAttribute, bool PositionAttribute, bool LoginFieldName, bool LoginButtonColor, bool LoginButtonBorderColor, bool LoginButtonTextColor, bool GroupFilter, bool GroupDisplayNameAttribute, bool GroupIdAttribute, bool GuestFilter, bool AdminFilter; **SamlSettings**: bool SignatureAlgorithm, bool CanonicalAlgorithm, bool ScopingIDPProviderId, bool ScopingIDPName, bool IdAttribute, bool GuestAttribute, bool FirstNameAttribute, bool LastNameAttribute, bool EmailAttribute, bool UserNameAttribute, bool NicknameAttribute, bool LocaleAttribute, bool PositionAttribute, bool LoginIdAttribute, bool LoginButtonText, bool LoginButtonColor, bool LoginButtonBorderColor, bool LoginButtonTextColor, bool AdminFilter; **NativeAppSettings**: bool AppDownloadLink, bool AndroidAppDownloadLink, bool IosAppDownloadLink; **WebrtcSettings** (only in v5.5 and earlier): bool StunURI, bool TurnURI; **ClusterSettings**: bool NetworkInterface, bool BindAddress, bool AdvertiseAddress; **MetricsSettings**: bool BlockProfileRate; **AnalyticsSettings**: bool MaxUsersForStatistics; **ExperimentalSettings** bool ClientSideCertCheck; **AnnouncementSettings**: bool BannerColor, bool BannerTextColor; **ElasticsearchSettings**: bool ConnectionUrl, bool Username, bool Password, bool IndexPrefix; **PluginSettings**: bool MarketplaceUrl, bool SignaturePublicKeyFiles, bool ChimeraOAuthProxyUrl; **MessageExportSettings**: bool GlobalRelaySettings.SmtpUsername, bool GlobalRelaySettings.SmtpPassword, bool GlobalRelaySettings.EmailAddress Commercial License Information (Enterprise Edition only) Information about commercial license key purchased or trial license key used for Enterprise Edition servers: Company ID, license ID, license issue date, license start date, license expiry date, number of licensed users, license name, list of unlocked subscription features. diff --git a/source/preferences/manage-your-notifications.rst b/source/preferences/manage-your-notifications.rst index 8a40e9e5652..0aad18f69d5 100644 --- a/source/preferences/manage-your-notifications.rst +++ b/source/preferences/manage-your-notifications.rst @@ -4,8 +4,6 @@ Manage your notifications .. include:: ../_static/badges/allplans-cloud-selfhosted.rst :start-after: :nosearch: - - .. |gear| image:: ../images/settings-outline_F08BB.svg :alt: Use the Settings icon to customize your Mattermost user experience. @@ -15,20 +13,32 @@ Manage your notifications .. |more-icon| image:: ../images/dots-horizontal_F01D8.svg :alt: Use the More icon to access additional message options. +.. |dot-badge| image:: ../images/dot-badge.png + :alt: A dot on the badge means you have unread activity in at least one channel you're a member of. + :width: 50px + +.. |numbered-badge| image:: ../images/numbered-badge.png + :alt: A numbered badge means you have at least 1 unread message, @mention, or one of your keywords has triggered a notification. + :width: 50px + Mattermost notifies you of new activity in the following ways: - **Badges**: In Mattermost, badges show you when you have unread messages and threads. + + - |dot-badge| A dot on the badge means you have unread activity in at least one channel you're a member of. + - |numbered-badge| A numbered badge means you have at least one unread `direct message `__, `group message `__, `@mention `__, or one of your keywords has triggered a notification. - **Banner alerts**: Pop-ups alert you to new activity. - **Push notifications**: Mobile app alert you to new activity when you're on the go. - **Sounds**: Audible sounds alert you to new activity. -You can configure Mattermost to receive increase or decrease the number of notifications based on your preferences. .. tip:: Missing notifications? Visit our `notifications knowledge base article `__ for troubleshooting tips and tricks. Get notified ------------- +You can configure Mattermost to receive increase or decrease the number of notifications based on your preferences. + In a web browser or the desktop app, select the **Settings** |gear| icon located in the top right corner of the screen to manage your notification preferences. On mobile, select the **Settings** |gear| icon and tap **Notifications**. @@ -93,7 +103,7 @@ On mobile, select the **Settings** |gear| icon and tap **Notifications**. **Customize notification keywords** - You can customize any additional keywords to receive notifications. For example, you can receive notifications for all messages and threads related to a specific topic, project name, or customer. Separate multiple keywords using commas. + You can customize any additional non case-sensitive keywords to trigger notifications. For example, you can receive notifications for all messages and threads related to a specific topic, project name, or customer. Separate multiple keywords using commas or by pressing :kbd:`Tab`, and use :kbd:`Backspace` to manage keywords. .. tab:: Replies diff --git a/source/preferences/set-your-status-availability.rst b/source/preferences/set-your-status-availability.rst index ddf02346d4f..a3e0de10972 100644 --- a/source/preferences/set-your-status-availability.rst +++ b/source/preferences/set-your-status-availability.rst @@ -4,6 +4,18 @@ Set your status and availability .. include:: ../_static/badges/allplans-cloud-selfhosted.rst :start-after: :nosearch: +.. |online| image:: ../images/online.png + :alt: Online availability status icon in Mattermost. + +.. |away| image:: ../images/away.png + :alt: Away availability status icon in Mattermost. + +.. |dnd| image:: ../images/dnd.png + :alt: Do Not Disturb availability status icon in Mattermost. + +.. |offline| image:: ../images/offline.png + :alt: Offline availability status icon in Mattermost. + Let your team know whether you're available by setting a `custom status `__ and your `availability `__ in Mattermost. Set a custom status @@ -29,10 +41,10 @@ Set a custom status to display a descriptive status message and optional emoji n .. tip:: - - Custom statuses are enabled by default in Mattermost. System admins can disable this feature by going to **System Console > Site Configuration > Users and Teams > Enable Custom Statuses**. Disabling this feature also removes the "Update your status" prompts in Mattermost. + - Custom statuses are enabled by default in Mattermost. System admins can disable this feature by going to **System Console > Site Configuration > Users and Teams > Enable Custom Statuses**. Disabling this feature also removes the ``Update your status`` prompts in Mattermost. Clear a custom status ------------------------- +~~~~~~~~~~~~~~~~~~~~~~ To clear a custom status, select your profile picture, then select **Clear Status**, or select the **Clear** option next to your current status. @@ -44,8 +56,26 @@ Set your availability To set your availability, select your profile picture, then specify your availability as **Online**, **Away**, **Do Not Disturb**, or **Offline**. -.. image:: ../images/set-your-availability.png - :alt: Set your availability to online, away, do not disturb, or offline. ++------------------+-------------------------------------------------------------------------------------------------------------------+ +| **Availability** | **Description** | ++==================+===================================================================================================================+ +| |online| | - Set automatically for you when you're active on Mattermost using a browser, the desktop app, or the mobile app. | +| | - By default, notifications are sent to the browser, the desktop app, and the mobile app. | ++------------------+-------------------------------------------------------------------------------------------------------------------+ +| |away| | - Set automatically for you when you've been inactive for more than 5 minutes. | +| | - You can manually set yourself as **Away** any time. | +| | - By default, notifications are sent to your Mattermost mobile app. | ++------------------+-------------------------------------------------------------------------------------------------------------------+ +| |dnd| | - Set your availability as **Do Not Disturb** any time you don't want notifications for a period of time. | ++------------------+-------------------------------------------------------------------------------------------------------------------+ +| |offline| | - Set automatically for you when you exit the Mattermost desktop app or close the browser window, sleep or | +| | lock your computer, or on mobile when you change apps, close the Mattermost mobile app, or lock your | +| | mobile device screen. | +| | - You can manually set yourself as **Offline** any time. | +| | - By default, notifications are sent to your Mattermost mobile app. | ++------------------+-------------------------------------------------------------------------------------------------------------------+ + + Other members can see your availability anywhere they can see your name, such as the channel sidebar, within conversations, and within Direct Messages. @@ -56,6 +86,9 @@ Set your availability to **Do Not Disturb** to disable all desktop, email, and p You can specify how long to disable notifications by selecting a preset expiration or setting a custom expiration. Your availability setting automatically reverts to its previous setting once the expiration is reached (this may take up to five minutes). +.. image:: ../images/set-your-availability.png + :alt: Example of setting your Mattermost availability to Do Not Disturb. + How Mattermost determines your availability ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/source/scale/performance-alerting.rst b/source/scale/performance-alerting.rst index 8f9b554f368..7fc53baa982 100644 --- a/source/scale/performance-alerting.rst +++ b/source/scale/performance-alerting.rst @@ -6,12 +6,13 @@ Mattermost performance alerting guide *Available in legacy Mattermost Enterprise Edition E20* -Mattermost recommends using Prometheus and Grafana to track performance metrics of the Mattermost application servers. The purpose of this guide is to help you set up alerts on your Grafana dashboard. +Mattermost recommends using `Prometheus `__ and `Grafana `__ to track performance metrics of the Mattermost application servers. The purpose of this guide is to help you set up alerts on your Grafana dashboard once you've `set up system health tracking `__. .. note:: We highly recommend setting up performance alerting for deployments above 5,000 users, where additional servers have been added for performance load-balancing. -**Prerequisites** +Prerequisites +------------- Set up performance monitoring for Mattermost. See our `Performance Monitoring `__ documentation to learn more. @@ -34,7 +35,8 @@ To get alerts, first set up a Notification Channel in Grafana. Here’s how you If you would also like to get email alerts, you can follow `these instructions `__ to set that up. -**Configuring alerts** +Configure alerts +---------------- The `Mattermost dashboards `__ for Grafana come with some partially pre-configured alerts on the following charts: @@ -72,10 +74,13 @@ Enter a message if you would like to add more context to the alert. By default, the alerts are configured to check the average of a chart over the last minute to see if that value is above a threshold. If it’s above the threshold, the alert will be triggered. Since it’s an average over the last minute, small spikes that go past the threshold won’t necessarily cause an alert. This helps prevent false positives that would result from natural spikes in usage. The alert state for each chart is evaluated every minute. +Available charts +---------------- + The sections below describe each chart in more detail. CPU utilization rate ---------------------- +~~~~~~~~~~~~~~~~~~~~ CPU Utilization Rate is fairly straightforward. CPU Utilization Rate tracks the CPU usage of the app servers as a percentage. The maximum percentage is based on the number of CPU cores or vCPUs your app server has. For example, if you have four CPU cores and your app server was at 100% utilization rate on all four cores, the graph would show 400% for that app server. @@ -89,7 +94,7 @@ For example, on our community server, we have the threshold set to 15%: This value is below our maximum CPU usage and above our average usage at peak times. Therefore, we will get alerts if we begin experiencing unusually high CPU usage. Memory usage -------------- +~~~~~~~~~~~~ Memory Usage tracks the megabytes of RAM that your app servers are using. Set the threshold similar to the CPU Utilization Rate: below maximum available memory and above your average usage during peak times. @@ -99,7 +104,7 @@ Here’s how we have the alert set on our Community server: :alt: Example memory usage metrics for the Mattermost Community Server, where the threshold is configured similarly to the CPU utilization rate. Number of Goroutines ---------------------- +~~~~~~~~~~~~~~~~~~~~ Goroutines are functions or methods that run concurrently with other functions and methods. Goroutines are like lightweight threads with low-creation costs. A rising number of goroutines can be a good measure of the performance of your app servers. A continuous increase indicates your app server can't keep up and is creating goroutines faster than they can complete their tasks and stop. @@ -111,7 +116,7 @@ Here’s how we have it set on our Community server: :alt: Example Goroutines metrics for the Mattermost Community Server, where the threshold is configured above the average number of Goroutines observed during peak load times. Number of API errors per second --------------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Any 4xx or 5xx HTTP response status codes are counted as a REST API error. API errors themselves are not necessarily a problem. There are many legitimate reasons for an API error to occur, such as users’ sessions expiring or clients requesting to see if a resource exists and is being given a ``404 Not Found`` response. It is normal to have some API errors that scale with your installation base. @@ -123,7 +128,7 @@ Here’s how it’s set on our Community server: :alt: Example metrics of the number of API errors per second for the Mattermost Community Server, where it's normal to have some API errors that scale with an installation base, but that can be indicative of deployment issues or other issues. Mean API request time ----------------------- +~~~~~~~~~~~~~~~~~~~~~~ The Mean API Request Time is the average amount of time a REST API request to the Mattermost app server takes to complete. If an app server starts to perform poorly, you’ll likely see a rise in the mean request time as it takes longer to complete requests. This could also happen if your database can’t sustain the load from the app servers. It may also be indicative of an issue between the app servers and your proxy. @@ -135,7 +140,7 @@ Here’s how it’s set on our community server: :alt: Example mean API request time metrics for the Mattermost Community Server, where the alert threshold is configured a bit above the mean request time during peak load times. Plugin hooks -------------- +~~~~~~~~~~~~ You can trace hooks and plugin API calls with Prometheus. Below are some examples of hooks and API Prometheus metrics that you may want to be aware of when troubleshooting or monitoring your server's performance. @@ -169,4 +174,4 @@ You can trace hooks and plugin API calls with Prometheus. Below are some example Other alerts ------------- -If you want more alerts, you can set them up on any of the Grafana charts you'd like. We recommend reviewing custom metrics listed on our `Performance Monitoring feature documentation `_. +If you want more alerts, you can set them up on any of the Grafana charts you'd like. We recommend reviewing custom metrics listed on our `Performance Monitoring feature documentation `__. \ No newline at end of file diff --git a/source/scale/performance-monitoring.rst b/source/scale/performance-monitoring.rst index 2283b561fb2..18ff825fd67 100644 --- a/source/scale/performance-monitoring.rst +++ b/source/scale/performance-monitoring.rst @@ -6,7 +6,7 @@ Performance monitoring *Available in legacy Mattermost Enterprise Edition E20* -Performance monitoring support enables a Mattermost server to track system health for large Enterprise deployments through integrations with `Prometheus `__ and `Grafana `__. These integrations support data collection from several Mattermost servers, which is particularly useful if you're running Mattermost `in high availability mode `__. +Performance monitoring support enables a Mattermost server to track system health for large Enterprise deployments through integrations with `Prometheus `__ and `Grafana `__. These integrations support data collection from several Mattermost servers, which is particularly useful if you're running Mattermost `in high availability mode `__. Once you're tracking system health, you can `set up performance alerts `__ on your Grafana dashboard. .. note:: @@ -252,6 +252,9 @@ Use annotations to streamline analysis when a job is long running, such as an LD Standard Go metrics ~~~~~~~~~~~~~~~~~~~ +.. include:: ../_static/badges/allplans-cloud-selfhosted.rst + :start-after: :nosearch: + The performance monitoring feature provides standard Go metrics for HTTP server runtime profiling data and system monitoring, such as: - ``go_memstats_alloc_bytes`` for memory usage @@ -259,9 +262,6 @@ The performance monitoring feature provides standard Go metrics for HTTP server - ``go_gc_duration_seconds`` for garbage collection duration - ``go_memstats_heap_objects`` for object tracking on the heap -.. note:: - Profile reports are available to Team Edition and Enterprise Edition users. - To learn how to set up runtime profiling, see the `pprof package Go documentation `__. You can also visit the ``ip:port`` page for a complete list of metrics with descriptions. .. note:: diff --git a/source/upgrade/important-upgrade-notes.rst b/source/upgrade/important-upgrade-notes.rst index 7413dea945c..888e23561ad 100644 --- a/source/upgrade/important-upgrade-notes.rst +++ b/source/upgrade/important-upgrade-notes.rst @@ -14,6 +14,36 @@ Important Upgrade Notes +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | If you’re upgrading from a version earlier than... | Then... | +====================================================+==================================================================================================================================================================+ +| v9.1 | In v9.1.0, improved performance on data retention ``DeleteOrphanedRows`` queries. | +| | | +| | New migration for a new table: | +| | | +| | MySQL: | +| | | +| | ``CREATE TABLE IF NOT EXISTS RetentionIdsForDeletion (`` | +| | ``Id varchar(26) NOT NULL,`` | +| | ``TableName varchar(64),`` | +| | ``Ids json,`` | +| | ``PRIMARY KEY (Id),`` | +| | ``KEY idx_retentionidsfordeletion_tablename (TableName)`` | +| | ``) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;`` | +| | | +| | PostgreSQL: | +| | | +| | ``CREATE TABLE IF NOT EXISTS retentionidsfordeletion (`` | +| | ``id varchar(26) PRIMARY KEY,`` | +| | ``tablename varchar(64),`` | +| | ``ids varchar(26)[]`` | +| | ``);`` | +| | ``CREATE INDEX IF NOT EXISTS idx_retentionidsfordeletion_tablename ON retentionidsfordeletion (tablename);`` | +| | | +| | Hard deleting a user or a channel will now also clean up associated reactions. | +| | | +| | Removed feature flag ``DataRetentionConcurrencyEnabled``. Data retention now runs without concurrency in order to avoid any performance degradation. | +| | | +| | Added a new configuration setting ``DataRetentionSettings.RetentionIdsBatchSize``, which allows admins to configure how many batches of IDs will be fetched at | +| | a time when deleting orphaned reactions. The default value is 100. | ++----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v9.0 | Removed the deprecated Insights feature. | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | | Mattermost Boards and various other plugins have transitioned to being fully community supported. See this | diff --git a/source/upgrade/open-source-components.rst b/source/upgrade/open-source-components.rst index 23a0b392d92..35887095263 100644 --- a/source/upgrade/open-source-components.rst +++ b/source/upgrade/open-source-components.rst @@ -28,6 +28,7 @@ Desktop Mobile ------- + - Mattermost Mobile v2.9.0 - `View Open Source Components `_. - Mattermost Mobile v2.8.0 - `View Open Source Components `_. - Mattermost Mobile v2.7.0 - `View Open Source Components `_. - Mattermost Mobile v2.6.0 - `View Open Source Components `_. @@ -97,6 +98,7 @@ Mobile Server ------------------------------ + - Mattermost Enterprise Edition v9.1.0 - `View Open Source Components `_. - Mattermost Enterprise Edition v9.0.0 - `View Open Source Components `_. - Mattermost Enterprise Edition v8.1.0 - `View Open Source Components `_. - Mattermost Enterprise Edition v8.0.0 - `View Open Source Components `_. diff --git a/source/upgrade/release-lifecycle.rst b/source/upgrade/release-lifecycle.rst index cdc1e795156..199bc4c9556 100644 --- a/source/upgrade/release-lifecycle.rst +++ b/source/upgrade/release-lifecycle.rst @@ -16,6 +16,8 @@ During each monthly release, Mattermost backports high severity or high impact s +-------------+-----------------------+--------------------------+--------------------------+--------------------------+ | Version | Release Type | Lifecyle Start Date | Lifecycle End Date | Extended Support Release | +=============+=======================+==========================+==========================+==========================+ +| 9.2 | Feature | 2023-11-16 | 2024-02-15 | | ++-------------+-----------------------+--------------------------+--------------------------+--------------------------+ | 9.1 | Feature | 2023-10-16 | 2024-01-15 | | +-------------+-----------------------+--------------------------+--------------------------+--------------------------+ | 9.0 | Major | 2023-09-16 | 2023-12-15 | |