From 0e426f86d52913d0a902c607107e235d402e3d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20P=C3=A9rez?= Date: Thu, 29 Oct 2026 13:36:16 +0100 Subject: [PATCH] feat(cli): forward the GitHub job id and re-run opt-in with test sessions The CLI now forwards CHECKLY_GITHUB_JOB_ID as github.jobId in the session's repository info. It forwards CHECKLY_GITHUB_RERUN as github.rerun. checkly-action sets both when a workflow opts into Re-run on its Checkly GitHub Check. The backend uses them to re-run the job that dispatched the session. Both values are trimmed. An unset or blank value is left out. --- .../src/rest/__tests__/test-sessions.spec.ts | 2 ++ .../cli/src/services/__tests__/util.spec.ts | 35 +++++++++++++++++++ packages/cli/src/services/util.ts | 8 +++++ 3 files changed, 45 insertions(+) diff --git a/packages/cli/src/rest/__tests__/test-sessions.spec.ts b/packages/cli/src/rest/__tests__/test-sessions.spec.ts index ef00e7da..d7dd42b6 100644 --- a/packages/cli/src/rest/__tests__/test-sessions.spec.ts +++ b/packages/cli/src/rest/__tests__/test-sessions.spec.ts @@ -17,11 +17,13 @@ describe('TestSessions REST client', () => { runAttempt: '2', workflow: 'Checkly', job: 'validate', + jobId: '42424242', eventName: 'pull_request', ref: 'refs/pull/4/merge', headRef: 'herve/test-checkly-action', baseRef: 'main', serverUrl: 'https://github.com', + rerun: 'repository-dispatch', }, } diff --git a/packages/cli/src/services/__tests__/util.spec.ts b/packages/cli/src/services/__tests__/util.spec.ts index 919080d6..28566edc 100644 --- a/packages/cli/src/services/__tests__/util.spec.ts +++ b/packages/cli/src/services/__tests__/util.spec.ts @@ -32,11 +32,13 @@ const ENV_KEYS = [ 'CHECKLY_GITHUB_RUN_ATTEMPT', 'CHECKLY_GITHUB_WORKFLOW', 'CHECKLY_GITHUB_JOB', + 'CHECKLY_GITHUB_JOB_ID', 'CHECKLY_GITHUB_EVENT_NAME', 'CHECKLY_GITHUB_REF', 'CHECKLY_GITHUB_HEAD_REF', 'CHECKLY_GITHUB_BASE_REF', 'CHECKLY_GITHUB_SERVER_URL', + 'CHECKLY_GITHUB_RERUN', ] as const describe('util', () => { @@ -174,11 +176,13 @@ describe('util', () => { process.env.CHECKLY_GITHUB_RUN_ATTEMPT = '2' process.env.CHECKLY_GITHUB_WORKFLOW = 'Checkly' process.env.CHECKLY_GITHUB_JOB = 'validate' + process.env.CHECKLY_GITHUB_JOB_ID = '42424242' process.env.CHECKLY_GITHUB_EVENT_NAME = 'pull_request' process.env.CHECKLY_GITHUB_REF = 'refs/pull/4/merge' process.env.CHECKLY_GITHUB_HEAD_REF = 'herve/test-checkly-action' process.env.CHECKLY_GITHUB_BASE_REF = 'main' process.env.CHECKLY_GITHUB_SERVER_URL = 'https://github.com' + process.env.CHECKLY_GITHUB_RERUN = 'repository-dispatch' expect(getGitInformation()).toEqual(expect.objectContaining({ commitId: 'abc123def456', @@ -195,14 +199,45 @@ describe('util', () => { runAttempt: '2', workflow: 'Checkly', job: 'validate', + jobId: '42424242', eventName: 'pull_request', ref: 'refs/pull/4/merge', headRef: 'herve/test-checkly-action', baseRef: 'main', serverUrl: 'https://github.com', + rerun: 'repository-dispatch', }, })) }) + + it('should trim the GitHub job id and re-run mode', () => { + process.env.CHECKLY_GITHUB_REPORT = 'true' + process.env.CHECKLY_GITHUB_SHA = 'abc123def456' + process.env.CHECKLY_GITHUB_JOB_ID = ' 42424242\n' + process.env.CHECKLY_GITHUB_RERUN = ' repository-dispatch ' + + expect(getGitInformation()?.github).toEqual(expect.objectContaining({ + jobId: '42424242', + rerun: 'repository-dispatch', + })) + }) + + it.each([ + ['unset', undefined], + ['empty', ''], + ['whitespace only', ' '], + ])('should leave the GitHub job id and re-run mode out of the payload when %s', (_, value) => { + process.env.CHECKLY_GITHUB_REPORT = 'true' + process.env.CHECKLY_GITHUB_SHA = 'abc123def456' + if (value !== undefined) { + process.env.CHECKLY_GITHUB_JOB_ID = value + process.env.CHECKLY_GITHUB_RERUN = value + } + + const payload = JSON.parse(JSON.stringify(getGitInformation())) + expect(payload.github).not.toHaveProperty('jobId') + expect(payload.github).not.toHaveProperty('rerun') + }) }) describe('normalizeGitRemoteUrl()', () => { diff --git a/packages/cli/src/services/util.ts b/packages/cli/src/services/util.ts index 7330ada7..c97e5424 100644 --- a/packages/cli/src/services/util.ts +++ b/packages/cli/src/services/util.ts @@ -32,11 +32,13 @@ export interface GitHubActionsInformation { runAttempt?: string workflow?: string job?: string + jobId?: string eventName?: string ref?: string headRef?: string baseRef?: string serverUrl?: string + rerun?: string } export interface CiInformation { @@ -157,6 +159,10 @@ function isGitHubReportingEnabled (): boolean { return value === 'true' || value === '1' } +function getTrimmedEnv (name: string): string | undefined { + return process.env[name]?.trim() || undefined +} + export function findFilesRecursively (directory: string, ignoredPaths: Array = []) { if (!fsSync.statSync(directory, { throwIfNoEntry: false })?.isDirectory()) { return [] @@ -274,11 +280,13 @@ export function getGitInformation (repoUrl?: string, cwd: string = process.cwd() runAttempt: process.env.CHECKLY_GITHUB_RUN_ATTEMPT, workflow: process.env.CHECKLY_GITHUB_WORKFLOW, job: process.env.CHECKLY_GITHUB_JOB, + jobId: getTrimmedEnv('CHECKLY_GITHUB_JOB_ID'), eventName: process.env.CHECKLY_GITHUB_EVENT_NAME, ref: process.env.CHECKLY_GITHUB_REF, headRef: process.env.CHECKLY_GITHUB_HEAD_REF, baseRef: process.env.CHECKLY_GITHUB_BASE_REF, serverUrl: process.env.CHECKLY_GITHUB_SERVER_URL, + rerun: getTrimmedEnv('CHECKLY_GITHUB_RERUN'), } }