[release-10.11] Automate setup-go-work as a dependency for Make targets (#35780)
* Automate setup-go-work as a dependency for Make targets (#35476) * automate setup-go-work It's all to easy to forget to `make setup-go-work`, only to run into mysterious build failures. Let's default to doing this automatically, unless `SKIP_SETUP_GO_WORK` is true (or the legacy `IGNORE_GO_WORK_IF_EXISTS`, which was oddly named, since we can't actually ignore it.) * Make setup-go-work recipe fail-fast with set -e * ci: post success to required e2e status contexts when no relevant changes (#35880) * 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 * Add E2E template workflows for Cypress and Playwright * Add check-e2e-test-only action for E2E workflow * Fix: Remove circular E2E workflow file check - skip tests when only CI files change * Add pull_request trigger to E2E workflow - run automatically on PR events * Fix resolve-pr to use github.event context for automatic pull_request trigger * Fix checkout condition to work with pull_request events * Fix: Remove orphaned fi statement in check-changes script --------- Co-authored-by: yasser khan <attitude3cena.yf@gmail.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
075d975ca7
Коммит
70d1794916
229
.github/workflows/e2e-tests-ci.yml
поставляемый
229
.github/workflows/e2e-tests-ci.yml
поставляемый
@@ -1,19 +1,230 @@
|
||||
---
|
||||
name: E2E Smoketests
|
||||
name: E2E Tests (pull request)
|
||||
on:
|
||||
# For PRs, this workflow gets triggered from the Argo Events platform.
|
||||
# Check the following repo for details: https://github.com/mattermost/delivery-platform
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- synchronize
|
||||
- reopened
|
||||
# Argo Events Trigger (automated):
|
||||
# - Triggered by: Enterprise CI/docker-image status check (success)
|
||||
# - Payload: { ref: "<branch>", inputs: { commit_sha: "<sha>" } }
|
||||
# - Uses commit-specific docker image
|
||||
# - Checks for relevant file changes before running tests
|
||||
#
|
||||
# Manual Trigger:
|
||||
# - Enter PR number only - commit SHA is resolved automatically from PR head
|
||||
# - Uses commit-specific docker image
|
||||
# - E2E tests always run (no file change check)
|
||||
#
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
commit_sha:
|
||||
pr_number:
|
||||
description: "PR number to test (for manual triggers)"
|
||||
type: string
|
||||
required: true
|
||||
required: false
|
||||
commit_sha:
|
||||
description: "Commit SHA to test (for Argo Events)"
|
||||
type: string
|
||||
required: false
|
||||
|
||||
jobs:
|
||||
e2e-smoketest:
|
||||
uses: ./.github/workflows/e2e-tests-ci-template.yml
|
||||
resolve-pr:
|
||||
runs-on: ubuntu-24.04
|
||||
outputs:
|
||||
PR_NUMBER: "${{ steps.resolve.outputs.PR_NUMBER }}"
|
||||
COMMIT_SHA: "${{ steps.resolve.outputs.COMMIT_SHA }}"
|
||||
SERVER_IMAGE_TAG: "${{ steps.e2e-check.outputs.image_tag }}"
|
||||
steps:
|
||||
- name: ci/checkout-repo
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: ci/resolve-pr-and-commit
|
||||
id: resolve
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
INPUT_PR_NUMBER: ${{ inputs.pr_number || github.event.pull_request.number }}
|
||||
INPUT_COMMIT_SHA: ${{ inputs.commit_sha || github.event.pull_request.head.sha }}
|
||||
run: |
|
||||
# Validate inputs
|
||||
if [ -n "$INPUT_PR_NUMBER" ] && ! [[ "$INPUT_PR_NUMBER" =~ ^[0-9]+$ ]]; then
|
||||
echo "::error::Invalid PR number format. Must be numeric."
|
||||
exit 1
|
||||
fi
|
||||
if [ -n "$INPUT_COMMIT_SHA" ] && ! [[ "$INPUT_COMMIT_SHA" =~ ^[a-f0-9]{7,40}$ ]]; then
|
||||
echo "::error::Invalid commit SHA format. Must be 7-40 hex characters."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Manual trigger: PR number provided, resolve commit SHA from PR head
|
||||
if [ -n "$INPUT_PR_NUMBER" ]; then
|
||||
echo "Manual trigger: resolving commit SHA from PR #${INPUT_PR_NUMBER}"
|
||||
PR_DATA=$(gh api "repos/${{ github.repository }}/pulls/${INPUT_PR_NUMBER}")
|
||||
COMMIT_SHA=$(echo "$PR_DATA" | jq -r '.head.sha')
|
||||
|
||||
if [ -z "$COMMIT_SHA" ] || [ "$COMMIT_SHA" = "null" ]; then
|
||||
echo "::error::Could not resolve commit SHA for PR #${INPUT_PR_NUMBER}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "PR_NUMBER=${INPUT_PR_NUMBER}" >> $GITHUB_OUTPUT
|
||||
echo "COMMIT_SHA=${COMMIT_SHA}" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Argo Events trigger: commit SHA provided, resolve PR number
|
||||
if [ -n "$INPUT_COMMIT_SHA" ]; then
|
||||
echo "Automated trigger: resolving PR number from commit ${INPUT_COMMIT_SHA}"
|
||||
PR_DATA=$(gh api "repos/${{ github.repository }}/commits/${INPUT_COMMIT_SHA}/pulls" \
|
||||
--jq '.[0] // empty' 2>/dev/null || echo "")
|
||||
PR_NUMBER=$(echo "$PR_DATA" | jq -r '.number // empty' 2>/dev/null || echo "")
|
||||
if [ -z "$PR_NUMBER" ]; then
|
||||
echo "::error::No PR found for commit ${INPUT_COMMIT_SHA}. This workflow is for PRs only."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Found PR #${PR_NUMBER} for commit ${INPUT_COMMIT_SHA}"
|
||||
|
||||
# Skip if PR is already merged to master or a release branch.
|
||||
# The e2e-tests-on-merge workflow handles post-merge E2E tests.
|
||||
PR_MERGED=$(echo "$PR_DATA" | jq -r '.merged_at // empty' 2>/dev/null || echo "")
|
||||
PR_BASE_REF=$(echo "$PR_DATA" | jq -r '.base.ref // empty' 2>/dev/null || echo "")
|
||||
if [ -n "$PR_MERGED" ]; then
|
||||
if [ "$PR_BASE_REF" = "master" ] || [[ "$PR_BASE_REF" =~ ^release-[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "PR #${PR_NUMBER} is already merged to ${PR_BASE_REF}. Skipping - handled by e2e-tests-on-merge workflow."
|
||||
echo "PR_NUMBER=" >> $GITHUB_OUTPUT
|
||||
echo "COMMIT_SHA=" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "PR_NUMBER=${PR_NUMBER}" >> $GITHUB_OUTPUT
|
||||
echo "COMMIT_SHA=${INPUT_COMMIT_SHA}" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Neither provided
|
||||
echo "::error::Either pr_number or commit_sha must be provided"
|
||||
exit 1
|
||||
|
||||
- name: ci/check-e2e-test-only
|
||||
if: steps.resolve.outputs.PR_NUMBER != ''
|
||||
id: e2e-check
|
||||
uses: ./.github/actions/check-e2e-test-only
|
||||
with:
|
||||
pr_number: ${{ steps.resolve.outputs.PR_NUMBER }}
|
||||
|
||||
|
||||
check-changes:
|
||||
needs: resolve-pr
|
||||
if: needs.resolve-pr.outputs.PR_NUMBER != ''
|
||||
runs-on: ubuntu-24.04
|
||||
outputs:
|
||||
should_run: "${{ steps.check.outputs.should_run }}"
|
||||
steps:
|
||||
- name: ci/checkout-repo
|
||||
if: inputs.commit_sha != '' || github.event.pull_request
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
ref: ${{ needs.resolve-pr.outputs.COMMIT_SHA }}
|
||||
fetch-depth: 0
|
||||
- name: ci/check-relevant-changes
|
||||
id: check
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
PR_NUMBER: ${{ needs.resolve-pr.outputs.PR_NUMBER }}
|
||||
COMMIT_SHA: ${{ needs.resolve-pr.outputs.COMMIT_SHA }}
|
||||
INPUT_PR_NUMBER: ${{ inputs.pr_number }}
|
||||
run: |
|
||||
# Manual trigger (pr_number provided): always run E2E tests
|
||||
if [ -n "$INPUT_PR_NUMBER" ]; then
|
||||
echo "Manual trigger detected - skipping file change check"
|
||||
echo "should_run=true" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Automated trigger (commit_sha provided): check for relevant file changes
|
||||
echo "Automated trigger detected - checking for relevant file changes"
|
||||
|
||||
# Get the base branch of the PR
|
||||
BASE_SHA=$(gh api "repos/${{ github.repository }}/pulls/${PR_NUMBER}" --jq '.base.sha')
|
||||
|
||||
# Get changed files between base and head
|
||||
CHANGED_FILES=$(git diff --name-only "${BASE_SHA}...${COMMIT_SHA}")
|
||||
|
||||
echo "Changed files:"
|
||||
echo "$CHANGED_FILES"
|
||||
|
||||
# Check for relevant changes
|
||||
SHOULD_RUN="false"
|
||||
|
||||
# Check for server Go files
|
||||
if echo "$CHANGED_FILES" | grep -qE '^server/.*\.go$'; then
|
||||
echo "Found server Go file changes"
|
||||
SHOULD_RUN="true"
|
||||
fi
|
||||
|
||||
# Check for webapp ts/js/tsx/jsx files
|
||||
if echo "$CHANGED_FILES" | grep -qE '^webapp/.*\.(ts|tsx|js|jsx)$'; then
|
||||
echo "Found webapp TypeScript/JavaScript file changes"
|
||||
SHOULD_RUN="true"
|
||||
fi
|
||||
|
||||
# Check for e2e-tests ts/js/tsx/jsx files
|
||||
if echo "$CHANGED_FILES" | grep -qE '^e2e-tests/.*\.(ts|tsx|js|jsx)$'; then
|
||||
echo "Found e2e-tests TypeScript/JavaScript file changes"
|
||||
SHOULD_RUN="true"
|
||||
fi
|
||||
|
||||
|
||||
echo "should_run=${SHOULD_RUN}" >> $GITHUB_OUTPUT
|
||||
echo "Should run E2E tests: ${SHOULD_RUN}"
|
||||
|
||||
e2e-cypress:
|
||||
needs:
|
||||
- resolve-pr
|
||||
- check-changes
|
||||
if: needs.resolve-pr.outputs.PR_NUMBER != ''
|
||||
permissions:
|
||||
statuses: write
|
||||
uses: ./.github/workflows/e2e-tests-cypress.yml
|
||||
with:
|
||||
commit_sha: "${{ inputs.commit_sha }}"
|
||||
status_check_context: "E2E Tests/smoketests"
|
||||
commit_sha: "${{ needs.resolve-pr.outputs.COMMIT_SHA }}"
|
||||
server: "onprem"
|
||||
server_image_tag: "${{ needs.resolve-pr.outputs.SERVER_IMAGE_TAG }}"
|
||||
enable_reporting: true
|
||||
report_type: "PR"
|
||||
pr_number: "${{ needs.resolve-pr.outputs.PR_NUMBER }}"
|
||||
should_run: "${{ needs.check-changes.outputs.should_run }}"
|
||||
secrets:
|
||||
MM_LICENSE: "${{ secrets.MM_E2E_TEST_LICENSE_ONPREM_ENT }}"
|
||||
AUTOMATION_DASHBOARD_URL: "${{ secrets.MM_E2E_AUTOMATION_DASHBOARD_URL }}"
|
||||
AUTOMATION_DASHBOARD_TOKEN: "${{ secrets.MM_E2E_AUTOMATION_DASHBOARD_TOKEN }}"
|
||||
PUSH_NOTIFICATION_SERVER: "${{ secrets.MM_E2E_PUSH_NOTIFICATION_SERVER }}"
|
||||
REPORT_WEBHOOK_URL: "${{ secrets.MM_E2E_REPORT_WEBHOOK_URL }}"
|
||||
CWS_URL: "${{ secrets.MM_E2E_CWS_URL }}"
|
||||
CWS_EXTRA_HTTP_HEADERS: "${{ secrets.MM_E2E_CWS_EXTRA_HTTP_HEADERS }}"
|
||||
|
||||
e2e-playwright:
|
||||
needs:
|
||||
- resolve-pr
|
||||
- check-changes
|
||||
if: needs.resolve-pr.outputs.PR_NUMBER != ''
|
||||
permissions:
|
||||
statuses: write
|
||||
uses: ./.github/workflows/e2e-tests-playwright.yml
|
||||
with:
|
||||
commit_sha: "${{ needs.resolve-pr.outputs.COMMIT_SHA }}"
|
||||
server: "onprem"
|
||||
server_image_tag: "${{ needs.resolve-pr.outputs.SERVER_IMAGE_TAG }}"
|
||||
enable_reporting: true
|
||||
report_type: "PR"
|
||||
pr_number: "${{ needs.resolve-pr.outputs.PR_NUMBER }}"
|
||||
should_run: "${{ needs.check-changes.outputs.should_run }}"
|
||||
secrets:
|
||||
MM_LICENSE: "${{ secrets.MM_E2E_TEST_LICENSE_ONPREM_ENT }}"
|
||||
AWS_ACCESS_KEY_ID: "${{ secrets.CYPRESS_AWS_ACCESS_KEY_ID }}"
|
||||
AWS_SECRET_ACCESS_KEY: "${{ secrets.CYPRESS_AWS_SECRET_ACCESS_KEY }}"
|
||||
REPORT_WEBHOOK_URL: "${{ secrets.MM_E2E_REPORT_WEBHOOK_URL }}"
|
||||
|
||||
Ссылка в новой задаче
Block a user