Fix CI Metrics job (#50214)
This commit is contained in:
parent
328d944288
commit
52119dfcc9
|
@ -194,15 +194,6 @@ jobs:
|
||||||
name: flaky-tests-${{ strategy.job-index }}
|
name: flaky-tests-${{ strategy.job-index }}
|
||||||
path: ${{ env.ARTIFACTS_PATH }}/flaky-tests
|
path: ${{ env.ARTIFACTS_PATH }}/flaky-tests
|
||||||
if-no-files-found: ignore
|
if-no-files-found: ignore
|
||||||
|
|
||||||
- name: 'Archive metrics results'
|
|
||||||
if: ${{ success() && startsWith(matrix.name, 'Metrics') }} # this seems too fragile, we should update the reporting path and use the generic upload step above
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
env:
|
|
||||||
WP_ARTIFACTS_PATH: ${{ github.workspace }}/artifacts
|
|
||||||
with:
|
|
||||||
name: metrics-results
|
|
||||||
path: ${{ env.WP_ARTIFACTS_PATH }}/*.performance-results*.json
|
|
||||||
|
|
||||||
evaluate-project-jobs:
|
evaluate-project-jobs:
|
||||||
# In order to add a required status check we need a consistent job that we can grab onto.
|
# In order to add a required status check we need a consistent job that we can grab onto.
|
||||||
|
|
|
@ -7,25 +7,34 @@ if [[ -z "$GITHUB_EVENT_NAME" ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Installing dependencies"
|
||||||
|
pnpm install --filter="compare-perf"
|
||||||
|
|
||||||
if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
|
if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
|
||||||
echo "Comparing performance with trunk"
|
echo "Comparing performance with trunk"
|
||||||
pnpm --filter="compare-perf" run compare perf $GITHUB_SHA trunk --tests-branch $GITHUB_SHA
|
pnpm --filter="compare-perf" run compare perf $GITHUB_SHA trunk --tests-branch $GITHUB_SHA
|
||||||
|
|
||||||
elif [[ "$GITHUB_EVENT_NAME" == "push" ]]; then
|
elif [[ "$GITHUB_EVENT_NAME" == "push" ]]; then
|
||||||
echo "Comparing performance with base branch"
|
echo "Comparing performance with base branch"
|
||||||
# The base hash used here need to be a commit that is compatible with the current WP version
|
|
||||||
# The current one is 19f3d0884617d7ecdcf37664f648a51e2987cada
|
|
||||||
# it needs to be updated every time it becomes unsupported by the current wp-env (WP version).
|
|
||||||
# It is used as a base comparison point to avoid fluctuation in the performance metrics.
|
|
||||||
WP_VERSION=$(awk -F ': ' '/^Tested up to/{print $2}' readme.txt)
|
WP_VERSION=$(awk -F ': ' '/^Tested up to/{print $2}' readme.txt)
|
||||||
|
# Updating the WP version used for performance jobs means there’s a high
|
||||||
|
# chance that the reference commit used for performance test stability
|
||||||
|
# becomes incompatible with the WP version. So, every time the "Tested up
|
||||||
|
# to" flag is updated in the readme.txt, we also have to update the
|
||||||
|
# reference commit below (BASE_SHA). The new reference needs to meet the
|
||||||
|
# following requirements:
|
||||||
|
# - Be compatible with the new WP version used in the “Tested up to” flag.
|
||||||
|
# - Be tracked on https://www.codevitals.run/project/woo for all existing
|
||||||
|
# metrics.
|
||||||
|
BASE_SHA=3d7d7f02017383937f1a4158d433d0e5d44b3dc9
|
||||||
echo "WP_VERSION: $WP_VERSION"
|
echo "WP_VERSION: $WP_VERSION"
|
||||||
IFS=. read -ra WP_VERSION_ARRAY <<< "$WP_VERSION"
|
IFS=. read -ra WP_VERSION_ARRAY <<< "$WP_VERSION"
|
||||||
WP_MAJOR="${WP_VERSION_ARRAY[0]}.${WP_VERSION_ARRAY[1]}"
|
WP_MAJOR="${WP_VERSION_ARRAY[0]}.${WP_VERSION_ARRAY[1]}"
|
||||||
pnpm --filter="compare-perf" run compare perf $GITHUB_SHA 19f3d0884617d7ecdcf37664f648a51e2987cada --tests-branch $GITHUB_SHA --wp-version "$WP_MAJOR"
|
pnpm --filter="compare-perf" run compare perf $GITHUB_SHA $BASE_SHA --tests-branch $GITHUB_SHA --wp-version "$WP_MAJOR"
|
||||||
|
|
||||||
echo "Publish results to CodeVitals"
|
echo "Publish results to CodeVitals"
|
||||||
COMMITTED_AT=$(git show -s $GITHUB_SHA --format="%cI")
|
COMMITTED_AT=$(git show -s $GITHUB_SHA --format="%cI")
|
||||||
pnpm --filter="compare-perf" run log $CODEVITALS_PROJECT_TOKEN trunk $GITHUB_SHA 19f3d0884617d7ecdcf37664f648a51e2987cada $COMMITTED_AT
|
pnpm --filter="compare-perf" run log $CODEVITALS_PROJECT_TOKEN trunk $GITHUB_SHA $BASE_SHA $COMMITTED_AT
|
||||||
else
|
else
|
||||||
echo "Unsupported event: $GITHUB_EVENT_NAME"
|
echo "Unsupported event: $GITHUB_EVENT_NAME"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: patch
|
||||||
|
Type: dev
|
||||||
|
|
||||||
|
Fix Metrics CI job
|
|
@ -529,8 +529,12 @@
|
||||||
".wp-env.json"
|
".wp-env.json"
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
"disabled"
|
"push"
|
||||||
]
|
],
|
||||||
|
"report": {
|
||||||
|
"resultsBlobName": "core-metrics-report",
|
||||||
|
"resultsPath": "../../tools/compare-perf/artifacts/"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks e2e tests",
|
"name": "Blocks e2e tests",
|
||||||
|
|
|
@ -22,22 +22,32 @@ async function isBlockProductEditorEnabled( page ) {
|
||||||
/**
|
/**
|
||||||
* This function is typically used for enabling/disabling the block product editor in settings page.
|
* This function is typically used for enabling/disabling the block product editor in settings page.
|
||||||
*
|
*
|
||||||
* @param {string} action The action that will be performed.
|
* @param {string} action The action that will be performed.
|
||||||
* @param {import('@playwright/test').Page} page
|
* @param {import('@playwright/test').Page} page
|
||||||
*/
|
*/
|
||||||
async function toggleBlockProductEditor( action = 'enable', page ) {
|
async function toggleBlockProductEditor( action = 'enable', page ) {
|
||||||
await page.goto( SETTINGS_URL );
|
await page.goto( SETTINGS_URL );
|
||||||
if ( action === 'disable' ) {
|
|
||||||
await page
|
const enableProductEditor = page.locator(
|
||||||
.locator( '#woocommerce_feature_product_block_editor_enabled' )
|
'#woocommerce_feature_product_block_editor_enabled'
|
||||||
.uncheck();
|
);
|
||||||
} else {
|
const isEnabled = await enableProductEditor.isChecked();
|
||||||
await page
|
|
||||||
.locator( '#woocommerce_feature_product_block_editor_enabled' )
|
if (
|
||||||
.check();
|
( action === 'enable' && isEnabled ) ||
|
||||||
|
( action === 'disable' && ! isEnabled )
|
||||||
|
) {
|
||||||
|
// No need to toggle the setting.
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( action === 'enable' ) {
|
||||||
|
await enableProductEditor.check();
|
||||||
|
} else if ( action === 'disable' ) {
|
||||||
|
await enableProductEditor.uncheck();
|
||||||
|
}
|
||||||
|
|
||||||
await page
|
await page
|
||||||
.locator( '.submit' )
|
|
||||||
.getByRole( 'button', {
|
.getByRole( 'button', {
|
||||||
name: 'Save changes',
|
name: 'Save changes',
|
||||||
} )
|
} )
|
||||||
|
@ -81,7 +91,7 @@ async function expectBlockProductEditor( page ) {
|
||||||
/**
|
/**
|
||||||
* Click on a block editor tab.
|
* Click on a block editor tab.
|
||||||
*
|
*
|
||||||
* @param {string} tabName
|
* @param {string} tabName
|
||||||
* @param {import('@playwright/test').Page} page
|
* @param {import('@playwright/test').Page} page
|
||||||
*/
|
*/
|
||||||
async function clickOnTab( tabName, page ) {
|
async function clickOnTab( tabName, page ) {
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
/**
|
||||||
|
* External dependencies
|
||||||
|
*/
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from 'url';
|
||||||
import { defineConfig, devices } from '@playwright/test';
|
import { defineConfig, devices } from '@playwright/test';
|
||||||
|
@ -11,9 +14,7 @@ process.env.STORAGE_STATE_PATH ??= path.join(
|
||||||
process.env.WP_BASE_URL ??= 'http://localhost:8086';
|
process.env.WP_BASE_URL ??= 'http://localhost:8086';
|
||||||
|
|
||||||
const config = defineConfig( {
|
const config = defineConfig( {
|
||||||
reporter: process.env.CI
|
reporter: [ [ 'list' ], [ './config/performance-reporter.ts' ] ],
|
||||||
? './config/performance-reporter.ts'
|
|
||||||
: [ [ 'list' ], [ './config/performance-reporter.ts' ] ],
|
|
||||||
forbidOnly: !! process.env.CI,
|
forbidOnly: !! process.env.CI,
|
||||||
fullyParallel: false,
|
fullyParallel: false,
|
||||||
workers: 1,
|
workers: 1,
|
||||||
|
@ -24,7 +25,7 @@ const config = defineConfig( {
|
||||||
testDir: './specs',
|
testDir: './specs',
|
||||||
outputDir: path.join( process.env.WP_ARTIFACTS_PATH, 'test-results' ),
|
outputDir: path.join( process.env.WP_ARTIFACTS_PATH, 'test-results' ),
|
||||||
snapshotPathTemplate:
|
snapshotPathTemplate:
|
||||||
'{testDir}/{testFileDir}/__snapshots__/{arg}-{projectName}{ext}',
|
'{testDir}/{testFileDir}/__snapshots__/{arg}-{projectName}{ext}',
|
||||||
globalSetup: fileURLToPath(
|
globalSetup: fileURLToPath(
|
||||||
new URL( './config/global-setup.ts', 'file:' + __filename ).href
|
new URL( './config/global-setup.ts', 'file:' + __filename ).href
|
||||||
),
|
),
|
||||||
|
|
|
@ -146,7 +146,6 @@ test.describe( 'Editor Performance', () => {
|
||||||
await perfUtils.loadBlocksForLargePost();
|
await perfUtils.loadBlocksForLargePost();
|
||||||
await editor.insertBlock( { name: 'core/paragraph' } );
|
await editor.insertBlock( { name: 'core/paragraph' } );
|
||||||
draftId = await perfUtils.saveDraft();
|
draftId = await perfUtils.saveDraft();
|
||||||
console.log( draftId );
|
|
||||||
} );
|
} );
|
||||||
|
|
||||||
test( 'Run the test', async ( { admin, page, perfUtils, metrics } ) => {
|
test( 'Run the test', async ( { admin, page, perfUtils, metrics } ) => {
|
||||||
|
|
|
@ -30,10 +30,6 @@ test.describe( 'Product editor performance', () => {
|
||||||
},
|
},
|
||||||
} );
|
} );
|
||||||
|
|
||||||
test.beforeEach( async ( { page } ) => {
|
|
||||||
await toggleBlockProductEditor( 'enable', page );
|
|
||||||
} );
|
|
||||||
|
|
||||||
test.afterAll( async ( {}, testInfo ) => {
|
test.afterAll( async ( {}, testInfo ) => {
|
||||||
const medians = {};
|
const medians = {};
|
||||||
Object.keys( results ).forEach( ( metric ) => {
|
Object.keys( results ).forEach( ( metric ) => {
|
||||||
|
@ -45,6 +41,10 @@ test.describe( 'Product editor performance', () => {
|
||||||
} );
|
} );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
test( 'Enable Product Editor', async ( { page } ) => {
|
||||||
|
await toggleBlockProductEditor( 'enable', page );
|
||||||
|
} );
|
||||||
|
|
||||||
test.describe( 'Loading', () => {
|
test.describe( 'Loading', () => {
|
||||||
const samples = 2;
|
const samples = 2;
|
||||||
const throwaway = 1;
|
const throwaway = 1;
|
||||||
|
|
|
@ -2,13 +2,13 @@ const path = require( 'path' );
|
||||||
|
|
||||||
const getPnpmPackage = ( sourceDir ) => {
|
const getPnpmPackage = ( sourceDir ) => {
|
||||||
const packageJson = require( path.join( sourceDir, 'package.json' ) );
|
const packageJson = require( path.join( sourceDir, 'package.json' ) );
|
||||||
let pnpm_package = 'pnpm';
|
let pnpmPackage = 'pnpm';
|
||||||
|
|
||||||
if ( packageJson.engines.pnpm ) {
|
if ( packageJson.engines.pnpm ) {
|
||||||
pnpm_package = `pnpm@${ packageJson.engines.pnpm }`;
|
pnpmPackage = `pnpm@${ packageJson.engines.pnpm }`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pnpm_package;
|
return pnpmPackage;
|
||||||
};
|
};
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
|
@ -16,18 +16,18 @@ const config = {
|
||||||
pluginPath: '/plugins/woocommerce',
|
pluginPath: '/plugins/woocommerce',
|
||||||
testsPath: '/plugins/woocommerce/tests/metrics/specs',
|
testsPath: '/plugins/woocommerce/tests/metrics/specs',
|
||||||
getSetupTestRunner: ( sourceDir ) => {
|
getSetupTestRunner: ( sourceDir ) => {
|
||||||
const pnpm_package = getPnpmPackage( sourceDir );
|
const pnpmPackage = getPnpmPackage( sourceDir );
|
||||||
|
|
||||||
return `npm install -g ${ pnpm_package } && pnpm install --filter="@woocommerce/plugin-woocommerce" &> /dev/null && cd plugins/woocommerce && pnpm exec playwright install chromium`;
|
return `npm install -g ${ pnpmPackage } && pnpm install --frozen-lockfile --filter="@woocommerce/plugin-woocommerce" &> /dev/null && cd plugins/woocommerce && pnpm exec playwright install chromium`;
|
||||||
},
|
},
|
||||||
getSetupCommand: ( sourceDir ) => {
|
getSetupCommand: ( sourceDir ) => {
|
||||||
const pnpm_package = getPnpmPackage( sourceDir );
|
const pnpmPackage = getPnpmPackage( sourceDir );
|
||||||
|
|
||||||
return `npm install -g ${ pnpm_package } && pnpm install &> /dev/null && pnpm build &> /dev/null`;
|
return `npm install -g ${ pnpmPackage } && pnpm install --frozen-lockfile &> /dev/null && pnpm build &> /dev/null`;
|
||||||
},
|
},
|
||||||
getTestCommand: ( sourceDir ) => {
|
getTestCommand: ( sourceDir ) => {
|
||||||
const pnpm_package = getPnpmPackage( sourceDir );
|
const pnpmPackage = getPnpmPackage( sourceDir );
|
||||||
return `npm install -g ${ pnpm_package } && cd plugins/woocommerce && pnpm test:metrics`;
|
return `npm install -g ${ pnpmPackage } && cd plugins/woocommerce && pnpm test:metrics`;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue