59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import {
|
|
PullRequestSchema,
|
|
ConfigurationOptions,
|
|
MergeGroupSchema
|
|
} from './schemas'
|
|
|
|
export function getRefs(
|
|
config: ConfigurationOptions,
|
|
context: {
|
|
payload: {pull_request?: unknown; merge_group?: unknown}
|
|
eventName: string
|
|
}
|
|
): {base: string; head: string} {
|
|
let base_ref = config.base_ref
|
|
let head_ref = config.head_ref
|
|
|
|
// If possible, source default base & head refs from the GitHub event.
|
|
// The base/head ref from the config take priority, if provided.
|
|
if (!base_ref && !head_ref) {
|
|
if (
|
|
context.eventName === 'pull_request' ||
|
|
context.eventName === 'pull_request_target'
|
|
) {
|
|
const pull_request = PullRequestSchema.parse(context.payload.pull_request)
|
|
base_ref = base_ref || pull_request.base.sha
|
|
head_ref = head_ref || pull_request.head.sha
|
|
} else if (context.eventName === 'merge_group') {
|
|
const merge_group = MergeGroupSchema.parse(context.payload.merge_group)
|
|
base_ref = base_ref || merge_group.base_sha
|
|
head_ref = head_ref || merge_group.head_sha
|
|
}
|
|
}
|
|
|
|
if (!base_ref && !head_ref) {
|
|
throw new Error(
|
|
'Both a base ref and head ref must be provided, either via the `base_ref`/`head_ref` ' +
|
|
'config options, `base-ref`/`head-ref` workflow action options, or by running a ' +
|
|
'`pull_request`/`pull_request_target`/`merge_group` workflow.'
|
|
)
|
|
} else if (!base_ref) {
|
|
throw new Error(
|
|
'A base ref must be provided, either via the `base_ref` config option, ' +
|
|
'`base-ref` workflow action option, or by running a ' +
|
|
'`pull_request`/`pull_request_target`/`merge_group` workflow.'
|
|
)
|
|
} else if (!head_ref) {
|
|
throw new Error(
|
|
'A head ref must be provided, either via the `head_ref` config option, ' +
|
|
'`head-ref` workflow action option, or by running a ' +
|
|
'or by running a `pull_request`/`pull_request_target`/`merge_group` workflow.'
|
|
)
|
|
}
|
|
|
|
return {
|
|
base: base_ref,
|
|
head: head_ref
|
|
}
|
|
}
|