From 53e2b89833416d8cc972d65c264b9aaaf509f491 Mon Sep 17 00:00:00 2001 From: Frostebite Date: Sun, 3 Aug 2025 20:03:16 +0100 Subject: [PATCH] test: add github check integration --- .../workflows/github-checks-integration.yml | 24 ++++++++++++ ...d-runner-github-checks.integration.test.ts | 38 +++++++++++++++++++ src/jest.setup.ts | 13 +------ 3 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/github-checks-integration.yml create mode 100644 src/integration/cloud-runner-github-checks.integration.test.ts diff --git a/.github/workflows/github-checks-integration.yml b/.github/workflows/github-checks-integration.yml new file mode 100644 index 00000000..84cdff27 --- /dev/null +++ b/.github/workflows/github-checks-integration.yml @@ -0,0 +1,24 @@ +name: GitHub Checks Integration + +on: + workflow_dispatch: + +permissions: + contents: read + checks: write + +jobs: + integration: + runs-on: ubuntu-latest + env: + RUN_GITHUB_INTEGRATION_TESTS: true + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'yarn' + - run: yarn install --frozen-lockfile + - run: yarn test cloud-runner-github-checks.integration --detectOpenHandles --forceExit --runInBand + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/src/integration/cloud-runner-github-checks.integration.test.ts b/src/integration/cloud-runner-github-checks.integration.test.ts new file mode 100644 index 00000000..56a85569 --- /dev/null +++ b/src/integration/cloud-runner-github-checks.integration.test.ts @@ -0,0 +1,38 @@ +import { BuildParameters } from '../model'; +import CloudRunner from '../model/cloud-runner/cloud-runner'; +import UnityVersioning from '../model/unity-versioning'; +import { Cli } from '../model/cli/cli'; +import GitHub from '../model/github'; +import { OptionValues } from 'commander'; + +export const TIMEOUT_INFINITE = 1e9; + +async function createParameters(overrides?: OptionValues) { + if (overrides) Cli.options = overrides; + + return BuildParameters.create(); +} + +const runIntegration = process.env.RUN_GITHUB_INTEGRATION_TESTS === 'true'; +const describeOrSkip = runIntegration ? describe : describe.skip; + +describeOrSkip('Cloud Runner Github Checks Integration', () => { + it( + 'creates and updates a real GitHub check', + async () => { + const buildParameter = await createParameters({ + versioning: 'None', + projectPath: 'test-project', + unityVersion: UnityVersioning.read('test-project'), + asyncCloudRunner: `true`, + githubChecks: `true`, + }); + await CloudRunner.setup(buildParameter); + const checkId = await GitHub.createGitHubCheck(`integration create`); + expect(checkId).not.toEqual(''); + await GitHub.updateGitHubCheck(`1 ${new Date().toISOString()}`, `integration`); + await GitHub.updateGitHubCheck(`2 ${new Date().toISOString()}`, `integration`, `success`, `completed`); + }, + TIMEOUT_INFINITE, + ); +}); diff --git a/src/jest.setup.ts b/src/jest.setup.ts index 1263e5bc..554c63f4 100644 --- a/src/jest.setup.ts +++ b/src/jest.setup.ts @@ -6,18 +6,9 @@ import failOnConsole from 'jest-fail-on-console'; // implementation, so we provide one using undici's implementation. // This ensures tests that interact with Octokit do not throw when // constructing the client. -import { fetch, Headers, Request, Response } from 'undici'; +import { fetch as undiciFetch, Headers, Request, Response } from 'undici'; -if (!global.fetch) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (global as any).fetch = fetch; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (global as any).Headers = Headers; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (global as any).Request = Request; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (global as any).Response = Response; -} +Object.assign(globalThis, { fetch: undiciFetch, Headers, Request, Response }); // Fail when console logs something inside a test - use spyOn instead failOnConsole({