43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import {PullRequestSchema, ConfigurationOptions} from './schemas'
|
|
|
|
export function getRefs(
|
|
config: ConfigurationOptions,
|
|
context: {payload: {pull_request?: 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 (
|
|
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
|
|
}
|
|
|
|
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, or by running a `pull_request`/`pull_request_target` workflow.'
|
|
)
|
|
} else if (!base_ref) {
|
|
throw new Error(
|
|
'A base ref must be provided, either via the `base_ref` config option, ' +
|
|
'or by running a `pull_request`/`pull_request_target` workflow.'
|
|
)
|
|
} else if (!head_ref) {
|
|
throw new Error(
|
|
'A head ref must be provided, either via the `head_ref` config option, ' +
|
|
'or by running a `pull_request`/`pull_request_target` workflow.'
|
|
)
|
|
}
|
|
|
|
return {
|
|
base: base_ref,
|
|
head: head_ref
|
|
}
|
|
}
|