From 5d2da71fb887f0612b548df6b314ae5f8cf731ce Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 17 Jul 2024 14:55:59 +0200 Subject: [PATCH] also check CI env var --- packages/playwright/src/program.ts | 11 +++++++++-- tests/playwright-test/only-changed.spec.ts | 18 +++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/playwright/src/program.ts b/packages/playwright/src/program.ts index 57d6a43077..accaefd4d7 100644 --- a/packages/playwright/src/program.ts +++ b/packages/playwright/src/program.ts @@ -156,8 +156,15 @@ Examples: function getOnlyChangedArg(input: string | boolean | undefined): string | undefined { if (typeof input === 'string') return input; - if (input === true) - return process.env.GITHUB_BASE_REF ?? process.env['Build.PullRequest.TargetBranch'] ?? 'HEAD'; + if (input === true) { + if (process.env.CI) { + const baseRef = process.env.GITHUB_BASE_REF ?? process.env.BITBUCKET_BRANCH ?? process.env['Build.PullRequest.TargetBranch']; + if (!baseRef) + throw new Error('You specified --only-changed in a CI environment, but the base reference can not be inferred. Please specify it explicitly, e.g. by setting --only-changed=main'); + return baseRef; + } + return 'HEAD'; + } } diff --git a/tests/playwright-test/only-changed.spec.ts b/tests/playwright-test/only-changed.spec.ts index 529eee2b06..2f95cc8c6f 100644 --- a/tests/playwright-test/only-changed.spec.ts +++ b/tests/playwright-test/only-changed.spec.ts @@ -111,7 +111,7 @@ test.describe('should be smart about PR base reference from CI', () => { `, }); git('commit -a -m update'); - const result = await runInlineTest({}, { 'only-changed': true }, { [envVar]: 'HEAD~1' }); + const result = await runInlineTest({}, { 'only-changed': true }, { CI: 'true', [envVar]: 'HEAD~1' }); expect(result.exitCode).toBe(1); expect(result.failed).toBe(1); @@ -120,7 +120,23 @@ test.describe('should be smart about PR base reference from CI', () => { } testCIEnvironment('Github Actions', 'GITHUB_BASE_REF'); + testCIEnvironment('Bitbucket', 'BITBUCKET_BRANCH'); testCIEnvironment('Azure DevOps', 'Build.PullRequest.TargetBranch'); + + test("throws error if ref isn't available", async ({ runInlineTest, setupRepository, writeFiles }) => { + const git = await setupRepository(); + await writeFiles({ + 'b.spec.ts': ` + import { test, expect } from '@playwright/test'; + test('fails', () => { expect(1).toBe(3); }); + `, + }); + git('commit -a -m update'); + const result = await runInlineTest({}, { 'only-changed': true }, { CI: 'true' }); + + expect(result.exitCode).toBe(1); + expect(result.output).toContain('You specified --only-changed in a CI environment, but the base reference can not be inferred.'); + }); }); test('should understand dependency structure', async ({ runInlineTest, setupRepository, writeFiles }) => {