mirror of
https://github.com/mattermost/mattermost.git
synced 2026-04-15 05:57:37 -04:00
* ci: post correct skip status from within cypress/playwright reusable workflows The 'Required Status Checks' ruleset requires e2e-test/cypress-full/enterprise and e2e-test/playwright-full/enterprise on master and release-*.* branches. When a PR has no E2E-relevant changes, the jobs were silently skipped, leaving required statuses unset and the PR permanently blocked. Architecture fix: instead of a separate skip-e2e job in the caller that hardcodes status context names, the skip logic now lives inside the reusable workflows that already own and compute those context names. Changes: - e2e-tests-cypress.yml: add should_run input (default 'true') + skip job that uses the dynamically-computed context_name when should_run == 'false' - e2e-tests-playwright.yml: same pattern - e2e-tests-ci.yml: change e2e-cypress/e2e-playwright job conditions from should_run == 'true' to PR_NUMBER != '' (always run when there's a PR), pass should_run as input to both reusable workflows
185 lines
7.1 KiB
YAML
185 lines
7.1 KiB
YAML
---
|
|
name: E2E Tests - Playwright
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
commit_sha:
|
|
type: string
|
|
required: true
|
|
enable_reporting:
|
|
type: boolean
|
|
required: false
|
|
default: false
|
|
server:
|
|
type: string
|
|
required: false
|
|
default: onprem
|
|
report_type:
|
|
type: string
|
|
required: false
|
|
pr_number:
|
|
type: string
|
|
required: false
|
|
server_image_tag:
|
|
type: string
|
|
required: false
|
|
description: "Server image tag (e.g., master or short SHA)"
|
|
server_edition:
|
|
type: string
|
|
required: false
|
|
description: "Server edition: enterprise (default), fips, or team"
|
|
server_image_repo:
|
|
type: string
|
|
required: false
|
|
default: mattermostdevelopment
|
|
description: "Docker registry: mattermostdevelopment (default) or mattermost"
|
|
server_image_aliases:
|
|
type: string
|
|
required: false
|
|
description: "Comma-separated alias tags for context name (e.g., 'release-11.4, release-11')"
|
|
ref_branch:
|
|
type: string
|
|
required: false
|
|
description: "Source branch name for webhook messages (e.g., 'master' or 'release-11.4')"
|
|
should_run:
|
|
type: string
|
|
required: false
|
|
default: "true"
|
|
description: "Set to 'false' to skip tests and post a success status without running E2E"
|
|
secrets:
|
|
MM_LICENSE:
|
|
required: false
|
|
REPORT_WEBHOOK_URL:
|
|
required: false
|
|
AWS_ACCESS_KEY_ID:
|
|
required: true
|
|
AWS_SECRET_ACCESS_KEY:
|
|
required: true
|
|
|
|
jobs:
|
|
generate-build-variables:
|
|
runs-on: ubuntu-24.04
|
|
outputs:
|
|
branch: "${{ steps.build-vars.outputs.branch }}"
|
|
build_id: "${{ steps.build-vars.outputs.build_id }}"
|
|
server_image_tag: "${{ steps.build-vars.outputs.server_image_tag }}"
|
|
server_image: "${{ steps.build-vars.outputs.server_image }}"
|
|
context_suffix: "${{ steps.build-vars.outputs.context_suffix }}"
|
|
steps:
|
|
- name: ci/generate-build-variables
|
|
id: build-vars
|
|
env:
|
|
COMMIT_SHA: ${{ inputs.commit_sha }}
|
|
PR_NUMBER: ${{ inputs.pr_number }}
|
|
INPUT_SERVER_IMAGE_TAG: ${{ inputs.server_image_tag }}
|
|
RUN_ID: ${{ github.run_id }}
|
|
RUN_ATTEMPT: ${{ github.run_attempt }}
|
|
run: |
|
|
# Use provided server_image_tag or derive from commit SHA
|
|
if [ -n "$INPUT_SERVER_IMAGE_TAG" ]; then
|
|
SERVER_IMAGE_TAG="$INPUT_SERVER_IMAGE_TAG"
|
|
else
|
|
SERVER_IMAGE_TAG="${COMMIT_SHA::7}"
|
|
fi
|
|
|
|
# Validate server_image_tag format (alphanumeric, dots, hyphens, underscores)
|
|
if ! [[ "$SERVER_IMAGE_TAG" =~ ^[a-zA-Z0-9._-]+$ ]]; then
|
|
echo "::error::Invalid server_image_tag format: ${SERVER_IMAGE_TAG}"
|
|
exit 1
|
|
fi
|
|
echo "server_image_tag=${SERVER_IMAGE_TAG}" >> $GITHUB_OUTPUT
|
|
|
|
# Generate branch name
|
|
REF_BRANCH="${{ inputs.ref_branch }}"
|
|
if [ -n "$PR_NUMBER" ]; then
|
|
echo "branch=server-pr-${PR_NUMBER}" >> $GITHUB_OUTPUT
|
|
elif [ -n "$REF_BRANCH" ]; then
|
|
echo "branch=server-${REF_BRANCH}-${SERVER_IMAGE_TAG}" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "branch=server-commit-${SERVER_IMAGE_TAG}" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
# Determine server image name
|
|
EDITION="${{ inputs.server_edition }}"
|
|
REPO="${{ inputs.server_image_repo }}"
|
|
REPO="${REPO:-mattermostdevelopment}"
|
|
case "$EDITION" in
|
|
fips) IMAGE_NAME="mattermost-enterprise-fips-edition" ;;
|
|
team) IMAGE_NAME="mattermost-team-edition" ;;
|
|
*) IMAGE_NAME="mattermost-enterprise-edition" ;;
|
|
esac
|
|
SERVER_IMAGE="${REPO}/${IMAGE_NAME}:${SERVER_IMAGE_TAG}"
|
|
echo "server_image=${SERVER_IMAGE}" >> $GITHUB_OUTPUT
|
|
|
|
# Validate server_image_aliases format if provided
|
|
ALIASES="${{ inputs.server_image_aliases }}"
|
|
if [ -n "$ALIASES" ] && ! [[ "$ALIASES" =~ ^[a-zA-Z0-9._,\ -]+$ ]]; then
|
|
echo "::error::Invalid server_image_aliases format: ${ALIASES}"
|
|
exit 1
|
|
fi
|
|
|
|
# Generate build ID
|
|
if [ -n "$EDITION" ] && [ "$EDITION" != "enterprise" ]; then
|
|
echo "build_id=${RUN_ID}_${RUN_ATTEMPT}-${SERVER_IMAGE_TAG}-playwright-onprem-${EDITION}" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "build_id=${RUN_ID}_${RUN_ATTEMPT}-${SERVER_IMAGE_TAG}-playwright-onprem-ent" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
# Generate context name suffix based on report type
|
|
REPORT_TYPE="${{ inputs.report_type }}"
|
|
case "$REPORT_TYPE" in
|
|
MASTER) echo "context_suffix=/master" >> $GITHUB_OUTPUT ;;
|
|
RELEASE) echo "context_suffix=/release" >> $GITHUB_OUTPUT ;;
|
|
RELEASE_CUT) echo "context_suffix=/release-cut" >> $GITHUB_OUTPUT ;;
|
|
*) echo "context_suffix=" >> $GITHUB_OUTPUT ;;
|
|
esac
|
|
|
|
skip:
|
|
needs:
|
|
- generate-build-variables
|
|
if: inputs.should_run == 'false'
|
|
runs-on: ubuntu-24.04
|
|
permissions:
|
|
statuses: write
|
|
steps:
|
|
- name: ci/post-skip-status
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
COMMIT_SHA: ${{ inputs.commit_sha }}
|
|
CONTEXT_NAME: "e2e-test/playwright-full/${{ inputs.server_edition || 'enterprise' }}${{ needs.generate-build-variables.outputs.context_suffix }}"
|
|
run: |
|
|
gh api repos/${{ github.repository }}/statuses/${COMMIT_SHA} \
|
|
-f state=success \
|
|
-f context="${CONTEXT_NAME}" \
|
|
-f description="No E2E-relevant changes - skipped" \
|
|
-f target_url="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
echo "Posted success for ${CONTEXT_NAME}"
|
|
|
|
playwright-full:
|
|
needs:
|
|
- generate-build-variables
|
|
if: inputs.should_run != 'false'
|
|
uses: ./.github/workflows/e2e-tests-playwright-template.yml
|
|
with:
|
|
test_type: full
|
|
test_filter: '--grep-invert "@visual"'
|
|
workers: 4
|
|
enabled_docker_services: "postgres inbucket minio openldap elasticsearch keycloak"
|
|
commit_sha: ${{ inputs.commit_sha }}
|
|
branch: ${{ needs.generate-build-variables.outputs.branch }}
|
|
build_id: ${{ needs.generate-build-variables.outputs.build_id }}
|
|
server_image_tag: ${{ needs.generate-build-variables.outputs.server_image_tag }}
|
|
server_edition: ${{ inputs.server_edition }}
|
|
server_image_repo: ${{ inputs.server_image_repo }}
|
|
server_image_aliases: ${{ inputs.server_image_aliases }}
|
|
server: ${{ inputs.server }}
|
|
enable_reporting: ${{ inputs.enable_reporting }}
|
|
report_type: ${{ inputs.report_type }}
|
|
ref_branch: ${{ inputs.ref_branch }}
|
|
pr_number: ${{ inputs.pr_number }}
|
|
context_name: "e2e-test/playwright-full/${{ inputs.server_edition || 'enterprise' }}${{ needs.generate-build-variables.outputs.context_suffix }}"
|
|
secrets:
|
|
MM_LICENSE: ${{ secrets.MM_LICENSE }}
|
|
REPORT_WEBHOOK_URL: ${{ secrets.REPORT_WEBHOOK_URL }}
|
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|