Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
8841dfd
ci: add TSIO report-upload spike workflow
yasserfaraazkhan Jul 7, 2026
32e83f0
ci: wire desktop CMT + PR/master E2E reporting to Test System IO
yasserfaraazkhan Jul 7, 2026
e0b2c12
ci: fix e2e-pr-trigger concurrency race dropping E2E/Run label
yasserfaraazkhan Jul 7, 2026
78a13cc
ci: pack TSIO inputs into one field to stay under workflow_call's 10-…
yasserfaraazkhan Jul 7, 2026
0c2009e
ci: fix eslint, guard missing results.json, grant TSIO permissions to…
yasserfaraazkhan Jul 7, 2026
b91302d
ci: fix cancel-on-manual-unlabel wiping .github/actions/cancel-e2e-runs
yasserfaraazkhan Jul 7, 2026
ae34016
fix tsio job
yasserfaraazkhan Jul 7, 2026
595cc30
just keep 1 status check
yasserfaraazkhan Jul 8, 2026
d7d4358
just keep 1 status check
yasserfaraazkhan Jul 8, 2026
0dbac2d
lint
yasserfaraazkhan Jul 8, 2026
dc32d51
fix status update
yasserfaraazkhan Jul 8, 2026
e4a7a09
Merge remote-tracking branch 'origin/master' into tsio-spike
yasserfaraazkhan Jul 8, 2026
7f92cad
fix status update to include skipped
yasserfaraazkhan Jul 8, 2026
fcbdca4
clean up
yasserfaraazkhan Jul 8, 2026
29b47e7
test fixes
yasserfaraazkhan Jul 8, 2026
02669f9
coderabbit review
yasserfaraazkhan Jul 9, 2026
63bba56
fix label context
yasserfaraazkhan Jul 9, 2026
0ed6340
fix label context
yasserfaraazkhan Jul 10, 2026
6fa1afd
fix context
yasserfaraazkhan Jul 10, 2026
3acb118
fix context
yasserfaraazkhan Jul 10, 2026
316541a
fix context
yasserfaraazkhan Jul 10, 2026
535721b
report uploading
yasserfaraazkhan Jul 10, 2026
c703097
fix report link
yasserfaraazkhan Jul 10, 2026
688ba42
clean up PR status
yasserfaraazkhan Jul 10, 2026
0e92d65
Fix TSIO summary lint and failed-shard detection.
yasserfaraazkhan Jul 10, 2026
e9b5893
Point PR status link at this run's TSIO group report.
yasserfaraazkhan Jul 10, 2026
7622b65
test fixes
yasserfaraazkhan Jul 10, 2026
96cd730
test fixes
yasserfaraazkhan Jul 10, 2026
52084a6
test fixes
yasserfaraazkhan Jul 11, 2026
611f377
Merge remote-tracking branch 'origin/master' into tsio-spike
yasserfaraazkhan Jul 11, 2026
9bf9beb
test lint
yasserfaraazkhan Jul 11, 2026
9f5b1ac
fix test
yasserfaraazkhan Jul 11, 2026
c3ed3b8
fix(e2e): stop Linux worker teardown hangs after all tests pass
yasserfaraazkhan Jul 11, 2026
cff190a
test lint
yasserfaraazkhan Jul 11, 2026
cbe461e
fix(e2e): use branch-based TSIO display report URL
yasserfaraazkhan Jul 11, 2026
a268b7a
add new tests
yasserfaraazkhan Jul 11, 2026
d6fdb74
move unit test for src/main/e2e/appReady.ts
yasserfaraazkhan Jul 13, 2026
55afc0b
Merge remote-tracking branch 'origin/master' into tsio-spike
yasserfaraazkhan Jul 13, 2026
35b20a1
update linux runner version
yasserfaraazkhan Jul 14, 2026
8c1fe48
fix tests
yasserfaraazkhan Jul 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ jobs:
- name: ci/publish-results
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2.24.0
with:
check_name: Unit Tests (Jest)
comment_mode: failures
compare_to_earlier_commit: false
junit_files: "**/*.xml"
2 changes: 1 addition & 1 deletion .github/workflows/cmt-provisioner.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ permissions: {}

jobs:
trigger-matterwick:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Signal Matterwick to provision CMT servers
run: |
Expand Down
135 changes: 102 additions & 33 deletions .github/workflows/compatibility-matrix-testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,13 @@ concurrency:
cancel-in-progress: true

