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'
}
|