Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | 1x 1x 1x 2x 1x 3x 3x 1x 2x 2x 2x 1x 2x 2x 2x 1x 2x 2x 1x 2x 2x 2x 1x 1x 1x 1x 1x 1x | import { config } from './config' import { isSemverGreater } from './semver' import { Logger } from '@azure/functions' export function bearer(token?: string) { return `Bearer ${token}` } async function getLatestGithubReleaseWithPrelease(token?: string) { const response = await fetch(`https://api.github.com/repos/${config.repositoryOwner}/${config.repository}/releases`, { headers: token ? { Authorization: bearer(token), } : undefined, }) const releases = (await response.json()) as GithubRelease[] return releases?.[0] } export async function getLatestGithubRelease(token?: string) { const response = await fetch( `https://api.github.com/repos/${config.repositoryOwner}/${config.repository}/releases/latest`, { headers: token ? { Authorization: bearer(token), } : undefined, } ) return (await response.json()) as GithubRelease } export async function downloadReleaseAsset(url: string, token?: string, logger?: Logger) { logger?.verbose(`Downloading release asset from ${url}`) const headers: Record<string, string> = { Accept: 'application/octet-stream', 'User-Agent': 'fingerprint-pro-azure-integration', } if (token) { headers['Authorization'] = bearer(token) } const response = await fetch(url, { headers }) const arrayBuffer = await response.arrayBuffer() return Buffer.from(arrayBuffer) } export async function findFunctionZip(assets: GithubReleaseAsset[]) { return assets.find( (asset) => asset.name === 'package.zip' && asset.state === 'uploaded' && asset.content_type === 'application/zip' ) } export async function getLatestFunctionZip( logger?: Logger, token?: string, version = config.version, allowPrerelease = false ) { Iif (allowPrerelease) { logger?.info('Pre-releases are allowed') } const release = allowPrerelease ? await getLatestGithubReleaseWithPrelease(token) : await getLatestGithubRelease(token) if (!isSemverGreater(release.tag_name, version)) { logger?.verbose(`Latest release ${release.tag_name} is not greater than current version ${version}`) return null } logger?.verbose(`Found new release ${release.tag_name}`, release.assets) const asset = await findFunctionZip(release.assets) logger?.verbose(`Found asset ${asset?.name} for release ${release.tag_name}`, asset) return asset ? { file: await downloadReleaseAsset(asset.url, token, logger), name: asset.name, version: release.tag_name, } : null } export interface GithubRelease { assets_url: string url: string tag_name: string name: string assets: GithubReleaseAsset[] } export interface GithubReleaseAsset { url: string name: string content_type: string state: 'uploaded' | 'errored' } |