jobs:
# TSIO reporting model (CMT):
# 1 workflow run → 1 RC cut (DESKTOP_VERSION) → 1 resolved SHA
# → 1 composite_identity (name=cmt-desktop) → 1 TSIO report covering
# every (OS × server-version) matrix leg.
## This is picked up after the finish for cleanup
upload-cmt-server-detals:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: cmt/generate-instance-details-file
run: echo '${{ inputs.CMT_MATRIX }}' > instance-details.json
Expand All @@ -35,9 +39,12 @@ jobs:
retention-days: 1

calculate-commit-hash:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
outputs:
DESKTOP_SHA: ${{ steps.repo.outputs.DESKTOP_SHA }}
CMT_MATRIX: ${{ steps.normalize-matrix.outputs.matrix }}
TSIO_COMPOSITE_IDENTITY: ${{ steps.tsio-identity.outputs.composite-identity-json }}
TSIO_TOTAL_REPORTS_EXPECTED: ${{ steps.tsio-identity.outputs.total-reports-expected }}
steps:
- name: cmt/checkout-desktop
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
Expand All @@ -48,12 +55,56 @@ jobs:
id: repo
run: echo "DESKTOP_SHA=$(git rev-parse HEAD)" >> ${GITHUB_OUTPUT}

# Matterwick still dispatches ubuntu-22.04 for Linux; pin to ubuntu-latest so
# CMT matches PR E2E (24.04) and install-os-dependencies can resolve
# libasound2t64. Same idea as e2e-functional.yml remapping macos-latest → macos-26.
- name: cmt/normalize-matrix-runners
id: normalize-matrix
env:
CMT_MATRIX: ${{ inputs.CMT_MATRIX }}
run: |
NORMALIZED=$(echo "${CMT_MATRIX}" | jq -c '
.environment |= map(
if .runner == "ubuntu-22.04" then .runner = "ubuntu-latest" else . end
)
')
echo "matrix=${NORMALIZED}" >> "$GITHUB_OUTPUT"

# One composite identity + total-reports-expected for the WHOLE CMT run
# (every OS x server-version leg), computed once here and threaded into
# every `e2e` matrix leg below so they land in a single TSIO report group.
- name: cmt/tsio-identity
id: tsio-identity
env:
GITHUB_REPOSITORY: ${{ github.repository }}
MM_SHA: ${{ steps.repo.outputs.DESKTOP_SHA }}
MM_BRANCH: ${{ inputs.DESKTOP_VERSION }}
CMT_MATRIX: ${{ steps.normalize-matrix.outputs.matrix }}
run: |
TOTAL=$(echo "${CMT_MATRIX}" | jq -c '(.environment | length) * (.server | length)')
echo "total-reports-expected=${TOTAL}" >> "$GITHUB_OUTPUT"
COMPOSITE_IDENTITY=$(jq -nc \
--arg repo "${GITHUB_REPOSITORY}" \
--arg sha "${MM_SHA}" \
--arg run_id "${GITHUB_RUN_ID}" \
--arg attempt "${GITHUB_RUN_ATTEMPT}" \
--arg name "cmt-desktop" \
--arg branch "${MM_BRANCH}" \
'{repository:$repo, commit_sha:$sha, gh_run_id:$run_id, name:$name, gh_run_attempt:$attempt, branch:$branch}')
echo "composite-identity-json=${COMPOSITE_IDENTITY}" >> "$GITHUB_OUTPUT"

update-initial-status:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
needs:
- calculate-commit-hash
permissions:
contents: read
statuses: write
steps:
# Best-effort: a transient status-API hiccup here must never block the
# actual test matrix from running — the `e2e` job below needs this job.
- uses: mattermost/actions/delivery/update-commit-status@218fd96a63451259dc100e1292a5e44af92fe15d
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
Expand All @@ -63,7 +114,8 @@ jobs:
description: "Compatibility Matrix Testing for ${{ inputs.DESKTOP_VERSION }} version"
status: pending

# Input follows the below schema
# Input follows the below schema (Matterwick may still send ubuntu-22.04;
# calculate-commit-hash remaps Linux to ubuntu-latest before the e2e matrix).
# {
# "environment": [
# {
Expand Down Expand Up @@ -94,10 +146,15 @@ jobs:
name: ${{ matrix.environment.os }}-${{ matrix.server.version }}
uses: ./.github/workflows/e2e-functional-template.yml
needs:
- calculate-commit-hash
- update-initial-status
strategy:
fail-fast: false
matrix: ${{ fromJson(inputs.CMT_MATRIX) }}
matrix: ${{ fromJson(needs.calculate-commit-hash.outputs.CMT_MATRIX) }}
permissions:
contents: read
actions: read
id-token: write
secrets: inherit
with:
runs-on: ${{ matrix.environment.runner }}
Expand All @@ -106,43 +163,55 @@ jobs:
DESKTOP_VERSION: ${{ inputs.DESKTOP_VERSION }}
MM_SERVER_VERSION: ${{ matrix.server.version }}
TYPE: "CMT"
# Packed as one JSON input (see e2e-functional-template.yml's tsio-config) —
# workflow_call caps reusable workflows at 10 inputs total.
tsio-config: ${{ format('{{"composite_identity":{0},"total_reports_expected":"{1}"}}', needs.calculate-commit-hash.outputs.TSIO_COMPOSITE_IDENTITY, needs.calculate-commit-hash.outputs.TSIO_TOTAL_REPORTS_EXPECTED) }}

# We need to duplicate here in order to set the proper commit status
# https://mattermost.atlassian.net/browse/CLD-5815
update-failure-final-status:
runs-on: ubuntu-22.04
if: failure() || cancelled()
update-final-status:
runs-on: ubuntu-24.04
if: always()
permissions:
contents: read
id-token: write
statuses: write
needs:
- calculate-commit-hash
- e2e
steps:
- uses: mattermost/actions/delivery/update-commit-status@218fd96a63451259dc100e1292a5e44af92fe15d
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# tsio-report-status.js is repo code, not fetched by github-script itself.
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository_full_name: mattermost/desktop
commit_sha: ${{ needs.calculate-commit-hash.outputs.DESKTOP_SHA }}
context: e2e/compatibility-matrix-testing
description: "Compatibility Matrix Testing for ${{ inputs.DESKTOP_VERSION }} version"
status: failure
ref: ${{ inputs.DESKTOP_VERSION }}
persist-credentials: false
sparse-checkout: |
e2e/utils/tsio-report-status.js
sparse-checkout-cone-mode: false

# https://mattermost.atlassian.net/browse/CLD-5815
update-success-final-status:
runs-on: ubuntu-22.04
if: success()
needs:
- calculate-commit-hash
- e2e
steps:
- uses: mattermost/actions/delivery/update-commit-status@218fd96a63451259dc100e1292a5e44af92fe15d
- name: Render TSIO summary + flip commit status
id: summary
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TSIO_COMPOSITE_IDENTITY: ${{ needs.calculate-commit-hash.outputs.TSIO_COMPOSITE_IDENTITY }}
TSIO_TOTAL_REPORTS_EXPECTED: ${{ needs.calculate-commit-hash.outputs.TSIO_TOTAL_REPORTS_EXPECTED }}
TSIO_POLL_ATTEMPTS: 24
TSIO_POLL_DELAY_MS: 5000
COMMIT_STATUS_CONTEXT: e2e/compatibility-matrix-testing
# TSIO only sees test-case-level results — a job-level failure with no
# matching failed test (hung worker teardown, crashed runner, npm ci
# failure) would otherwise still read as "100% passed".
UPSTREAM_JOBS_SUCCEEDED: ${{ needs.e2e.result == 'success' }}
with:
repository_full_name: mattermost/desktop
commit_sha: ${{ needs.calculate-commit-hash.outputs.DESKTOP_SHA }}
context: e2e/compatibility-matrix-testing
description: "Compatibility Matrix Testing for ${{ inputs.DESKTOP_VERSION }} version"
status: success
script: |
const {reportUrl, status, stats} = await require('./e2e/utils/tsio-report-status.js')({
core, context, github,
compositeIdentity: JSON.parse(process.env.TSIO_COMPOSITE_IDENTITY),
totalReportsExpected: parseInt(process.env.TSIO_TOTAL_REPORTS_EXPECTED, 10),
commitStatusContext: process.env.COMMIT_STATUS_CONTEXT,
upstreamJobsSucceeded: process.env.UPSTREAM_JOBS_SUCCEEDED === 'true',
failOnTestFailures: true,
});
core.info(`TSIO report ${reportUrl}: ${status} (${JSON.stringify(stats)})`);


# Instance cleanup is handled by Matterwick: when this workflow completes, GitHub sends a
# workflow_run "completed" event and Matterwick destroys the servers it provisioned for this
Expand Down
Loading
Loading