diff --git a/packages/playwright/src/isomorphic/types.d.ts b/packages/playwright/src/isomorphic/types.d.ts index 14848f6dae..213f350514 100644 --- a/packages/playwright/src/isomorphic/types.d.ts +++ b/packages/playwright/src/isomorphic/types.d.ts @@ -22,5 +22,8 @@ export interface GitCommitInfo { 'revision.timestamp'?: number | Date; 'revision.link'?: string; 'revision.diff'?: string; + 'pull.link'?: string; + 'pull.diff'?: string; + 'pull.base'?: string; 'ci.link'?: string; } diff --git a/packages/playwright/src/plugins/gitCommitInfoPlugin.ts b/packages/playwright/src/plugins/gitCommitInfoPlugin.ts index 4b57c39279..7695f81313 100644 --- a/packages/playwright/src/plugins/gitCommitInfoPlugin.ts +++ b/packages/playwright/src/plugins/gitCommitInfoPlugin.ts @@ -33,7 +33,7 @@ export const gitCommitInfo = (options?: GitCommitInfoPluginOptions): TestRunnerP setup: async (config: FullConfig, configDir: string) => { const fromEnv = linksFromEnv(); - const fromCLI = await gitStatusFromCLI(options?.directory || configDir); + const fromCLI = await gitStatusFromCLI(options?.directory || configDir, fromEnv); config.metadata = config.metadata || {}; config.metadata['git.commit.info'] = { ...fromEnv, ...fromCLI }; }, @@ -44,8 +44,8 @@ interface GitCommitInfoPluginOptions { directory?: string; } -function linksFromEnv(): Pick { - const out: { 'revision.link'?: string; 'ci.link'?: string; } = {}; +function linksFromEnv(): Pick { + const out: { 'revision.link'?: string; 'ci.link'?: string; 'pull.link'?: string; 'pull.base'?: string; } = {}; // Jenkins: https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables if (process.env.BUILD_URL) out['ci.link'] = process.env.BUILD_URL; @@ -59,10 +59,15 @@ function linksFromEnv(): Pick { out['revision.link'] = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/commit/${process.env.GITHUB_SHA}`; if (process.env.GITHUB_SERVER_URL && process.env.GITHUB_REPOSITORY && process.env.GITHUB_RUN_ID) out['ci.link'] = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`; + if (process.env.GITHUB_REF_NAME && process.env.GITHUB_REF_NAME.endsWith('/merge')) { + const pullId = process.env.GITHUB_REF_NAME.substring(0, process.env.GITHUB_REF_NAME.indexOf('/merge')); + out['pull.link'] = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/pull/${pullId}`; + out['pull.base'] = process.env.GITHUB_BASE_REF; + } return out; } -async function gitStatusFromCLI(gitDir: string): Promise { +async function gitStatusFromCLI(gitDir: string, envInfo: Pick): Promise { const separator = `:${createGuid().slice(0, 4)}:`; const commitInfoResult = await spawnAsync( 'git', @@ -92,5 +97,15 @@ async function gitStatusFromCLI(gitDir: string): Promise