/
githubmirror
/
gutenberg
Обзор
Документация
Войти
/
githubmirror
/
gutenberg
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
trunk
.github/workflows/performance.yml
149 строк
7 KB
Jonathan Desrosiers
Allow organization or repository variable to dictate the Actions runner (#81087)
04 авг 2026, 05:32
Не верифицирован
04 авг 2026, 05:32
a509e14
Код
Авторство
О чём код?
name: Performance Tests on: pull_request: release: types: [published] push: branches: [trunk] workflow_dispatch: inputs: branches: description: 'branches or commits to compare (comma separated)' required: true wpversion: description: 'The base WP version to use for the tests (latest or 6.0, 6.1...)' required: false default: 'latest' # Cancels all previous workflow runs for pull requests that have not completed. concurrency: # The concurrency group contains the workflow name and the branch name for pull requests # or the commit hash for any other events. group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} cancel-in-progress: true # Disable permissions for all available scopes by default. # Any needed permissions should be configured at the job level. permissions: {} jobs: performance: timeout-minutes: 60 name: Run performance tests runs-on: ${{ vars.RUNNERS_NAME || 'ubuntu-24.04' }} permissions: contents: read if: ${{ github.repository == 'WordPress/gutenberg' }} env: WP_ARTIFACTS_PATH: ${{ github.workspace }}/artifacts steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} persist-credentials: false - name: Setup Node.js and install dependencies uses: ./.github/setup-node - name: Install NVM run: | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm -v - name: Compare performance with base branch if: github.event_name == 'pull_request' run: npm exec --no release-cli -- perf "$GITHUB_SHA" "$GITHUB_BASE_REF" --tests-branch "$GITHUB_SHA" - name: Compare performance with current WordPress Core and previous Gutenberg versions if: github.event_name == 'release' env: RELEASE_TAG: ${{ github.event.release.tag_name }} shell: bash run: | PLUGIN_VERSION="${RELEASE_TAG#v}" if [[ ! "$PLUGIN_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?$ ]]; then echo "::error::Release tag '$RELEASE_TAG' does not resolve to a valid Gutenberg plugin version." exit 1 fi IFS=. read -ra PLUGIN_VERSION_ARRAY <<< "$PLUGIN_VERSION" CURRENT_RELEASE_BRANCH="release/${PLUGIN_VERSION_ARRAY[0]}.${PLUGIN_VERSION_ARRAY[1]}" PREVIOUS_VERSION_BASE_10=$((PLUGIN_VERSION_ARRAY[0] * 10 + PLUGIN_VERSION_ARRAY[1] - 1)) PREVIOUS_RELEASE_BRANCH="release/$((PREVIOUS_VERSION_BASE_10 / 10)).$((PREVIOUS_VERSION_BASE_10 % 10))" if ! git ls-remote --exit-code --tags origin "$RELEASE_TAG" > /dev/null; then echo "::error::Expected release tag '$RELEASE_TAG' to exist in the Gutenberg repository." exit 1 fi if ! git ls-remote --exit-code --heads origin "$CURRENT_RELEASE_BRANCH" > /dev/null; then echo "::error::Expected current release branch '$CURRENT_RELEASE_BRANCH' to exist in the Gutenberg repository." exit 1 fi if ! git ls-remote --exit-code --heads origin "$PREVIOUS_RELEASE_BRANCH" > /dev/null; then echo "::error::Expected previous release branch '$PREVIOUS_RELEASE_BRANCH' to exist in the Gutenberg repository." exit 1 fi WP_VERSION="$(awk -F ': ' '/^Tested up to/{print $2}' readme.txt)" IFS=. read -ra WP_VERSION_ARRAY <<< "$WP_VERSION" WP_MAJOR="${WP_VERSION_ARRAY[0]}.${WP_VERSION_ARRAY[1]}" npm exec --no release-cli -- perf "wp/$WP_MAJOR" "$PREVIOUS_RELEASE_BRANCH" "$CURRENT_RELEASE_BRANCH" --tests-branch "$GITHUB_SHA" --wp-version "$WP_MAJOR" - name: Compare performance with base branch if: github.event_name == 'push' # The base hash used here need to be a commit that is compatible with the current WP version # The current one is 28d414f1327652e2b49e784ddc12098768991c62 and it needs to be updated every WP major release. # It is used as a base comparison point to avoid fluctuation in the performance metrics. # See: https://developer.wordpress.org/block-editor/explanations/architecture/performance/#update-the-reference-commit. run: | WP_VERSION="$(awk -F ': ' '/^Tested up to/{print $2}' readme.txt)" IFS=. read -ra WP_VERSION_ARRAY <<< "$WP_VERSION" WP_MAJOR="${WP_VERSION_ARRAY[0]}.${WP_VERSION_ARRAY[1]}" npm exec --no release-cli -- perf "$GITHUB_SHA" 28d414f1327652e2b49e784ddc12098768991c62 --tests-branch "$GITHUB_SHA" --wp-version "$WP_MAJOR" - name: Compare performance with custom branches if: github.event_name == 'workflow_dispatch' env: BRANCHES: ${{ github.event.inputs.branches }} WP_VERSION: ${{ github.event.inputs.wpversion }} run: | npm exec --no release-cli -- perf "$(echo "$BRANCHES" | tr ',' ' ')" --tests-branch "$GITHUB_SHA" --wp-version "$WP_VERSION" - name: Add workflow summary run: cat "${WP_ARTIFACTS_PATH}/summary.md" >> "$GITHUB_STEP_SUMMARY" - name: Archive performance results if: success() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: performance-results path: ${{ env.WP_ARTIFACTS_PATH }}/*.performance-results*.json - name: Archive performance traces if: always() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: performance-traces path: | ${{ env.WP_ARTIFACTS_PATH }}/traces ${{ env.WP_ARTIFACTS_PATH }}/build if-no-files-found: ignore - name: Publish performance results if: github.event_name == 'push' env: CODEHEALTH_PROJECT_TOKEN: ${{ secrets.CODEHEALTH_PROJECT_TOKEN }} run: | COMMITTED_AT="$(git show -s "$GITHUB_SHA" --format="%cI")" npm run --workspace=tools/release log-performance-results -- "$CODEHEALTH_PROJECT_TOKEN" trunk "$GITHUB_SHA" 28d414f1327652e2b49e784ddc12098768991c62 "$COMMITTED_AT" - name: Archive debug artifacts (screenshots, HTML snapshots) uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: failure() with: name: failures-artifacts path: ${{ env.WP_ARTIFACTS_PATH }} if-no-files-found: ignore