server-ci.yml always triggers now, but ci-report and ci-artifacts were
missed when #37557 gated the other jobs on needs.go.outputs.relevant-changed.
On PRs that don't touch server code, build-mattermost-server and the test
jobs are skipped, so ci-artifacts fails trying to download a
server-dist-artifact that was never uploaded, and ci-report fails trying
to validate test logs that don't exist. Skip both cleanly instead.
Co-authored-by: Hanzo Dev <[email protected]>
* Make server-ci.yml always trigger so required checks never get stuck pending
Required status checks (e.g. "Server CI Complete") never get reported for a
commit whose workflow run was skipped by the top-level `paths` filter, which
leaves them stuck "Pending" forever and blocks merging PRs that don't touch
server code. Move the path filtering into a job-level `if:` gated on a new
`relevant-changed` output instead, so the workflow always runs and always
reports a status.
* Fail ci-complete explicitly when the go job doesn't succeed
Previously ci-complete ran unconditionally (if: always()) and its step just
echoed a success message, so if the go job failed (e.g. the new
relevant-changed detection step erroring out), all downstream jobs would be
silently skipped due to unset outputs, yet ci-complete would still report
"Server CI Complete" as green. Add go to needs and explicitly fail the step
when needs.go.result != 'success', while keeping the existing always()/FIPS
skip-tolerance behavior so the check still always gets reported.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs: fix dark-mode code block contrast, plan plugin SDK reference migration
- Change the outgoing webhooks pseudo-JSON example to a `text` fence
instead of `json`, since the malformed JSON caused Prism to
misinterpret `//` inside a URL as a comment, rendering it as a
distracting highlighted link in dark mode.
- Restore contrast for Prism's comment token and the active/hover
table-of-contents link in dark mode, both of which were nearly
invisible against the current dark background colors.
- Add a handoff plan for restoring the three plugin SDK reference pages
that were left as migration placeholders (previously rendered by Hugo
shortcodes parsing live Go/TS source).
* docs: remove migration plan doc from this PR
The plugin SDK reference migration plan is a separate piece of handoff
work, not part of this dark-mode contrast fix — drop it from this PR
(kept locally, untracked, for handing off separately).
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs(sidebar): regroup Administration Guide Onboard and Scale sections
Onboard (34 files) and Scale (28 files) were still flat, unrouped lists
unlike their already-regrouped Configure/Manage/Integrations siblings.
Apply the same manual-grouping-override pattern:
- Onboard: SAML SSO, Other SSO & Identity (OAuth/OIDC/AD-LDAP),
Multi-Factor & Certificate Auth, Guest Accounts & Delegated
Administration, User Provisioning & Bulk Data, Migrating to Mattermost.
- Scale: Capacity Planning (scale-to-N-users pages + storage sizing),
High Availability & Architecture, Search Infrastructure, Observability
& Monitoring, Caching — with Scaling for Enterprise kept as a standalone
landing page since it's a general entry point, not a group member.
Extends the existing orphan-check warning logic in buildAdminGuideSidebar
to also cover Onboard/Scale, so future filesystem drift surfaces the same
way it already does for Configure/Manage. Files stay flat on disk, no
URLs move.
* docs(sidebar): align Onboard/Scale subgroups with Sphinx's live nav
Sphinx's actual toctree groups these files differently than the initial
regroup guessed: SAML/OAuth/OIDC/AD-LDAP all live under one identity
bucket (not split SAML vs "other"), guest/permissions pages sit under a
plain "User management" label, and — most notably — 21 of Scale's 28
files (capacity planning, HA/architecture, search infra, caching) are
navigated to from Deployment Guide -> Reference Architecture in Sphinx,
not Administration Guide, even though their Sphinx URLs stay under
/administration-guide/scale/.
- Merge Onboard's samlSso/otherSso groups into one "SSO & Identity"
group, with SAML nested as its own sub-category inside it.
- Rename "Guest Accounts & Delegated Administration" to "User
Management".
- Physically move the 21 Scale files that Sphinx navigates to from
Deployment Guide into deployment-guide/reference-architecture/scale/,
and add a new `scaling` group to DEPLOYMENT_GROUPS mirroring that
split. Administration Guide -> Scale keeps only the 7
monitoring/observability pages.
- Rewrite the ~130 internal .mdx links that pointed at the old
/administration-guide/scale/* paths for the moved files, and update
the 31 matching Sphinx->Docusaurus redirect targets in
active-redirects.json.
Regenerated the sidebar with zero orphan warnings; all files accounted
for exactly once.
* docs(sidebar): flatten Scale's remaining Observability & Monitoring group
With the 21 architecture/capacity/search files moved to Deployment Guide,
Scale is down to 7 monitoring pages under one theme — wrapping them in
their own "Observability & Monitoring" sub-category just adds a redundant
nesting level (Scale > Observability & Monitoring > 7 files). List them
flat directly under Scale instead.
* docs(sidebar): move Calls docs to deployment-guide, dissolve Storage & Database group
Calls (RTCD, offloader, Kubernetes, logging, metrics) is a deployment/
operations concern, not settings-reference material — physically move the
6 Calls docs from administration-guide/configure/ into a new
deployment-guide/calls/ directory and add a matching `calls` group to
DEPLOYMENT_GROUPS, slotted right after Server/Scaling. Rewrite every
cross-reference across docs/ (including the two PDF book manifests) to the
new /deployment-guide/calls/calls-* paths, and add/update the matching
active-redirects.json entries so old URLs keep resolving.
Also dissolve the "Storage & Database" group in Configure — its three
pages (configuration-in-your-database, environment-variables,
azure-blob-storage) become plain top-level entries instead of a
single-purpose subgroup; no files move since their URLs are unchanged.
* docs(calls,scale): fix RST-migration artifacts and stale links flagged in review
Fixes still-valid review findings on the Calls/Scale content moved in this
branch:
- calls-metrics-monitoring.mdx: unescape HTML-entity braces in inline RTCD
metric names ({/} -> {}), which is unnecessary in fenced/inline
code and rendered literally; convert two legacy docs.mattermost.com
absolute links to root-relative internal links, pointing the
Prometheus/Grafana link at its current post-move location under
deployment-guide/reference-architecture/scale/ rather than the stale
administration-guide/scale/ path.
- calls-rtcd-setup.mdx: convert the ICE Host Override link to a
root-relative path; convert two leftover Sphinx ```{note}``` fences to
the <Note> component (one of these was rendering as barely-readable
plain text due to being an unrecognized code-fence language, not a
proper admonition); add a <Warning> ahead of the community-maintained
installation scripts link.
- elasticsearch-setup.mdx: remove a stray leftover ":start-after:
:nosearch:" Sphinx directive rendering as literal page text.
- opensearch-setup.mdx: remove blockquote (`>`) prefixes wrapping every
numbered-step code fence (another RST-migration artifact), convert a
raw <div class="note"> to <Note>, and unescape HTML-entity braces/angle
brackets in the YAML/JSON/Terraform examples.
- deploy-rhel.mdx: fix the "RTCD setup and configuration" link to point
at calls-rtcd-setup instead of the general calls-deployment-guide page.
- pdf/books/deployment-guide.json: add the two Calls pages missing from
the PDF spine (calls-metrics-monitoring, calls-rtcd-setup).
Skipped: the raw entity-escaped `{}` in calls-rtcd-setup.mdx's <style>
block is intentional (real JSX context, not a code fence/span) and the
"code comment colors nearly invisible" screenshot turned out to be the
same {note}-fence bug above, not a separate Prism/CSS issue -- fixed by
the <Note> conversion. Two more Sphinx ```{note}``` fences exist in
administration-guide/onboard/sso-saml-keycloak.mdx and
sso-saml-adfs-msws2016.mdx but weren't part of the flagged findings, so
left untouched.
---------
Co-authored-by: Hanzo Dev <[email protected]>
The mobile navbar slide-out (.navbar-sidebar) always has a dark denim
background regardless of theme, but its menu links inherited the
light-mode --ifm-menu-color* values tuned for the light desktop
sidebar, rendering dark navy text on a dark navy panel. Scope the
dark-on-dark ("readable on dark") menu color values to .navbar-sidebar
unconditionally, and fix the "Back to main menu" button's text color
which was relying on the same now-changed background.
Co-authored-by: Hanzo Dev <[email protected]>
* docs(sidebar): support 3 levels of TOC nesting for End User Guide > Collaborate
Addresses item 6 of Eric Sethna's docs revamp feedback ("Can we support
three levels of nesting in the TOC? ... ie End-user guide > Collaborate").
PR #37630 (open, not merged) applies the manual-grouping-override pattern
to Administration Guide > Onboard/Scale but doesn't touch End User Guide,
and the pattern isn't a shared generic engine — each section gets its own
small builder/regroup pair. This adds that pair for Collaborate
(COLLABORATE_GROUPS/COLLABORATE_ORDER/COLLABORATE_HIDDEN +
buildCollaborateItem/regroupCollaborate/buildEndUserGuideSidebar),
regrouping its 49 flat files into Channels, Messaging & Threads, Calls &
Screen Sharing, Teams/Groups & Roles, Integrations & Connected Apps, and
Keyboard Shortcuts & Accessibility — giving End User Guide > Collaborate >
[group] > page, a genuine 3rd nesting level. Files stay flat on disk; no
URLs move.
* docs(sidebar): support inline subgroup specs in buildCollaborateItem
Addresses CodeRabbit review comment on #37663: buildCollaborateItem only
handled spec.group lookups, unlike buildAdminManageItem which also
supports inline {label, items} subgroup specs (used e.g. for the
Attribute-Based Access Control 4-level nesting under Admin Manage).
Detect spec.items before falling back to the COLLABORATE_GROUPS lookup
so Collaborate can gain the same nested-subgroup capability if needed,
without changing today's generated sidebar output.
* docs(sidebar): merge Collaborate regroup with master's agents-docs promotion
Rebasing onto master surfaced a duplicate 'buildEndUserGuideSidebar'
declaration: master gained its own End User Guide override (promoting
the Agents plugin's usage-tips page, from #37627) after this branch was
cut, so git's non-conflicting merge silently produced two function
bodies with the same name — a SyntaxError caught by CI's docs build
check, not by the rebase itself.
Merged both overrides into a single buildEndUserGuideSidebar: keeps the
agents usage-tips promotion from master, plus this branch's Collaborate
regrouping into COLLABORATE_GROUPS. Verified with a clean
'npm run build:sidebars' run (zero warnings) after initializing the
docs/vendor/mattermost-plugin-agents submodule locally to stage agents
docs first.
* docs(sidebar): clarify TOC nesting depth wording, reorder Collaborate items
- README: describe the inline sub-group nesting as a third category
level / four-level path instead of ambiguous "3rd level" wording.
- Move invite-people out of the mismatched "Teams, Groups & Roles"
group into its own top-level Collaborate entry, placed first.
- Reorder "Teams, Groups & Roles" so learn-about-roles leads the group.
---------
Co-authored-by: Hanzo Dev <[email protected]>
Drop the left-edge accent bar on the "Secure Collaborative Workflow",
"Integration & AI Platform", and "Sovereign, Cyber-Resilient
Deployment" intro panels — the surrounding denim wash/borders already
signal the section boundary, so the extra bar was redundant decoration.
Co-authored-by: Hanzo Dev <[email protected]>
* Fix homepage width, card-title weight, and deploy-k8s code block clutter
The homepage's hide_table_of_contents:true dropped the usual 75% width
cap DocItem/Layout applies via docItemCol, so prose read much wider
than every other doc page. Restore the cap unconditionally.
CardGrid's card titles ("For End Users", etc.) used Archivo Black at
900 weight, the same too-heavy/shouty treatment already fixed for
h1-h4 — switch to the sans face at 700 to match.
On the Kubernetes Operator deploy page, strip inline "# comment"
annotations out of the YAML/shell snippets (moving anything useful
into surrounding prose), and replace nested blockquotes used purely
for list indentation with plain nested lists, since the blockquotes
were triggering the site's yellow-bordered blockquote styling at
every nesting level for no reason.
* Fix oversized Restore icon on the Send messages doc page
restore_F099B.svg was the only icon under docs/site/static/img/ui
missing explicit width/height attributes (every sibling icon sets
width="24" height="24"). Without them, the browser falls back to its
default SVG replaced-element size instead of the 24x24 the inline
.theme-icon usage expects, rendering it many times larger than the
surrounding text.
---------
Co-authored-by: Hanzo Dev <[email protected]>
The "Integrate & Extend" card and inline link pointed to /developers/integrate,
which has no index page (only its "Get started" subcategory does), causing a
404. Point both links to /developers/integrate/getting-started instead.
Co-authored-by: Hanzo Dev <[email protected]>
* Remove/restyle "vibe coded" yellow left-border signal on docs cards/blocks
Nick Misasi flagged in the "Docs Revamp - Feedback" channel (2026-07-22/23):
"Docs look great! Left border like this is a pretty common 'vibe coder'
signal. Wonder if we should just remove it? I see the yellow left border
in a few other places too. Regardless of whether its AI built or not, I
don't know if that signal is the first thing we want a reader to see"
tokens.css already documents --mm-color-marigold as "accent — CTAs only,
used sparingly", so this restores that contract: marigold left borders on
static, non-CTA content blocks/cards are replaced with the site's primary
denim brand color, while genuinely deliberate marigold accents (navbar
underline, CTA pill, section rule, h2 rule accent, copy-button hover) are
left untouched.
- CardGrid: removed the always-on marigold left border from the card grid
(the "For Administrators"/"For Developers" cards from the screenshot);
hover state now uses a neutral border-strong color instead of marigold.
- PlanAvailability: .plan badge left border marigold -> denim, matching
the Edition/Deployment/Attestation badge family.
- EditionAvailability: dropped the marigold .edition variant override so
Edition and Deployment badges share the same denim left edge.
- IMEDiagram: intro-panel (Application/Integration/Deployment) left border
and icon color marigold -> denim, with a lighter denim tint in dark mode.
- DeploymentArchitectureBuilder: .miniFlow/.flow protocol chips left
border marigold -> denim (the per-role box legend, which uses marigold
as one of several deliberate type colors, is left unchanged).
- custom.css: blockquote left border marigold -> border-strong (neutral),
since it applied unconditionally to every blockquote site-wide.
* Restyle CardGrid nav cards after removing marigold left border
Replace the flat left-border accent with elevation cues (rounded
corners, resting/hover shadow, background tint on hover, and a
circular arrow/icon affordance) so cards still read as clickable
without the decorative bar. Fix dark-mode card surface, which was
hardcoded to a navy shade nearly identical to the page background.
* Fix invisible dark-mode left border on Plan/Edition badges
border-left-color was still hardcoded to the dark denim brand color
in [data-theme='dark'], blending into the near-black background.
Add the lighter --mm-denim-300 override used elsewhere on this
branch (IMEDiagram, DeploymentArchitectureBuilder).
* Fix low-contrast focus ring and inaccurate marigold-usage comment
- CardGrid: marigold focus outline was ~1.7:1 against the white card
surface, under the 3:1 WCAG 1.4.11 minimum. Switch to denim, with
a lighter dark-mode override.
- IMEDiagram: reword the marigold usage comment to match tokens.css's
actual contract ("CTAs only, used sparingly") instead of the
narrower and incorrect "interactive/hover states only" framing.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* Remove unreviewed IA-redesign content, restructure air-gapped docs from legacy source
The docs-experimental -> monorepo migration (#37330) brought in draft
scaffolding from a proposed IA redesign that was never reviewed and has
no basis in the legacy Sphinx docs or the actual product. This removes
it and, where a real legacy page existed, rebuilds the content from
that source instead.
Removed (no legacy-docs equivalent, entirely speculative):
- administration-guide/upgrade/upgrade-v11.mdx - a per-major-version
upgrade guide "stub" with literal placeholder text
("*Per-release, version-specific procedure authored by
release-management team.*"); this per-version guide concept never
existed in the old docs.
- deployment-guide/air-gapped-operations/offline-license-activation.mdx
- fabricated procedure and config-setting claims with no legacy
source and no verification against the product.
- security-guide/compliance-frameworks/fedramp-moderate.mdx - a live
"in-process" FedRAMP authorization badge and NIST 800-53 control
mapping table that was never reviewed or signed off by compliance/
legal.
Restructured from the legacy air-gapped-deployment.rst content (real,
previously-published guidance, just reorganized into smaller pages):
- air-gapped-operations/index.mdx - high-level overview, dropped the
invented "Persona scope" note, "Roadmap (Phase 2)" section, and
unverified deployment contexts (DoD SIPRNet/JWICS, sovereign-cloud,
tactical-edge/DDIL) that had no basis in the legacy docs.
- air-gapped-operations/quick-start-runbook.mdx - replaced the
fabricated (and off-by-one) "12 steps" with the legacy RST's actual
6-step deployment overview.
- air-gapped-operations/mirror-package-repositories.mdx - replaced
invented artifact/registry guidance with the legacy Bill of
Materials, Plugins, SSL/TLS, and registry-mirroring setup content.
- air-gapped-operations/disable-phone-home-features.mdx - replaced the
invented "phone-home inventory" table (unverified config.json key
names) with the legacy doc's actual per-feature configuration
guidance (push notifications, email, link previews, GIF picker,
notices, telemetry).
Also fixed every cross-reference broken by the above (persona landing
pages under for/, the compliance-frameworks index, DISA STIG and DoD
IL4/IL5 pages, and a few deployment-guide pages that linked to the
removed/renamed content).
The broader for/ persona-landing-page tree and the DISA STIG / DoD
IL4-5 compliance pages still reference the same unreviewed IA redesign
and need a follow-up pass, but are out of scope for this change.
* Soften DISA STIG customer-responsibility wording on DoD IL4/IL5 link
"Validated configuration guidance" overstated what the linked DoD
IL4/IL5 page actually provides (a documented control mapping, not a
third-party-validated one). Matches the "documents the gap honestly"
framing already used elsewhere on these compliance pages.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs: fix broken mm-ref:/mm-doc: placeholder links from RST migration
During the Sphinx/RST-to-Docusaurus/MDX conversion, every RST :ref: and
:doc: cross-reference role was converted into a dead link using a
made-up, non-functional URI scheme (mm-ref:/mm-doc:) instead of a real
path, leaving ~228 broken links across ~20 docs/main files.
Decode each payload and resolve it to a working relative link, computing
the target heading's anchor slug (via github-slugger, matching
Docusaurus's own heading-id algorithm) where the original :ref: pointed
at a specific section. A few links with no confidently matching target
are marked with a TODO comment for follow-up.
* Resolve remaining ESR link TODOs and rebuild mangled version table
The three mm-ref: TODOs left by the previous pass pointed at RST
:ref: labels (release-v9-11-extended-support-release, etc.) that
exist as real headings in unsupported-legacy-releases.mdx and
mattermost-v10-changelog.mdx, not in release-policy.mdx. Resolved
them to the correct anchors.
While fixing the links, also rebuilt the surrounding table: it was
the same blockquote/dl/dt-with-literal-RST-separators artifact seen
elsewhere in the RST-to-MDX migration, plus a phantom 4th table
column. Cross-checked against the legacy RST source
(server-deployment-planning.rst) to confirm it's really 3 columns.
* Fix anchor over-extension and truncated RST fragments in table cells
- authentication-configuration-settings.mdx / site-configuration-
settings.mdx: the migrated doc links wrapped far more text than
intended ("multi-factor authentication (MFA) | - System Config
path: ..." / "threaded discussions | - System Config path: ...").
Closed the anchor immediately after the link label so the System
Config path text renders as plain text outside the link, matching
the pattern used elsewhere in these tables.
- client-availability.mdx: three table cells (Preview image links,
Join existing team, Create a new team) retained truncated RST
:ref: label fragments ("ments>`__", "eam>`__", "team>`__") left
over from the conversion. Removed them - the checkmark cells
already carry the correct support indicators, cross-checked against
the legacy RST source table.
* Fix stray absolute doc link and leaked table separators
- important-upgrade-notes.mdx: the first Compliance Export doc link in
the v10.5 row pointed at the absolute docs.mattermost.com/*.html URL
instead of the site-relative canonical path (the second link in the
same cell already used the correct path).
- client-availability.mdx: 15 feature-name links across the Messages,
Channels, Teams, Playbooks, Calls, Authentication, and Other tables
had leftover RST table-separator artifacts ("| | | |") bleeding into
the anchor text. Removed them so the link boundary matches the
correctly-converted rows elsewhere in the same tables.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* Fix leftover RST/malformed MDX admonition syntax
Docusaurus/MDX admonitions use `:::type[Title]` for a custom title, not
the old Sphinx `.. type::` RST directive or a bare `:::type Title` (which
Docusaurus renders as a type with the literal text "Title" appended, not
a real title). Fixed 12 files using the malformed `:::type Title` form,
plus two leftover `.. image::` RST directives (converted to `<img>` tags,
covered in the images commit's file but noted here since it's the same
admonition-adjacent cleanup pass) in manage-your-security-preferences.mdx.
* Fix broken images: port missing screenshots from legacy docs repo
26 files referenced screenshots/diagrams via relative paths (`../images/x`,
`../../images/x`) that don't resolve anywhere in this repo — the assets
were never migrated during the Sphinx-to-Docusaurus conversion, and in
one file (ad-ldap-groups-synchronization.mdx) the filenames were also
corrupted with a leftover `%0A` (encoded newline) prefix from the
conversion.
Ported the 46 missing image files from mattermost/docs (source/images/)
into docs/site/static/images/ — the location every other working image
reference in this repo already resolves against — and rewrote every
relative reference to the root-absolute `/images/<file>` form used
elsewhere in these same files (e.g. server-logout-indicator.png).
Verified via a full scan: all 680 `/images/...` references across
docs/main now resolve to a real file on disk.
* Fix oversized/broken checkmark icons in EMM config table
The EMM configuration reference table used bare <img src="../../_static/images/check-circle-green.svg" /> for ~24 "supported" checkmarks — a legacy Sphinx path that doesn't exist in this repo (broken image) and, with no explicit size, would render at native SVG size rather than as a small inline checkmark (oversized icon). Replaced with the actual migrated asset (/img/ui/checkmark.svg) plus explicit width/height and alt text.
* Fix wide comparison table wrapping on the plans page
The plans/pricing table (7 columns: Feature Category + 5 editions +
Available From) had no table-layout or column-width rules, so the
first ("Feature Category") column — which holds long, wrapping prose —
ended up roughly the same rendered width as the edition columns, which
only ever hold a short checkmark or version string. That forced every
row onto several wrapped lines. Added `table-layout: fixed` with
explicit per-column widths (28% category / 10% per edition / 22% for
"Available From") so the category column gets the space it needs.
* Fix images broken on non-root baseUrl deployments (PR previews)
Docusaurus only rewrites image URLs for the site's baseUrl when using
markdown image syntax (``) — that gets compiled to
a webpack require() call. A raw HTML `<img src="/images/x.png" />` tag
is left as a literal string, which the browser resolves from the domain
root, ignoring baseUrl entirely.
On production baseUrl is "/", so this silently worked by coincidence.
But PR preview builds set BASE_URL to "/mattermost/pr-<N>/"
(.github/workflows/docs-preview-template.yml), so every raw <img
src="/images/..."> or src="/img/..."> 404s specifically on preview
deployments — which is why images added/fixed earlier in this branch
still showed as broken in the PR's docs preview.
This is a pre-existing, repo-wide pattern (503 raw <img> tags across
103 files, most untouched by this PR otherwise) rather than something
introduced by earlier commits here — those commits just added a few
more instances of an existing broken pattern. Fixed all of them by
importing @docusaurus/useBaseUrl and wrapping src={useBaseUrl('/images/...')}
so the URL is correctly rewritten for whatever baseUrl the site is
built with.
Verified: all 503 useBaseUrl(...) calls resolve to a real file under
docs/site/static, and every modified file was checked with @mdx-js/mdx
compile() to confirm no syntax breakage from the added import
statements.
* Fix leftover RST list/table markup in notifications docs
- mobile-troubleshooting.mdx: replace leading blockquote markers (>)
under step 3 with list-content indentation so the nested numbered
substeps and screenshots render as part of the ordered list instead
of a blockquote.
- manage-your-notifications.mdx: replace the mangled blockquote/dl
header row (with literal RST separator runs and stray | and +
characters) with a proper <thead><th scope="col"> row, and restore
the "Icon badge (dot)" row as a normal <tbody> row.
* Rebuild mangled security preferences table from RST source
Cross-checked against the legacy RST source to reconstruct the table
correctly: proper <thead>/<th scope="col"> header, real ordered/
unordered lists instead of pipe-joined literal text, working internal
links in place of unresolved mm-ref: URIs, and a <Note> block for the
sign-in method callout (previously rendered as literal ".. note::"
text). Also dropped a stray phantom third table column left over from
conversion.
* Fix typos and remaining markup issues in collaborate/notifications docs
- message-priority.mdx: fix "acknowlegement" typo, add missing "the"
before "message" in the acknowledgement description.
- organize-conversations.mdx: split the Tip's two bullets onto
separate lines and drop the escaped leading hyphen that was
preventing the first item from rendering as a list.
- organize-using-custom-user-groups.mdx: fix "preferreed" typo and
add missing "to" in the archived-group restoration instructions.
- schedule-messages.mdx: fix "dislays" typo.
- manage-your-notifications.mdx: replace the leftover dl/dt/dd/
line-block markup in the Push notifications row with a plain anchor
link, matching the Web/Desktop cells elsewhere in the table.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs: mark scale partial pages as unlisted with proper titles
These MDX files are content partials imported into the scale-to-*-users
pages, mirroring the :orphan:/:nosearch: Sphinx pages they were migrated
from. Without frontmatter, Docusaurus rendered them as full standalone
pages with an ugly slug-derived title, breadcrumbs, and pagination.
unlisted: true keeps their routes alive (needed by the PDF book builder
and legacy redirects) while hiding them from the sidebar, breadcrumbs,
pagination, and search indexing.
* fix(docs-preview): set commit status via gh api for correct target_url
The shared mattermost/actions/delivery/update-commit-status action accepts
a target_url input but ignores it, hardcoding the Actions run URL instead.
This made the docs-preview PR check's Details link point at the workflow
run rather than the S3-hosted preview site.
Switch docs-preview-template.yml and docs-preview-fork.yml to call the
GitHub Statuses API directly via `gh api repos/.../statuses/{sha}`, matching
the pattern in e2e-tests-playwright.yml, so the success status's target_url
points at the actual preview URL.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* Fix readability & accessibility issues from Docs Revamp feedback
Addresses the readability/accessibility batch collected 2026-07-22/23 in
the "Docs Revamp - Feedback" channel and Eric Sethna's first-pass review
doc:
- Dark-mode "note" callout text vs. background contrast (Michael
Roberson; Eric Sethna's doc item 8) — pin explicit brand colors for
dark-mode admonitions instead of Infima's generic secondary-alert
pairing.
- Link color/body-text visual distinction, both themes (Vishal
Choudhary, Marco Kundt; Eric Sethna's doc item 5) — new link colors
that stay far apart in luminance from surrounding body text (not just
from the page background), plus default (not hover-only) underlines.
- Body text should read darker, like the old docs site (Vishal
Choudhary) — wire --ifm-font-color-base to --mm-text-primary instead
of Infima's unbranded default.
- Main content panel doesn't visually "pop" against the side nav/TOC
(Vishal Choudhary) — tint the sidebar/TOC panels with --mm-bg-subtle
and leave the reading column on the page background.
- Dark-mode inline code contrast (Marco Kundt) — explicit text color via
--mm-text-primary.
- Bold/color combo hard to read (Ben Cooke) — subtle letter-spacing on
bold runs in prose.
- Heading/TOC category font not readable, vs. the readable "IME" example
(Eric Sethna's doc item 1) — swap the 900-weight display face out of
small multi-word TOC category labels for the base sans face at bold
weight, matching the same fix already applied to navbar links.
- Inline code spans taking up excess vertical space (Eric Sethna's doc
item 9) — pin line-height on inline `code` so it stops inheriting the
1.65 paragraph line-height; multi-line fences are unaffected.
- Prose max-width too wide on large screens (Rohith Chandran) — cap
top-level article prose at ~760px via a `.markdown > `-scoped rule that
leaves the OpenAPI 2-column layout (nested deeper) untouched.
Full WCAG contrast math for every changed pair is in the PR description.
Note: this touches docs/site/src/css/custom.css and tokens.css, which a
parallel "remove yellow left border" workstream also touches (callout/
card border styles) — left border/accent-bar colors are deliberately
untouched here to minimize overlap, but a merge conflict is still likely.
* Address review feedback on readability/a11y PR
- Extend dark-mode admonition background fix from "note" to all five
alert types (info/success/warning/danger) — the "hard on the eyes"
complaint (item 13) wasn't note-specific. Also pin the alert heading
label and icon color explicitly, since Infima's inheritance made the
"NOTE"-style label the most visibly low-contrast part of the callout.
- Drop the default underline on prose links; use medium weight (600) as
the non-color WCAG 1.4.1 cue instead, keeping underline for hover/focus
only.
- Stop forcing code blocks to our --mm-denim-800 background in dark mode.
Docusaurus's dark Prism theme (dracula) has its own background/token
contrast pairing; overriding just the background broke that pairing.
Letting the theme's own background show through (already applied to
the block's container via --prism-background-color) fixes contrast.
- Apply the same small/multi-word-heading fix already used for TOC
category labels to table column headers, which have the identical
problem (multi-word labels in the 900-weight display face). Left
footer titles on the heading face since those are short single words,
the case that face handles fine — documented why.
* Fix dark-mode contrast for code blocks, inline code, and note callouts
Code block, callout, and inline-code backgrounds/borders all sat within
~1:1 contrast of the dark-mode page background (same navy hue family),
so they had no visible edge or fill distinct from the page. The
unscoped dark-mode `code` background rule also leaked into code
blocks' own `<code>` element (beating Infima's `pre code: transparent`
on specificity), masking most of the code block fill behind a
near-black overlay regardless of the fill color chosen.
* Fix dark-mode contrast for blockquotes, inline code, and table stripes
Same root cause as the earlier code-block/callout fixes: --mm-denim-800
and --mm-denim-700 sit within ~1:1 contrast of the dark-mode page
background, so blockquotes, inline code chips, and even-row table
striping all had no visible fill against the page. Switched them to
--mm-bg-surface (+ denim-400 borders where a border exists) to match
the surface treatment already used elsewhere.
* Tone down h1 title weight; revert prose max-width cap
- h1 page titles were still on the 900-weight Archivo Black poster
face after h2-h4 got moved to a normal-weight sans face for the
same "too heavy/shouty" reason. Bring h1 in line with the rest so
every page title uses one consistent weight.
- Revert the 760px max-width cap on top-level markdown prose blocks
(added for Rohith Chandran's wide-line-length feedback) — it also
squeezed non-article layouts like the homepage's persona cards.
Needs more thought before reapplying narrower/more targeted.
* Trim verbose CSS comments introduced in this branch
Cut reviewer-name/item-number attributions and repeated exploratory
narrative down to the "why" a future reader actually needs, and fixed
a couple of comments left stale by later commits (e.g. h1 no longer
using the Archivo Black display face). Also dropped a redundant
background declaration in the dark-mode .callout override that just
re-set the same value the base rule's --mm-bg-surface already
resolves to per theme.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs: vendor and stage Mattermost Agents docs for Docusaurus build
The migration plan externalized Agents links, but the Docusaurus sidebar
generator already declares an `agents` TOP_LEVEL category and stub pages
link to `/agents/docs/*` paths with no content behind them. Vendor the
mattermost-plugin-agents docs/ folder as a submodule and stage it into
main/agents/docs/ at build time (mirroring how Sphinx handles the same
submodule via conf.py excludes), so the Agents sidebar category and
internal links resolve to real, versioned content instead of dead ends.
* docs: strip leading license comment before MDX-staging Agents docs
Three feature pages (channel_summaries.md, custom_prompts.md,
managing_agents.md) lead with a raw <!-- Copyright ... --> HTML comment
before the # Title line, which broke both title extraction (regex only
matched a title at the very start of the file) and the Docusaurus build
(MDX doesn't parse bare HTML comments the way Markdown does, so it failed
to compile with "Unexpected character '!'"). Strip the license comment
before further processing instead of trying to convert it.
* docs: fail loudly on missing Agents submodule, fix usage comment path
- A missing/uninitialized vendor/mattermost-plugin-agents submodule
previously logged a warning and returned a successful zero-count
result, letting CI/prestart/prebuild continue with an empty (or, on a
reused workspace, stale) Agents section instead of failing. Now it
clears any previously staged output first, then throws so the build
fails clearly when the submodule isn't present.
- Fixed the usage comment referencing the nonexistent docs-site/scripts
path instead of the actual docs/site/scripts.
* docs: checkout submodules in docs-ci.yaml build check
This is the third docs-building workflow (alongside docs-cd.yml and
docs-preview-template.yml) that runs npm run build on docs/site, and it
was missed when submodules: true was added to the other two — its
"Build docs site" step failed on this PR because
vendor/mattermost-plugin-agents wasn't checked out, which
stage-agents-docs.mjs now correctly treats as a hard failure.
* docs: inline Agents content instead of a separate top-level LHS section
Sphinx never gives Agents its own top-level nav entry: it `.. include::`s
admin_guide.md/user_guide.md directly into the existing curated pages
(administration-guide/configure/agents-admin-guide.rst and
end-user-guide/agents.rst), and only nests a handful of files
(providers, aws_bedrock_setup, sovereign_ai, usage_tips) as small hidden-
toctree children of those same two pages. load-testing.md,
upgrading_to_2.0.md, and all of features/*.md are never referenced in any
Sphinx toctree at all.
The previous vendoring approach staged all 12 files as a brand-new,
disconnected top-level "Agents" category, so reaching the actual guide
meant leaving the curated page, opening an unrelated top-level section,
and drilling into "Docs" — the opposite of what Sphinx does today.
This reproduces Sphinx's structure instead:
- stage-agents-docs.mjs now categorizes the 12 vendored files: admin_guide/
user_guide are staged twice — once as a normal (but `unlisted: true`)
doc for direct-link parity with Sphinx's orphan pages, and once as a
Docusaurus Markdown partial (leading underscore, auto-excluded from
routing/sidebars) for inline import. providers/aws_bedrock_setup/
sovereign_ai/usage_tips are staged as normal listed docs. Everything
else is staged unlisted, matching Sphinx never surfacing them in nav.
- Added generic relative-markdown-link rewriting (mirroring the existing
image-path rewriting) so cross-links between vendored files
(`../admin_guide.md#anchor`, `features/channel_summaries.md`, etc.)
resolve correctly regardless of nesting depth or where the linking
content ends up rendered.
- agents-admin-guide.mdx and end-user-guide/agents.mdx now `import` and
render the partials inline instead of linking out, and no longer link
to a separate "Docs" section.
- gen-documentation-sidebar.mjs: removed the standalone `agents`
TOP_LEVEL category. Added `{doc: '<full id>'}` support to
buildAdminConfigureItem for cross-directory group items, and a new
ADMIN_CONFIGURE_GROUPS.agents group nesting providers/aws_bedrock_setup/
sovereign_ai under agents-admin-guide. Added a standalone
promoteDocToCategory helper (End User Guide has no full manual-grouping
override) to nest usage_tips under end-user-guide/agents.
- Documented both patterns (cross-directory group items, Markdown-partial
inlining) in docs/site/README.md's "Manual grouping overrides" section.
Validated: stage-agents-docs.mjs + gen-documentation-sidebar.mjs both run
clean with zero warnings; a scoped @mdx-js/mdx compile check across all
16 affected files (2 curated pages + 12 staged docs + 2 partials) passes
with zero failures. Full `docusaurus build` still needs the OpenAPI
prebuild's Go toolchain, unavailable in this sandbox — already covered by
docs-ci.yaml in CI.
* docs(agents): self-host the plugin-v2 upgrade guide link
Now that mattermost-plugin-agents/docs is vendored and staged into
/agents/docs/*, point the two "how to upgrade to Agents v2" references
(v11 changelog, important upgrade notes) at our own
/agents/docs/upgrading_to_2.0 page instead of an external GitHub blob
link — the same self-hosting fix already applied to the old dangling
sample-file links.
* docs(agents): tighten stage-agents-docs.mjs header comment
Same explanation, fewer words — trims the file-level comment from ~45
to ~33 lines without dropping the rationale (why staging instead of a
direct submodule checkout, and how the three-way listed/unlisted/
inline-partial split reproduces Sphinx's nav).
---------
Co-authored-by: Hanzo Dev <[email protected]>
These MDX files are content partials imported into the scale-to-*-users
pages, mirroring the :orphan:/:nosearch: Sphinx pages they were migrated
from. Without frontmatter, Docusaurus rendered them as full standalone
pages with an ugly slug-derived title, breadcrumbs, and pagination.
unlisted: true keeps their routes alive (needed by the PDF book builder
and legacy redirects) while hiding them from the sidebar, breadcrumbs,
pagination, and search indexing.
Co-authored-by: Hanzo Dev <[email protected]>
* docs: remove What's New in v11 stub page
The page was scaffolding seeded during the IA-redesign migration
(#37330) and never received real content, so it shouldn't be live in
the preview. Drops the sidebar entry and cleans up the cross-links
from the v11 upgrade guide.
* docs(site): tone down in-body heading weight
h2-h4 were rendering in the same 900-weight Archivo Black display
face as h1 page titles, making body section headers (e.g. "Buy a
subscription") look as loud as the hero title. Reserve the heavy
display face for h1 and use Inter at a normal bold weight for h2-h4.
* docs(site): make h1's heavy display weight explicit
h1 relied on the shared --ifm-heading-font-weight variable to render
at 900. Now that h2-h4 override that variable locally, spell out the
weight on h1 directly so it isn't implicitly coupled to a variable
other rules no longer use.
* docs(site): shrink oversized titles on the search results page
Each hit's title on /search is a plain h2 rendered outside .markdown,
so it fell through to the full 1.85rem heading size — as large as an
in-article section header. Scope it down via the SearchPage's own
wrapper class instead of the plugin's hashed CSS-module class.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs(sidebar): group Integrations Guide and Administration Guide > Configure
Both sections were flat lists (20 and 34 items respectively) with no
logical grouping, unlike Overview/Deployment Guide which already got
manual groupings. Adds the same override pattern:
- Integrations Guide: group by integration type (Chat & Meeting
Interop, ITSM & Dev Tools, No-Code Automation, Built-in
Integrations with Webhooks/Slash Commands sub-groups).
- Administration Guide > Configure: group the ~12 settings-reference
pages under one category, plus Search, Calls, Storage & Database,
Email & Notifications, Billing & Account, and Branding groups.
AI Agents Configuration stays a standalone top-level entry (3rd,
after System Console Settings and Search) rather than being buried
in a misc/optional bucket.
* docs(sidebar): document the manual grouping override pattern in README
Nothing explained how OVERVIEW_GROUPS/DEPLOYMENT_GROUPS (and now
ADMIN_CONFIGURE_GROUPS/INTEGRATIONS_GROUPS) work, or what to do when
adding a new file to one of these sections. The script already warns
on orphaned files, but that warning is easy to miss if you don't know
the override mechanism exists in the first place.
* docs(sidebar): reorganize gen-documentation-sidebar.mjs, config on top
Pure reorganization, no behavior change (verified byte-identical
sidebar JSON output before/after). All manual-grouping config
(*_GROUPS/*_ROOT_ORDER/*_HIDDEN constants for Overview, Deployment
Guide, Administration Guide > Configure, Integrations Guide) now
lives together at the top of the file, and all functions (generic
helpers, per-section builders, main) live together at the bottom.
Previously each section's config and builder functions were
interleaved in file order, so adding a page to one section meant
scanning past unrelated sections' logic to find where its config
lived.
* docs(sidebar): remove the empty Samples section
Sphinx never had a "Samples" navigation section — source/samples/ in
the Sphinx repo is marked :orphan: and deliberately excluded from any
toctree; it's a folder of downloadable static assets (JSON/XML/YAML/
CSV/zip) referenced inline via :download: from ~5 unrelated pages
(logging, EMM mobile deploy, Grafana/Loki centralized logging,
compliance export), never a browsable page.
The migrated docs/main/samples/index.mdx was an empty stub (frontmatter
only, no content), so it rendered as an empty top-level sidebar
category with nothing underneath — the "looks broken, not coming
soon" problem. Removed the stub page and the corresponding TOP_LEVEL
entry in the sidebar generator.
Note: the actual downloadable sample files were never migrated into
the new site's static assets — the 4 migrated pages that reference
them still link to github.com/mattermost/docs (the old repo) instead
of being self-hosted. Tracked as a separate follow-up, not fixed here.
* docs: self-host downloadable sample files instead of linking the old repo
Four migrated pages (logging, EMM mobile deploy, Grafana/Loki
centralized logging, compliance export) linked their downloadable
sample files (JSON/XML/YAML/zip) to github.com/mattermost/docs — the
old Sphinx repo — instead of hosting them on the new site. Every other
static asset (images) was copied into docs/site/static/ during
migration; these were missed.
Copies the 8 referenced files into docs/site/static/files/samples/
and repoints all 8 links to the self-hosted /files/samples/... paths,
matching the existing /images/... convention used everywhere else in
this content tree.
* docs(sidebar): remove the Recipes top-level nav section
The Sphinx source for this content (recipes/product-vulnerability-
incident.rst) is marked :orphan: with an explicit comment: "This page
is intentionally not accessible via the LHS" — Sphinx never surfaced
it as a navigable section either.
The migrated page (docs/main/recipes/product-vulnerability-incident.mdx)
was auto-promoted into a full top-level sidebar category by the
filesystem-driven generator, at equal visual weight to sections with
10+ items despite having exactly 1. Removing the TOP_LEVEL entry
matches Sphinx's original intent — the page stays reachable by direct
URL, just not discoverable via the sidebar.
* docs(sidebar): regroup Administration Guide > Manage by task
Manage had 37 files split into a flat top level (19) plus a nested
manage/admin/ sub-folder (18) — a raw filesystem artifact, not a real
Sphinx grouping: Sphinx has no manage-index.rst/toctree that groups
this content, and the admin/ sub-folder is never surfaced as its own
nav level in Sphinx's actual sidebar. Worse, the flat-vs-admin split
was internally inconsistent — related pages (monitoring/health,
billing, user/access management) were each scattered across both
buckets rather than following any coherent theme.
Replaces both with task-based groups: User & Access Management
(including an Attribute-Based Access Control sub-group), Server
Configuration & Maintenance, Monitoring & Diagnostics, Billing &
Licensing, Cloud Workspace Management, Notifications & Surveys,
Content & Product Governance, and Data Export & Migration. Customize
Branding stays a standalone entry (single item, not worth its own
group).
* docs(sidebar): harden buildAdminGuideSidebar's category resolution
Filter the items-fallback lookup to type === 'doc' before reading
.id, matching the same pattern already used in buildDeploymentSidebar
(dirNameFromId), instead of relying on category items implicitly
lacking an .id field.
Also track whether the Configure and Manage sub-categories were
actually found and regrouped, and warn if either is missing — so a
future filesystem change under Administration Guide (renamed/removed
sub-folder) surfaces as a build warning instead of silently leaving
the manual grouping override unapplied.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* ci: consolidate docs-preview checks into one status with preview URL
Drop the same-repo status-update jobs that cluttered the PR checks list,
and post a single docs-preview commit status whose Details link opens the
preview environment.
* remove comment
* Remove duplicate failure status update in docs-preview-fork workflow
The deploy job already posts a failure commit status via the shared
template, making the separate update-failure-status job redundant.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs(P13c): add missing manage-plugins.mdx to Administration Guide Configure
source/administration-guide/configure/manage-plugins.rst existed in the
Sphinx repo pre-fork but was never carried over during the initial P2
move or the P13c Configure reconciliation pass. Port it verbatim
(RST -> MDX) with links/anchors verified against the current docs/main
tree (mmctl-command-line-tool, plugins, plugins-configuration-settings,
popular-integrations, environment-configuration-settings#maximum-file-size,
air-gapped-deployment).
#### Release Note
```release-note
NONE
```
* docs(P13/P14): port remaining content drift into monorepo
Ports outstanding content-only drift identified in docs-experimental
phase-P13/P14: V11.9 docs major release content, Azure Blob Storage
guide, ID-attribute case-sensitivity notes, ranked attribute types and
attribute value masking for ABAC, plugin management guide linkage, and
the P14 markdown action buttons reference page with its
interactive-messages cross-reference. Excludes all automation/workflow
files, which are handled separately.
* docs(sidebar): link top-level category headers to their landing page
buildCategory() only recognized a literal index.md(x) filename as a
category's landing page, but Overview, Deployment Guide, Administration
Guide, Security & Compliance, End User Guide, Integrations Guide, Get
Help, and Use Case Guide all use a *-index.md(x) filename instead (to
avoid collisions when flattening for URL stability). As a result,
clicking most top-level sidebar categories only expanded/collapsed the
list instead of navigating to their overview page. Recognize the
*-index.md(x) convention as a fallback so these categories link
correctly, matching the existing Deployment Guide/Overview behavior.
* docs(P13/P14): fix blog link typo and restore dropped Open Source Components entry
Audit against Sphinx source (docs/source/product-overview/) found two
drops from the 7e915c99f8 content-drift port:
- mattermost-v11-changelog.mdx: blog link slug had an erroneous "-0"
(mattermost-v11-9-0-is-now-available -> mattermost-v11-9-is-now-available),
likely copy-pasted from the v11.8.0 entry above it.
- mobile-app-changelog.mdx: the 2.42.0 release entry's "Open Source
Components" subsection (voximplant/react-native-foreground-service
removal) was dropped entirely during the RST->MDX port.
#### Release Note
```release-note
NONE
```
* docs(fix): remove standalone SQL comment line breaking MDX parse
A lone "--" comment line inside a <pre><code> SQL block was parsed by
remark as a setext heading underline, splitting the surrounding
paragraph and leaving the <code> tag unclosed. CI caught this in the
docusaurus build. Merge the comment into the surrounding paragraph.
* docs(fix): escape curly braces in JSONB path literal breaking SSG render
'{options}' inside a SQL <pre><code> block was parsed by MDX as a JSX
expression referencing an undefined "options" identifier, causing
"ReferenceError: options is not defined" during static site
generation. Escape the braces the same way already done for other
JSONB path literals elsewhere in this file. Verified with a full local
docusaurus build.
* docs(sidebar): reuse the landing-file resolver for nested category sorting/labels
The prior fix only applied the index.md(x) / *-index.md(x) fallback to
a category's own link resolution. Nested category sort keys and the
category label fallback still assumed a literal index.mdx, so a
sub-directory using the *-index.md(x) naming convention would sort by
its default position (9999) instead of its declared sidebar_position,
and its category label would fall back to a humanized directory name
instead of the landing page's title. Factor the resolver into a shared
findIndexFile() helper and use it in both places.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs(P13f): reconcile scale/search/monitoring drift from legacy docs repo
Ports content drift from mattermost/docs (Sphinx) into the migrated MDX
pages under administration-guide/scale: Elasticsearch v9 support and
v7.17 deprecation, corrected AWS OpenSearch access policy guidance
(open principal instead of an unsupported IAM-principal policy) plus an
OpenSearch v1.x deprecation notice, new search-engine outage
health-monitor documentation, and plugin-metrics /metrics aggregation
notes.
* docs(P13f): update scale-to-N-users Azure DB SKUs to Intel E*ds v5
Replaces the Azure RDS reader/writer instance SKU (E*as v6, Intel
"as v6" family) with E*ds v5 (Intel "Eds v5" family) across all nine
scale-to-N-users reference architecture pages, matching the upstream
correction in mattermost/docs.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* Add Algolia site verification to docs robots.txt
Adds an algolia-site-verification comment to prove DNS ownership of the
docs.mattermost.com CloudFront distribution for the Algolia Crawler.
* Use Algolia-Crawler-Verif header format
Match the exact verification comment key expected by Algolia's crawler.
---------
Co-authored-by: Hanzo Dev <[email protected]>
An orphaned, empty package-lock.json at the repo root (with no
matching package.json) was accidentally introduced in #36143. It
breaks the delivery-platform release pipeline's SBOM generation step,
since `snyk sbom --all-projects` cannot resolve a lockfile without a
package.json and aborts the whole scan.
Co-authored-by: Hanzo Dev <[email protected]>
* Enable Mermaid rendering for release policy Gantt chart.
Docusaurus requires the theme-mermaid plugin and standard ```mermaid fences instead of Sphinx MyST ```{mermaid} syntax.
* Fix clipped text in important upgrade notes table.
Convert the migrated RST grid table to a two-column layout and restore proper table cell display so long upgrade notes wrap instead of being cut off.
* Fix PostgreSQL version policy table formatting.
Replace the broken Sphinx grid-table markup with a standard HTML table so version, release date, and minimum PostgreSQL version render correctly.
* Fix callout rendering in Linux deployment guides.
Replace unrendered ::: admonition syntax with the project's Note, Tip, and Important MDX components in the RHEL and tarball install guides.
* Add version filter to important upgrade notes page.
Port the Sphinx version-filter widget to a React component so admins can narrow upgrade notes by source and target version during the docs migration.
* Fix UpgradeNotesFilter TypeScript row element typing.
Use querySelectorAll<HTMLTableRowElement> so table row refs satisfy the RowRef type during docs-site typecheck.
* Improve release policy Gantt chart readability.
Port the Sphinx Mermaid styling so done and active bars render blue, ESR bars render red, and task labels use larger bold white text inside the bars.
* Fix upgrade notes filter and table layout.
Wait for the table to mount before collecting versions, hide whole version groups to avoid rowspan breakage, and restore a fixed two-column table layout so note text is no longer clipped.
* Fix markdown table header column alignment.
Restore native table layout for standard docs tables so thead and tbody share column widths; keep the upgrade-notes wrapper for wide tables that need horizontal scroll.
* Fix illegible release policy Gantt chart text.
Mermaid renders the Gantt SVG at a viewBox sized to its own internal
layout, then Docusaurus scales it down (~0.57x) to fit the docs
content column. Task/section labels configured at 14px were rendering
on-screen at ~7px, unreadable without manually zooming the browser.
Scale up the diagram's font size and spacing to compensate.
* Fix header line wrap and cell overflow in upgrade notes table
Force a line break in the header label and constrain header/cell
styling so the two-line header no longer overlaps itself, and long
cell content (including SQL code blocks) wraps within the column
instead of overflowing the table.
* Make Mermaid Gantt outside labels readable in light mode.
---------
Co-authored-by: Hanzo Dev <[email protected]>
Docs preview cleanup and build workflows no longer post PR comments.
The build workflows now surface the preview URL via the commit status's
target_url instead, so the status check links directly to the preview.
Co-authored-by: Hanzo Dev <[email protected]>
* docs(P13a): add Azure Native VM page, team channel policies page, and azure screenshots
* docs(P13a): use Note/Important JSX components for consistency with directory siblings
* docs(P13a): wire Azure Native VM into Install on Linux sidebar and card grid
The new deploy-azure-native-vm.mdx page was orphaned from navigation: the
Deployment Guide sidebar's "Install on Linux" grouping and the "Choose an
install method" card grid on deploy-linux.mdx are both manually maintained
lists, so adding the file alone didn't surface it anywhere.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* Fix broken checkmark icons and zoom-breaking tables on Plans and Cloud pages
The Plans page referenced a Sphinx-era static image path that doesn't
exist in the Docusaurus site, rendering broken icons. The Cloud
subscriptions comparison table was a mangled RST-to-MDX conversion
artifact (nested dl/dt/dd, literal ASCII borders, unresolved checkmark
substitutions) with fixed column widths that clipped content on zoom.
Both tables now use the site's checkmark.svg icon and scroll
horizontally within their own container instead of breaking the page.
* Reconcile Product Overview content drift from docs repo
Applies content that landed in mattermost/docs between 2026-05-14 and
2026-07-13 (v11.7/v11.8 server releases, v10.11 dot releases, v6.2/v5.13.7
desktop releases, v2.40-2.41.3 mobile releases, and related subscription/
FAQ/deprecation copy updates) to the corresponding MDX pages in
docs/main/product-overview, per phase P13 sub-phase 4.1 of the docs
migration plan.
* Fix duplicate changelog bullet and admin console path in Product Overview
- Remove duplicate flagged-post-visibility bullet from the v11.7.3 changelog entry.
- Correct subscription.mdx admin console path to include the Reporting menu, matching the path used elsewhere in the docs.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs(P13c): reconcile Configure content drift — audit log/telemetry cleanup, mobile ephemeral mode, watermarking, plugin/integration defaults, CJK fix
Ports content drift from the legacy mattermost/docs Sphinx repo into the
Administration Guide > Configure MDX pages (phase P13, sub-phase P13c):
- environment-configuration-settings: remove unused ExperimentalAuditSettings
file-rotation settings (now handled via AdvancedLoggingJSON), update
EnableDiagnostics description to reflect Rudder/telemetry removal (Sentry
only), and add the Mobile ephemeral mode settings.
- experimental-configuration-settings: remove the same unused audit logging
settings, and add the experimental Enable Mobile Watermark setting.
- site-configuration-settings: update Report a Problem default behavior and
fix the ReportAProblemMail env var name, add Channel category sorting, and
add the Classification Markings section.
- integrations-configuration-settings: fix OutgoingIntegrationRequestsTimeout
key name and default value.
- plugins-configuration-settings: fix RequirePluginSignature default (false).
- reporting-configuration-settings: rename Site statistics to System
statistics, preserving the legacy anchor.
- enabling-chinese-japanese-korean-search: fix missing semicolon in the
zhparser SQL example.
- system-attributes: rename "Custom attributes for user profiles" to "User
attributes" to match the v11.7 product rename.
authentication-configuration-settings had no net drift to apply: the source
commit reviewed (LDAP/SAML ID case-sensitivity notes) was later reverted
upstream, and Azure Blob Storage documentation (hinted in the task) was also
added then fully reverted upstream, so no Azure content exists in either the
source or target repo.
* docs(P13c): fix config.json key for Enable Mobile Watermark setting
ExperimentalSettings.EnableMobileWatermark does not exist in config.go;
the actual field is ExperimentalSettings.EnableWatermark.
---------
Co-authored-by: Hanzo Dev <[email protected]>
Ports upstream mattermost/docs drift into the Integrations Guide (ServiceNow auth table URL, GitHub org vs. repo webhook guidance, Zapier link fix), Security Guide (Mobile Ephemeral Mode, mobile watermarking), Use Case Guide (Mission-Ready Mobile ephemeral mode references), and Get Help (community chat search bar wording).
Co-authored-by: Hanzo Dev <[email protected]>
Ports drift from the Sphinx docs repo into 11 of the 12 Deployment Guide
MDX pages: K8s builtin DB readiness check, RHEL/tar release version
bumps, RHEL 7/8 v12.0 deprecation notice, Elasticsearch v9 support,
Intune MAM plan availability fix, mobile /mobile-logs command, mobile
watermarking + Ephemeral Mode docs, desktop app version bumps + macOS
MDM support, and reference architecture port table restructuring.
#### Release Note
```release-note
NONE
```
Co-authored-by: Hanzo Dev <[email protected]>
Ports upstream mattermost/docs content drift (auto-translate rename, channel banner classification markings, membership-policy/ABAC updates, AI Actions rewrite menu, GIF frame limits, and related v11.7/v11.8 end-user copy) into the corresponding docs/main End User Guide MDX pages.
Co-authored-by: Hanzo Dev <[email protected]>
* docs(P13e): reconcile drift for Administration Guide onboard/upgrade/comply pages
Ports content changes made in the legacy Sphinx docs repo since the P13
migration fork point (2026-05-14) into the corresponding MDX pages: SAML/SSO
Entra ID namespace-matching guidance, granular permissions updates, upgrade
notes for v11.7/v11.8, OSS component list, and minor typo/link fixes across
onboard, upgrade, and comply sections.
* docs(P13e): fix MDX compile failure from blank lines inside <pre><code> blocks
Blank lines inside JSX <pre><code> blocks are parsed as paragraph
boundaries by MDX, breaking the enclosing tag matching. Remove the
blank lines used for SQL readability while keeping each statement on
its own line.
* docs(P13e): fix insecure curl example and legacy absolute doc link
- electronic-discovery.mdx: use https for the authenticated curl
example, matching the other curl examples in the same page.
- important-upgrade-notes.mdx: point the Deprecated Features reference
at the local route instead of the legacy docs.mattermost.com URL.
---------
Co-authored-by: Hanzo Dev <[email protected]>
Ports content drift from the legacy Sphinx docs repo (mattermost/docs)
since the P13 migration fork point into the corresponding Administration
Guide > Manage MDX pages:
- ABAC v11.7/v11.8: public channel membership policies (advisory vs.
hard-gate behavior), channel-level permission policies, policy
simulation, and team-scoped membership policies in Team Settings
(abac-channel-access-rules, abac-system-wide-policies,
attribute-based-access-control)
- User Attributes: separate Display Name/Attribute name fields,
backfill note, terminology updates
- Content flagging: quarantined message report generation and post
deletion report documentation
- Autotranslation: translation target language and language-pair
clarifications
- Generating support packet: sanitize typo fixes, removed stale
ElasticsearchSettings.ClientKey reference
- Installing license key: Site Statistics -> System Statistics rename
- Team/channel members: SetChannelMembers bulk API note
- Telemetry: removed Rudder/Segment-specific reporting details
following the telemetry stack migration
- Statistics: Site Statistics -> System Statistics rename
- Health check probes: corrected Go import path example
- mmctl: documented --workers flag for import process, renamed
Custom Profile Attribute -> User Attribute in cpa command docs
- Logging: removed unused audit log file rotation settings from the
Cloud defaults note
Co-authored-by: Hanzo Dev <[email protected]>
* ci: add docs PR preview workflows (P10)
Adds preview builds for PRs touching docs/** or api/**, deployed to the
existing mattermost-docs-preview-pulls S3 bucket under a repo-scoped
mattermost/pr-<N>/ prefix so they don't collide with mattermost/docs's
own previews of the same bucket. Fork PRs are handled via a manual
workflow_dispatch since they can't access secrets; previews are cleaned
up automatically on PR close for both same-repo and fork PRs.
* fix: use PR author for docs preview TRIGGERING_ACTOR
pull_request.head.user.login is the owner of the head repo/branch, not
the PR author -- for same-repo PRs (head repo == base repo) this
resolves to the org name instead of the contributor who opened the PR.
pull_request.user.login is always the actual PR author.
* docs: reword docs preview PR comment
* fix: harden docs preview workflows
- docs-preview-fork: add explicit permissions (statuses/pull-requests
write, contents read) instead of relying on default token scope.
- docs-preview-template: validate PR_NUMBER is digits-only and quote
the S3 destination before use in the upload step, guarding against
script injection via the fork dispatch's free-text input.
- docs-preview-template: add a per-PR concurrency group so an older,
slower build can't overwrite a newer upload.
- docs-preview/docs-preview-fork: replace secrets: inherit with an
explicit secrets mapping, and declare the secrets contract on the
reusable template, so only the two AWS preview credentials are
passed instead of every repo/org secret.
* fix: align docs preview build/permissions with docs-ci, drop 3rd-party comment action
- docs-preview-template: add Set up Go (api/server/go.mod), matching
docs-ci -- make -C api build shells out to `go run .` for code
sample extraction and needs a pinned toolchain, not whatever happens
to be preinstalled on the runner.
- docs-preview-template: drop the explicit "Build OpenAPI spec" step;
npm run build's prebuild lifecycle script already runs
make -C api build, so it was running twice.
- docs-preview-template: replace peter-evans/create-or-update-comment
with plain `gh pr comment`, dropping a third-party action pin;
behavior is unchanged (posts a new comment every run).
- docs-preview: add explicit permissions (contents: read,
pull-requests: write) so the reusable workflow's requested
pull-requests: write isn't silently downgraded by a restrictive
default token policy.
* fix: use gh pr comment in docs-preview-cleanup, drop 3rd-party action
Same swap already made in docs-preview-template.yml -- gh is
preinstalled on the runner, so this drops another third-party action
pin. Also quotes the S3 URI via env vars for consistency with the
template's upload step.
* fix: replace pull_request_target with pull_request in docs-preview-cleanup
zizmor flags pull_request_target as a dangerous trigger by default.
Switch to plain pull_request, guarded to skip fork PRs (which don't
get secrets on this event) -- fork preview cleanup will be handled by
a separate scheduled sweep instead. Also fixes a stray '=' character
that had crept into the file.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs: resolve cross-file anchor mismatches from RST-to-MDX migration
The Sphinx-to-Docusaurus migration converted `:ref:`/`{ref}` links using
naive text-slugification, so anchors that pointed to headings in a
different file (e.g. release-summary tables linking into their
respective changelog pages) were emitted as same-page fragments and
silently resolved to nothing.
Built a label registry from the original Sphinx `.. _label:` / `(label)=`
targets to recover the true source file for each cross-reference, then
rewrote the affected links to point at the correct file + heading
anchor. Fixes 282 broken cross-file anchors, primarily in the mobile/
desktop/server release-summary pages, plus assorted same-page anchor
mismatches caught by re-auditing after the prior admonition/anchor fix.
* docs: manually resolve remaining anchor mismatches after cross-file audit
Hand-verified fixes for anchors that fuzzy-matching alone couldn't
safely resolve (confirmed against actual heading text/context, and in a
few cases against the original RST source, before applying):
- Typos and dropped words carried over from the original Sphinx docs
(e.g. "bot-acocunts", "auto-follow-all-new-channel-threads" ->
"follow-all-new-channel-threads").
- Sphinx auto-generated duplicate-heading IDs (#id1/#id3/#id4) resolved
to their real target headings.
- Numbered-step TOC links in enterprise-roll-out-checklist.mdx that
dropped the leading "N. " used in the actual heading slugs.
- Push-notification docs pointing at the wrong file entirely
(environment-configuration-settings instead of
push-notification-server-configuration-settings).
- SAML "saml-enterprise" label resolved to its true cross-file target
(authentication-configuration-settings#saml-2-0), recovered from the
original RST label definition that the automated registry missed
because it sat after an RST transition marker.
- sso-saml-technical references converted from broken same-page/
malformed-path anchors to correct page links.
* docs: fix SAML 2.0 anchor slug (saml-2-0 -> saml-20)
github-slugger strips periods rather than hyphenating them, so "SAML
2.0" slugifies to saml-20, not saml-2-0 as previously fixed.
* docs: fix broken path links found during docs/main migration cleanup
* docs: convert div.tab blocks to Docusaurus Tabs/TabItem components
* docs: restore missing Kubernetes deployment architecture diagrams
The RST-to-MDX migration never copied over the AWS/Azure/Oracle
architecture diagrams referenced by the deployment-architecture-at-scale
page, leaving broken images in each Tabs/TabItem.
* docs: fix 7 anchor mismatches from the fragment/heading audit
Covers three root causes from the anchor mismatch breakdown:
- Fragment repeated the target page's own title instead of a real
heading, so the link is simplified to point at the bare page.
- Heading exists verbatim but lives on a sibling settings page
(experimental-configuration-settings, push-notification-server-
configuration-settings) rather than environment-configuration-settings.
- A page path was mistakenly pasted into a same-page #fragment instead
of being used as a real cross-page link.
* docs: fix 8 anchor slugs that were close but didn't match the real heading
Repoints links whose fragment was a plausible guess (typo, reworded
heading, or wrong section) at the actual auto-generated slug of the
target heading, confirmed by inspecting each target page directly.
* docs: merge split Tabs blocks so tabs render horizontally
The div.tab conversion script split some sibling tab groups into
separate single-item Tabs blocks whenever a stray blockquote marker
sat between them, causing them to render stacked instead of as one
horizontal tab bar. Merges the MySQL/PostgreSQL and Team/Enterprise
Edition tab groups back into single Tabs blocks.
* docs: remove Azure tab and restore Kubernetes deploy content
The Mattermost Operator, Azure, and Oracle platform tabs on the
Kubernetes deployment guide were split across two separate Tabs
blocks (rendering stacked instead of as one tab bar) and all three
tab bodies were empty because the migration never flattened the
original RST include directives. Removes the unsupported Azure tab
and restores the Mattermost Operator and Oracle content from the
pre-migration RST sources as a single merged Tabs block.
* addresscoderabbitreview
* docs: unify Linux/Kubernetes/Containers deploy pages and fix FIPS/STIG placement
Kubernetes and Containers duplicated full install content across a top-level
page (Tabs) and orphaned sidebar subpages that nothing linked to. Reworked
both to follow the Linux page's pattern: shared content on the landing page,
platform-specific instructions live once in their own subpage.
Also removed configure-fips-at-install-time.mdx, which claimed FIPS is
available for native Linux installs — FIPS/STIG in Mattermost is a container
image property (Chainguard-based build), not available outside Docker/
Kubernetes. Consolidated all FIPS/STIG references onto
containers/fips-stig.mdx and pointed the Mattermost Operator subpage (not
Oracle OKE, which doesn't expose image selection) at it.
* docs: fix review findings — image alt text, Important callout markup, typo
- Replace generic alt="image" on scaling diagrams with descriptive text
identifying cloud provider and user scale.
- Convert raw div.important markup in deploy-containers.mdx to the
repo's <Important> component, matching usage elsewhere in the file.
- Fix "Matermost" typo in manage-your-display-options.mdx.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs: fix broken admonitions and anchors in product-overview changelog pages
The Sphinx-to-Docusaurus migration script only converted lowercase
admonition directives (e.g. ```{note}```), so capitalized/indented/
same-line variants (```{Important}```, ```{Attention}```) were left as
literal text, causing whole sections to render as a single broken code
block. Also convert unconverted MyST `.. meta::` blocks and `(label)=`
anchors (as escaped MDX heading ids) so existing cross-reference links
keep resolving.
Affects: v10/v11 server changelogs, server/mobile/desktop releases,
release policy, unsupported legacy releases, mobile/desktop app
changelogs.
* docs: fix under-indented Important callouts in v10 changelog
The <Important>/**Critical Fixes**/</Important> blocks nested under
several release-entry bullets were indented with only 1 space instead
of the 2-space list-item content column used by sibling sub-bullets,
risking the callout breaking out of the list item during rendering.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* docs: restore missing e2e/mobile push-notification images
These developer-docs images existed in mattermost-developer-documentation's
static assets but were never copied into the monorepo during the docs
migration, leaving broken image links in e2e-cheatsheets.md and the mobile
push-notification pages. Also fixes e2e-cheatsheets.md's image paths, which
used Hugo-style relative paths that don't resolve under Docusaurus.
* docs: fix broken outgoing webhooks screenshot path
The image reference used an absolute path left over from the old Hugo
site (/integrate/faq/images/...), which doesn't resolve under Docusaurus
since no matching file exists under site/static. The image already lives
co-located in docs/develop/integrate/faq/images/, so point to it with a
relative path instead.
* docs: delete Azure AKS deployment guide page
The page's screenshots never made it into the monorepo during migration
and don't exist under any known source (docs, docs-experimental, or
mattermost-developer-documentation). Remove the page rather than ship
broken images; drop it from the PDF book manifest and repoint its legacy
redirect to the general Kubernetes deployment guide accordingly.
* docs: fix heading levels on Kubernetes deploy guides
deploy-k8s.mdx and deploy-k8s-oke.mdx used H1 (#) for their top-level
in-page sections (Installation steps, Common Errors, etc.) instead of
H2. Docusaurus' contentTitle extraction grabs the first H1 it finds
anywhere in the doc, which stole the page title slot from the actual
frontmatter title, so no title rendered at the top of the page. The
flat H1/H2 mix also meant TOC entries for install steps rendered as a
flat list at the page's TOC root instead of nested under their section,
which made the TOC sidebar overflow/misrender on narrower/zoomed
viewports. Bump every heading in both files one level (H1->H2->H3->H4)
so the page title renders and the TOC nests correctly.
* docs: fix TOC/layout horizontal overflow on wide code blocks
The Kubernetes prerequisites page's TOC sidebar overflowed off-screen at
higher browser zoom levels. Root cause: `.docMainContainer` has `max-width:
none !important` (intentional, so OpenAPI's 2-column layout gets full
width), but that removes the container's only width ceiling. Combined with
the default flexbox `min-width: auto` on both the main container (in its
outer flex row with the left sidebar) and the doc content column (in the
inner content/TOC row), a sufficiently wide code block's intrinsic
min-content size could drag the whole row wider than the viewport instead
of scrolling within itself. Add `min-width: 0` at both flex levels so
`overflow-x: auto` on code blocks and tables actually contains overflow
locally, and make the responsive table-scroll CSS apply unconditionally
instead of only under the 996px breakpoint (zoom shrinks effective layout
width without re-triggering the media query).
Also shorten the illustrative base64 example values in the AWS Aurora
Postgres secret example, which were long enough on their own to be a
secondary contributor to the same overflow.
* docs: restore additional missing images found via full static-resolution scan
Docusaurus's build-time image validator doesn't reliably warn on every
broken absolute-path reference, so npm run build alone missed these.
A direct scan of every image reference in docs/develop and docs/main
against the filesystem turned up 38 more genuinely missing images
(desktop architecture, VPN/Pritunl setup, docker dev environment,
i18n-extract tooling, MVP program, onboarding, schema migration guide,
plugin best-practices, and interactive-message screenshots) that were
never copied over from mattermost-developer-documentation during
migration. Two references (interactive-dialog-date.png and
interactive-dialog-datetime.png) remain unresolved because no source
image exists anywhere in the legacy repo.
* docs: fix broken cross-links after .md to .mdx migration
Several Calls admin guide pages and the air-gapped quick-start runbook
were renamed from .md to .mdx during migration, but their internal
cross-links still pointed at the old .md filenames (and, for
setup-tls, the old flattened path), so Docusaurus couldn't resolve
them. Found via a full scan of every relative markdown link under
docs/main and docs/develop against the filesystem, since the build's
own "couldn't be resolved" warnings don't reliably surface every
broken link.
* docs: remove broken date/datetime element screenshots
These screenshots were never captured before migration (broken on
the currently live docs.mattermost.com too), and no source image
exists anywhere in the legacy repos to restore. Remove the broken
references rather than leave a dead image link.
* docs: move newly-restored desktop architecture images to static/
These 4 images were restored co-located next to their content files,
matching an existing (if inconsistent) convention elsewhere in
docs/develop. Since these are new additions rather than pre-existing
working references, move them to docs/site/static/ instead of
perpetuating the co-located pattern. Repo-wide normalization of the
other ~70 existing co-located image references is left for a separate
follow-up PR.
* docs: remove deleted AKS page from sidebar generator's manual grouping
master (#37402) fixed the sidebar generator's SRC path but this
branch's deletion of deploy-k8s-aks.mdx still left a dangling
reference in the Deployment Guide's manual Kubernetes grouping,
which fails Docusaurus's sidebar-doc-id validation at build time.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* ci: add docs CD workflow (P9)
Builds the Docusaurus site and deploys to S3 on every push to master
touching docs/** or api/**, then invalidates CloudFront. Splits the S3
sync into two passes so content-hashed build assets get long-lived
immutable caching while unhashed HTML stays no-cache for near-instant
propagation.
* ci: remove workflow_dispatch trigger from docs-cd
Deploys should only happen via push to master, not manual trigger.
* ci: typecheck before building docs in CD
docusaurus build strips TypeScript types via babel without validating
them, so a type error could still deploy. docs-ci.yaml typechecks the
same commit, but as an uncoupled parallel workflow it doesn't gate CD —
this catches it if CI fails or a required check is bypassed on master.
---------
Co-authored-by: Hanzo Dev <[email protected]>
* Align Docusaurus config for monorepo, wire Algolia DocSearch (P6)
Fixes projectName/editUrl/path references left over from the docs-unified
repo split, adds trailingSlash for predictable CloudFront 404 handling, and
wires an Algolia search block into themeConfig that's only included when
credentials are present (Docusaurus's schema rejects an empty appId/apiKey,
so this keeps builds green with or without them). Also fixes the
sidebar/redirect generator scripts, which still pointed at the pre-rename
docs/ directory instead of main/, and adds docs/Makefile,
.env.local.example, and an updated README for local dev.
* Wire OpenAPI generation to api/v4/source and add docs-ci.yaml (P7)
Replaces build-openapi.mjs's custom YAML-merge implementation with a thin
wrapper around the canonical `make -C api build` target, keeping only the
MDX sanitization step (quote/autolink fixes) that docusaurus-plugin-openapi-docs
needs. Adds a "prebuild" npm script so `npm run build` regenerates the spec
automatically, and ignores the generated api/v4/html artifacts (narrow form,
since ssr_template.hbs and static/favicon.ico under that path are committed).
Also adds docs-ci.yaml as a path-scoped PR/master build+typecheck gate for
the docs site, replacing the legacy `docs` repo's Sphinx-based ci.yml now
that docs live in this monorepo.
* Rename OpenAPI prebuild script for clarity
"prebuild" is an npm lifecycle hook name (auto-runs before "npm run build"),
not a descriptive name, so `npm run prebuild` didn't signal it's specifically
about OpenAPI generation. Split it into "build:openapi" (the actual script,
runnable directly and self-explanatory) with "prebuild" now just delegating
to it, preserving the automatic pre-build trigger.
* Regenerate sidebars automatically before dev/build (P7 fixup)
documentation.generated.json and developers.generated.json are gitignored
and nothing produced them on a fresh checkout, so both `npm start` and
`npm run build` failed with MODULE_NOT_FOUND outside a working tree that
happened to have stale copies lying around. Wire the sidebar generators
into `prestart`/`prebuild` so they're always regenerated first.
* Remove docs/site/.env.local.example
There's a single Algolia DocSearch app for docs.mattermost.com; credentials
aren't distributed to individual developers, so a per-dev .env.local
workflow doesn't apply. Credentials are only ever injected in CI/CD via
repository variables. Local builds/dev server run fine without them (the
Algolia block in docusaurus.config.ts is conditional).
* Wire OpenAPI doc generation into prestart/prebuild, drop unused Makefile
docusaurus-plugin-openapi-docs requires a separate `docusaurus gen-api-docs`
CLI step to populate docs/api/reference/ (gitignored) — nothing was
invoking it, so a fresh checkout's npm start/build failed the same way the
sidebar JSONs did. Split build:openapi into build:openapi:spec (slow, runs
make -C api build) and build:openapi:docs (fast, generates MDX from the
existing spec), and wire prestart to reuse an existing spec instead of
rebuilding it every dev-server start.
Also drops docs/Makefile: four of its five targets were pure passthroughs
to npm scripts, unreferenced by CI or anything else, and there's no
repo-wide `make -C <dir>` convention to fit into.
Note: a duplicate-doc-id build failure (operationId `status` in the
Playbooks OpenAPI spec colliding with the main API's `status` tag) is
being fixed separately in mattermost-plugin-playbooks.
* Fix stale docs/ reference in sidebar generator's error message
The existence check still hardcoded "docs/" in its error text after SRC
was repointed to main/. Use the SRC constant in the message so it can't
drift out of sync with the actual path again.
* remove code comment
* Drop unused artifact upload from docs-ci.yaml
Nothing consumes it: P9's docs-cd.yml will rebuild independently on push
to master rather than downloading it via workflow_run (avoids workflow_run
trigger footguns for an infrequent, cheap-enough rebuild), and P10's
preview build always needs its own independent build anyway (bakes a
per-PR BASE_URL). This was carried over from the old docs repo's ci.yml
out of habit; that repo's own PR-time uploads had the same unused-artifact
issue (only cd.yml's post-merge run ever consumed it).
---------
Co-authored-by: Hanzo Dev <[email protected]>
* Skip docs impact review when Docs/Not Needed label is present
Add a gate job that checks for the Docs/Not Needed label before running
the Claude analysis, so maintainers can opt out without the workflow
re-adding Docs/Needed on subsequent CI runs.
* Simplify docs/not-needed gate using contains() expression
Replace the dedicated check-docs-not-needed job with a contains() check
on github.event.pull_request.labels in the docs-impact-review job's if:
condition. This avoids spinning up a separate runner and an extra API
call to achieve the same opt-out behavior.
---------
Co-authored-by: Hanzo Dev <[email protected]>
Restore the `fullyparallel: false` override for the unsharded
`Postgres with binary parameters` and `Postgres FIPS` jobs in the
weekly workflow. The override was originally added to the binary
parameters job in #35995 to prevent resource exhaustion on a single
runner, but was dropped when both jobs moved into
server-ci-weekly.yml in #36036, leaving them on the template default
of `true`.
Without it, the hosted runner is overwhelmed (too many server
instances, WebSocket hubs, and DB connections) and the runner agent
itself loses communication with GitHub mid-run, surfacing as
"hosted runner lost communication with the server" at ~55-60 min
into the Run Tests step. Both runs on April 27 and May 4 failed
this way; the sharded FIPS variant retained for FIPS-touching PRs
in server-ci.yml is unaffected because each shard handles only a
fraction of the packages.
Co-authored-by: Hanzo Dev <[email protected]>
* Update docs-impact workflow to keep stale comment instead of deleting
When a re-run of the docs impact analysis determines that documentation
updates are no longer needed, the previous bot comment was deleted while
the Docs/Needed label was kept. This left the label without context.
Instead of deleting the comment, update it to explain that a previous
analysis had flagged the PR but the latest run found no docs impact.
This preserves the audit trail and gives maintainers context to decide
whether to remove the label.
Made-with: Cursor
* Update .github/workflows/docs-impact-review.yml
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Use repo checkout for Dockerfile in server-ci-artifacts build-docker job
The build-docker job was downloading server-build-artifact to get the
Dockerfile and supporting files for every PR. Switch to checking out
server/build/ directly from the repo for external PRs, while keeping
the artifact-based flow for same-repo PRs so that Dockerfile changes
can be tested before merge.
Only upload server-build-artifact when the PR comes from the same repo,
since external PRs no longer use it.
Made-with: Cursor
* retrigger pipelines
* undo previous commit
---------
Co-authored-by: Mattermost Build <[email protected]>
- Skip draft PRs and trigger on ready_for_review to run when
a draft is marked ready
- Remove use_sticky_comment (broken upstream, see
anthropics/claude-code-action#1052) and inline review comments
which caused claude[bot] to appear as a PR reviewer
- Write analysis to a file and post it via github-script as a
sticky comment from github-actions[bot], avoiding conflicts
with the Claude Code Review App
- Manage docs/needed label from the file directly
Made-with: Cursor
The claude-code-action blocks bot-initiated workflows by default.
Adding cursor to allowed_bots so PRs opened by Cursor are analyzed.
Made-with: Cursor
* Add -buildvcs=false to default GOFLAGS
This prevents Go from embedding VCS information into binaries, which
avoids false positives in container vulnerability scanners like Trivy
when using Go workspaces with enterprise dependencies.
Also updates mmctl-build target to use $(GO) and $(GOFLAGS) for
consistency with other build targets.
Made-with: Cursor
* Update comment wording
Trigger PR sync to test Enterprise CI
Made-with: Cursor
* Trigger CI to test Enterprise CI fix
Made-with: Cursor
* Test Enterprise CI
Made-with: Cursor
* replace buildvcs metadata in mmctl
* rm redundant -buildvcs=false in GitHub actions
* update mmctl-docs to $(GO)
* simplify getVersionInfo signature
* use GOOS/GOARCH convention
* export GOFLAGS for common use
* Clarify version.go var block comment
---------
Co-authored-by: Jesse Hallam <[email protected]>
* Run docs-impact-review as regular CI instead of slash command
Switch the Documentation Impact Review workflow from a `/docs-review`
slash command trigger to running automatically on pull_request events.
The analysis posts a sticky PR comment and inline comments, and adds a
`docs/needed` label when documentation changes are needed.
Made-with: Cursor
* Address review feedback: harden docs-impact-review workflow
- Remove invalid `direct_prompt` input not recognized by the pinned
claude-code-action version (auto-detects mode from event type).
- Guard Claude step with secret availability check so fork and
Dependabot PRs skip gracefully instead of failing.
- Move label management out of the LLM into a deterministic
github-script step that parses the sticky comment, eliminating
prompt-injection and excessive-agency risks.
Made-with: Cursor
* Fix secret check: use job-level env var instead of secrets context in step if
The secrets context is not available in step-level if expressions.
Evaluate it as a job-level env var and reference that instead.
Made-with: Cursor
* Use paginated API call to fetch all PR comments
Prevents missing the bot comment on busy PRs with more than 30 comments.
Made-with: Cursor
* Address review: add issues:write permission, remove auto-label-removal
- Upgrade issues permission from read to write (required for addLabels API)
- Remove automatic docs/needed label removal to avoid stripping the label
prematurely when the analysis comment hasn't been posted yet
Made-with: Cursor
Change the /api/v4/users/{user_id}/auth endpoint to use
APISessionRequired instead of APISessionRequiredTrustRequester.
This endpoint is a JSON API called via XHR and does not need
the TrustRequester flag which is intended for directly-requested
resources like images and file downloads.
Made-with: Cursor
* Initial Implementation of Push Proxy Authentication
* Include Config Listener for Leader plus delete startup function as job scheduler runs on initialization
* Remove push proxy auth from local imports
* Add push proxy auth to external imports
* Add push proxy auth error messages
* Update error codes
* Fix enterprise dep definition
* make i18n-extract
* Mock System store Get
* m
* m
* m
* m
* Update serverID header
* Add install type env var to docker
* Update Push Proxy config with new options
Global, US, Germany and Japan. Previous configurations will keep working
* use model.SafeDereference
* Delete token when new push proxy URL is empty
* ServerID header only if auth token is available
---------
Co-authored-by: Daniel Schalla <[email protected]>
Co-authored-by: Nick Misasi <[email protected]>
Co-authored-by: Mattermost Build <[email protected]>
* Move from ubuntu to distroless image
* Update updated ubunty image for first stage
* Update server/build/Dockerfile
Co-authored-by: Daniel Schalla <[email protected]>
* Update server/build/Dockerfile
Co-authored-by: Daniel Schalla <[email protected]>
* Add mising env var for health check
* Add mattermost user in /etc/passwd
* Fix e2e userId
* use cypress in place of server. Wget and not curl
* Simplify e2e changes
---------
Co-authored-by: Daniel Schalla <[email protected]>