on-merge/util.ts (48 lines of code) (raw):
import { Octokit } from '@octokit/rest';
import { Commit } from 'backport';
import axios from 'axios';
import semver from 'semver';
export async function getPrPackageVersion(
github: Octokit['rest'],
repoOwner: string,
repoName: string,
ref: string,
) {
const { data } = await github.repos.getContent({
owner: repoOwner,
repo: repoName,
ref: ref,
path: 'package.json',
});
const json = Buffer.from((data as any).content, 'base64').toString();
const { version } = JSON.parse(json) as { version: string };
return version;
}
export function getPrBackportData(prBody: string | undefined | null) {
const prDataMatch = prBody?.match(/<!--BACKPORT (.*?) BACKPORT-->/s);
if (prDataMatch?.[1]) {
const prDataJson = prDataMatch[1];
const prData: Commit[] = JSON.parse(prDataJson);
return prData;
}
return null;
}
export interface ArtifactsApiVersions {
versions: string[];
aliases: string[];
manifests: {
'last-update-time': string;
'seconds-since-last-update': number;
};
}
export async function getArtifactsApiVersions() {
const { data } = await axios.get('https://artifacts.elastic.co/api/v1/versions');
return data as ArtifactsApiVersions;
}
export function getVersionLabel(artifactsApiVersions: ArtifactsApiVersions, version: string) {
const nonSnapshotExists = artifactsApiVersions.versions.some((v) => v === version);
return `v${nonSnapshotExists ? semver.inc(version, 'patch') : version}`;
}
export function labelsContain(labels: { name: string }[], label: string) {
return labels.some((l) => l.name.toLowerCase() === label.toLowerCase());
}