mirror of
https://github.com/hanzoai/team.git
synced 2026-11-01 07:55:31 +00:00
* SEC-10179 Integrate test system IO for Playwright and Cypress (#36376) * change retry to 1, fixed and disabled failed tests * add v2 templates for Cypress and Playwright E2E tests with test system io integration * add commenting to pr * identify more playwrights to fix separately * disable deletion-report.spec for separate fix --------- Co-authored-by: Mattermost Build <[email protected]> * fix: permission required by test-system-io actions (#36477) * fix: permission required by e2e test-system-io actions (#36478) Co-authored-by: sabril <[email protected]> * chore(ci): consolidate openldap runner prep into a composite action (#36563) Co-authored-by: sabril <[email protected]> * ci: port test-system-io v2 templates from release-11.9 Bring Playwright/Cypress template-v2 in line with release-11.9 so they include prepare-run/prep-deps caching, runner-prep-openldap, and pinned mattermost-test-system-io action SHAs (1631d8fcea24). Bump Playwright v2 workers to 10 to match 11.8/11.9. Prerequisite for cherry-picking #37570 (testcontainers) onto release-11.7. Co-authored-by: sabril <[email protected]> * E2E/Playwright: Add testcontainers to playwright-lib (#37570) * add testcontainers to playwright-lib * include retry mechanism for transient failures * - Introduced a new command `testcontainers:up` in package.json to run Playwright tests with Testcontainers. - Created a standalone Playwright configuration file `playwright.testcontainers-up.config.ts` for managing Testcontainers. - Added a no-op test `testcontainers_up.spec.ts` to ensure the Testcontainers stack is up during the test run. - Implemented a global setup script `testcontainers_up_global_setup.ts` to start and stop the Testcontainers stack. - Updated dependencies in package.json, including adding `chalk` for logging. * fix package-lock * fix tsc and restore waiting for all migrations to complete --------- Co-authored-by: Mattermost Build <[email protected]> * fix(e2e): remove obsolete CRT intro modal dismiss from uiClickSidebarItem The CRT tutorial modal was removed in MM-66470; dismissing #genericModalLabel races and flakes MM-T4261_3. Co-authored-by: sabril <[email protected]> * fix(e2e): sync Playwright navigations to live testcontainers baseURL After restartMattermostContainer remaps the host port, relative page.goto must follow testConfig.baseURL rather than the worker-start config value. Co-authored-by: sabril <[email protected]> * fix(e2e): restore eslint-disable for axe empty fixture pattern Co-authored-by: sabril <[email protected]> * fix(e2e): ignore webhook assets in eslint; prettier README Co-authored-by: sabril <[email protected]> * fix(e2e): prettier-format testcontainers config helpers Co-authored-by: sabril <[email protected]> * ci(e2e): fully adopt test-system-io and lighten Playwright services Port #37413: drop the dual v1/v2 dispatch path, promote the test-system-io templates to the canonical names, and remove legacy calculate-results / AWS artifact upload plumbing. For Playwright testcontainers on this release, leave optional sidecars (openldap, keycloak, elasticsearch, opensearch, minio, azurite, webhook) off by default and remove the related service-specific specs that are not part of the older suite. Co-authored-by: sabril <[email protected]> * style(e2e): prettier stack.ts after optional webhook change Co-authored-by: sabril <[email protected]> * ci(e2e): grant contents:read to test-system-io workflow callers Reusable Playwright/Cypress templates require contents:read. Without it on the caller job, GitHub Actions fails the workflow at startup. Co-authored-by: sabril <[email protected]> * ci: retrigger enterprise build after transient npm cache failure Co-authored-by: sabril <[email protected]> * test(e2e): align testcontainers feature flags with release docker-compose Mirror MM_FEATUREFLAGS_* from e2e-tests/.ci/server.generate.sh for each release, dropping flags that do not exist in that release's FeatureFlags struct (or were never enabled in the compose stack). Co-authored-by: sabril <[email protected]> * ci: retrigger enterprise after flaky message_export Postgres failure Co-authored-by: sabril <[email protected]> * e2e(playwright): omit unset Testcontainers env keys; align release docs When optional webhook/sidecars are off, .env.testcontainers no longer writes PW_*=undefined. Docs match empty DEFAULT_TESTCONTAINERS_SERVICES. Co-authored-by: sabril <[email protected]> * e2e(playwright): prettier-format lib/README.md table Fixes CI npm run check (prettier) failures from the services table edit. Co-authored-by: sabril <[email protected]> * ci: retrigger E2E after Cypress commit-status race Orchestration reported 1 failed unit before retest; final summary was 100% but commit status stayed failure. Retrigger for a clean green. Co-authored-by: sabril <[email protected]> * e2e(cypress): keep tests/support/env import on release-11.7 #36376 switched message_deletion_spec to @/support/env, but this release has no Cypress webpack @ alias (added later). That caused a Webpack Module not found failure and a stuck failed commit status. Co-authored-by: sabril <[email protected]> --------- Co-authored-by: Mattermost Build <[email protected]> Co-authored-by: sabril <[email protected]> Co-authored-by: yasser khan <[email protected]> Co-authored-by: Hanzo Dev <[email protected]>
116 lines
4.1 KiB
Bash
Executable File
116 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# SC2034: <variable> appears unused.
|
|
# https://www.shellcheck.net/wiki/SC2034
|
|
# shellcheck disable=SC2034
|
|
# shellcheck disable=SC2086,SC2223
|
|
|
|
set -e -u -o pipefail
|
|
cd "$(dirname "$0")"
|
|
. .e2erc
|
|
|
|
# Default or assert variables required by the save_report.js script, and document optional variables
|
|
: ${FULL_REPORT:=false} # Valid values: true, false
|
|
: ${TYPE:=NONE} # Valid values: PR, RELEASE, MASTER, MASTER_UNSTABLE, CLOUD, CLOUD_UNSTABLE, NONE (which is the same as omitting it); also known as REPORT_TYPE
|
|
: ${WEBHOOK_URL:-} # Optional. Mattermost webhook to post the report back to
|
|
: ${RELEASE_DATE:-} # Optional. If set, its value will be included in the report as the release date of the tested artifact
|
|
if [ "$TYPE" = "PR" ]; then
|
|
# Try to determine PR number: first from PR_NUMBER, then from BRANCH (server-pr-XXXX format)
|
|
if [ -n "${PR_NUMBER:-}" ]; then
|
|
export PULL_REQUEST="https://github.com/mattermost/mattermost/pull/${PR_NUMBER}"
|
|
elif grep -qE '^server-pr-[0-9]+$' <<<"${BRANCH:-}"; then
|
|
PR_NUMBER="${BRANCH##*-}"
|
|
export PULL_REQUEST="https://github.com/mattermost/mattermost/pull/${PR_NUMBER}"
|
|
else
|
|
mme2e_log "Warning: TYPE=PR but cannot determine PR number from PR_NUMBER or BRANCH. Falling back to TYPE=NONE."
|
|
TYPE=NONE
|
|
fi
|
|
fi
|
|
|
|
# Env vars used during the test. Their values will be included in the report
|
|
: ${TEST:?} # See E2E tests' readme
|
|
: ${BRANCH:?} # May be either a ref, a commit hash, or 'server-pr-PR_NUMBER' (if TYPE=PR)
|
|
: ${BUILD_ID:?}
|
|
: ${SERVER:?} # May be either 'onprem' or 'cloud'
|
|
: ${MM_ENV:-}
|
|
|
|
# Populate intermediate variables
|
|
export BUILD_TAG="${SERVER_IMAGE##*/}"
|
|
export MM_DOCKER_IMAGE="${BUILD_TAG%%:*}" # NB: the 'mattermostdevelopment/' prefix is assumed
|
|
export MM_DOCKER_TAG="${BUILD_TAG##*:}"
|
|
export SERVER_TYPE="${SERVER}"
|
|
export AUTOMATION_DASHBOARD_FRONTEND_URL="${AUTOMATION_DASHBOARD_URL:+${AUTOMATION_DASHBOARD_URL%%/api}}"
|
|
|
|
if [ -n "${TM4J_API_KEY:-}" ]; then
|
|
# Set additional variables required for Zephyr reporting
|
|
if grep -q 'UNSTABLE' <<<"$TYPE"; then
|
|
export TEST_SUITE=prod
|
|
else
|
|
export TEST_SUITE=unstable
|
|
fi
|
|
if [ "$TYPE" = "RELEASE" ]; then
|
|
export SERVER_ARTIFACT_TYPE=release
|
|
else
|
|
export SERVER_ARTIFACT_TYPE=master
|
|
export TEST_IS_DAILY=yes
|
|
fi
|
|
export TM4J_ENABLE=true
|
|
export JIRA_PROJECT_KEY=MM
|
|
export TM4J_ENVIRONMENT_NAME="${TEST@u}/${BROWSER@u}/${SERVER_ARTIFACT_TYPE}-${SERVER_TYPE}-ent${TEST_IS_DAILY:+-${TEST_SUITE}}"
|
|
# Assert that the test type is among the ones supported by Zephyr, and select the corresponding folderId
|
|
case "${SERVER}-${TYPE}" in
|
|
onprem-RELEASE)
|
|
export TM4J_FOLDER_ID="2014475"
|
|
;;
|
|
onprem-MASTER)
|
|
export TM4J_FOLDER_ID="2014476"
|
|
;;
|
|
onprem-MASTER_UNSTABLE)
|
|
export TM4J_FOLDER_ID="2014478"
|
|
;;
|
|
cloud-RELEASE)
|
|
export TM4J_FOLDER_ID="2014474"
|
|
;;
|
|
cloud-CLOUD)
|
|
export TM4J_FOLDER_ID="2014479"
|
|
;;
|
|
cloud-CLOUD_UNSTABLE)
|
|
export TM4J_FOLDER_ID="2014481"
|
|
;;
|
|
*)
|
|
mme2e_log "Error: unsupported Zephyr environment for the requested report (SERVER=${SERVER}, TYPE=${TYPE}). Aborting." >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
: ${TEST_CYCLE_LINK_PREFIX:?}
|
|
: ${TM4J_CYCLE_KEY:-} # Optional. Populated automatically by the reporting script
|
|
: ${TM4J_CYCLE_NAME:-} # Optional. Populated automatically by the reporting script
|
|
mme2e_log "TMJ4 integration enabled. Environment: $TM4J_ENVIRONMENT_NAME"
|
|
fi
|
|
|
|
if [ -n "${DIAGNOSTIC_WEBHOOK_URL:-}" ]; then
|
|
: ${DIAGNOSTIC_USER_ID:?}
|
|
: ${DIAGNOSTIC_TEAM_ID:?}
|
|
mme2e_log "Diagnostic report upload enabled."
|
|
fi
|
|
|
|
# Double check that the "results/" subdirectory to collect report informations from exists
|
|
cd "../${TEST}/"
|
|
if [ ! -d "results/" ]; then
|
|
mme2e_log "Error: 'results/' directory does not exist. Aborting report data collection." >&2
|
|
exit 1
|
|
fi
|
|
|
|
case "$TEST" in
|
|
cypress)
|
|
npm i
|
|
node save_report.js
|
|
;;
|
|
playwright)
|
|
if [ -n "$WEBHOOK_URL" ]; then
|
|
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm i
|
|
# Utilize environment data and report files to generate the webhook body
|
|
node report.webhookgen.js | curl -X POST -fsSL -H 'Content-Type: application/json' -d @- "$WEBHOOK_URL"
|
|
fi
|
|
;;
|
|
esac
|