setup-hugo/src/asset-lookup.ts

50 lines
1.3 KiB
TypeScript
Raw Normal View History

2024-05-03 14:12:12 +02:00
import { getOctokit } from '@actions/github'
2024-05-02 18:38:23 +02:00
import { components } from '@octokit/openapi-types/types'
2024-05-03 14:12:12 +02:00
import { GitHub } from '@actions/github/lib/utils'
import { Octokit } from 'octokit'
2024-05-02 18:38:23 +02:00
export interface IGithubRelease {
readonly tag_name: string
}
export interface IReleaseTransformer<T extends IGithubRelease> {
map(release: components['schemas']['release']): T
}
export interface IReleaseLookup {
getRelease<T extends IGithubRelease>(
user: string,
repo: string,
version: string | undefined,
transformer: IReleaseTransformer<T>
): Promise<T>
}
export class OctokitReleaseLookup implements IReleaseLookup {
2024-05-03 14:12:12 +02:00
octokit: InstanceType<typeof GitHub> | Octokit
2024-05-02 18:38:23 +02:00
constructor(pat?: string) {
2024-05-03 14:12:12 +02:00
this.octokit = pat ? getOctokit(pat) : new Octokit()
2024-05-02 18:38:23 +02:00
}
async getRelease<T extends IGithubRelease>(
owner: string,
repo: string,
version: string | undefined,
transformer: IReleaseTransformer<T>
): Promise<T> {
2024-05-02 19:36:40 +02:00
const latestRelease =
version && version !== 'latest'
? await this.octokit.rest.repos.getReleaseByTag({
2024-05-03 16:17:32 +02:00
owner,
repo,
2024-05-02 19:36:40 +02:00
tag: version
})
: await this.octokit.rest.repos.getLatestRelease({
2024-05-03 16:17:32 +02:00
owner,
repo
2024-05-02 19:36:40 +02:00
})
2024-05-02 18:38:23 +02:00
return transformer.map(latestRelease.data)
}
}