Skip to content

[pull] master from mattermost:master#772

Merged
pull[bot] merged 6 commits into
code:masterfrom
mattermost:master
Jun 15, 2026
Merged

[pull] master from mattermost:master#772
pull[bot] merged 6 commits into
code:masterfrom
mattermost:master

Conversation

@pull

@pull pull Bot commented Jun 15, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

isacikgoz and others added 6 commits June 15, 2026 10:00
* Fix S3 MoveFile/CopyFile failing on files larger than 5GiB

S3FileBackend.MoveFile, CopyFile and DecodeFilePathIfNeeded used the
minio-go CopyObject call, which performs a single server-side PUT-copy.
S3 rejects copy sources larger than 5GiB, so any move/copy of a file
over 5GiB fails with:

  The specified copy source is larger than the maximum allowable size
  for a copy source: 5368709120

This breaks, among other things, finalizing an `mmctl import upload` of
an import archive larger than 5GiB on S3-backed installations (the
upload streams fine, then the .tmp -> final rename fails).

Extract the shared copy logic into a copyObject helper that picks the
right S3 operation by source size: CopyObject for sources up to 5GiB,
and ComposeObject (server-side multipart copy via UploadPartCopy) for
larger sources, supporting objects up to 5TiB. Small files keep using a
single CopyObject; only files over 5GiB pay for multipart. The size is
checked explicitly rather than relying on ComposeObject's own single-copy
fast path, which is only taken when the source range Start is -1, a value
its input validation rejects (Start must be non-negative), so it is
unreachable here.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Add unit tests for S3 copyObject copy-vs-compose routing

Extract the copy-routing logic into copyObjectWithClient, which takes a
small s3CopyClient interface (StatObject/CopyObject/ComposeObject) so it
can be tested with a mock. The exported behavior of copyObject (and its
callers MoveFile/CopyFile) is unchanged; *minio.Client satisfies the
interface.

Tests cover the three branches:
- source > 5GiB     -> ComposeObject (multipart copy), not CopyObject
- source <= 5GiB     -> CopyObject, not ComposeObject (incl. the boundary)
- StatObject error  -> propagated, neither copy is attempted

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* make mocks

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: wiggin77 <wiggin77@warpmail.net>
…ro (#36581)

* phase 8d

* review: key PluggableErrorBoundary by channel + add missing-channel intro test

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* simplify: remove redundant channelId from call-site keys

PluggableErrorBoundary now carries key={registration.id:channel.id}
internally, so the outer ChannelDecoratorRenderer no longer needs a
channel-scoped key to reset the boundary on navigation.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* merge conflicts

* more conflicts

* remove unregisterChannelDecorator + REMOVED_PLUGIN_COMPONENT_BY_ID

The unregister method dispatched an action whose reducer case was removed
during Phase 8b's cleanup, making the call a silent no-op (surfaced by a
failing CI test). Restore is not warranted: plugin lifecycle already sweeps
all registrations on uninstall and bundle-path-changed reload via
REMOVED_WEBAPP_PLUGIN, and the matcher contract handles dynamic on/off
without re-registration. Drop the unregister method, the action constant,
and the failing scoped-removal tests; move clearLoggedDecoratorErrors into
register so the log-once tracker still resets on re-registration. Replace
the deleted tests with a REMOVED_WEBAPP_PLUGIN sweep test mirroring the 8b
pattern.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* remove mount_overlay, left_of_channel_name; add after_channel_name

* simplifications: remove slots, no after name decorator, intro fixed

---------

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…tch endpoint (#36868)

* MM-68976 Preserve PluginSettings.SignaturePublicKeyFiles on config patch endpoint

The full PUT /api/v4/config endpoint silently preserves
PluginSettings.SignaturePublicKeyFiles (added in #13682), but the sparse
PUT /api/v4/config/patch endpoint had no equivalent guard, so a session
with sysconsole_write_plugins could modify the field through it.

Mirror the full update endpoint's behavior by silently preserving the
existing value in patchConfig, and add a regression test equivalent to
the one in TestUpdateConfig.

* MM-68976 Document SignaturePublicKeyFiles as non-modifiable in config API spec

Both the update and patch config endpoints preserve
PluginSettings.SignaturePublicKeyFiles; note this in the OpenAPI
descriptions alongside the existing PluginSettings.EnableUploads note.
* MM-68960 Improving UX for custom selections

- Keeping selection made stored client-side
- Starting form with empty preset selection

* Adding unit tests for new changes

* MM-68954 Fixing style of classification header in settings modal

* UX improvements

- Removing extra 16px spacing below alert
- Ensuring that the input of a newly added classification level automatically receives focus
…r custom endpoints (#37014)

* Validate Azure storage account name format

For the commercial and government clouds the storage account name
becomes part of the service hostname, so enforce Azure's documented
format (3 to 24 lowercase letters and digits) both in config
validation and when building the service URL. Also treat an empty
AzureCloud as commercial, consistent with the URL builder.

* Route Azure custom endpoints through httpservice

The Azure custom-cloud backend now issues requests through
httpservice's transport rather than the SDK default, so they honor
ServiceSettings.AllowedUntrustedInternalConnections like other
outbound connections. The commercial and government clouds keep the
SDK default transport, which Private Link deployments rely on.

The allowlist value is plumbed into FileBackendSettings, and the
host/IP checks are factored into a shared httpservice helper that
MakeTransport now uses too.
@pull pull Bot locked and limited conversation to collaborators Jun 15, 2026
@pull pull Bot added the ⤵️ pull label Jun 15, 2026
@pull pull Bot merged commit c621c9f into code:master Jun 15, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants