Budibase/budibase · error · Error

Github latest release url not found

Error message

Github latest release url not found

What it means

The latest GitHub release must contain a downloadable asset whose content_type is application/gzip; its browser_download_url is used as the plugin tarball. If no such asset exists, the release cannot be downloaded and this error is thrown.

Source

Thrown at packages/server/src/api/controllers/plugin/github.ts:77

  const pluginLatestReleaseUrl = pluginDetails?.["releases_url"]
    ? pluginDetails?.["releases_url"].replace("{/id}", "/latest")
    : undefined
  if (!pluginLatestReleaseUrl) {
    throw new Error("Github release not found")
  }

  const pluginReleaseDetails = await request(
    pluginLatestReleaseUrl,
    headers,
    "Github latest release not found"
  )
  const pluginReleaseTarballAsset = pluginReleaseDetails?.assets?.find(
    (x: any) => x?.["content_type"] === "application/gzip"
  )
  const pluginLastReleaseTarballUrl =
    pluginReleaseTarballAsset?.["browser_download_url"]
  if (!pluginLastReleaseTarballUrl) {
    throw new Error("Github latest release url not found")
  }

  try {
    path = await downloadUnzipTarball(
      pluginLastReleaseTarballUrl,
      pluginName,
      headers
    )
    return await getPluginMetadata(path)
  } catch (err: any) {
    if (path) {
      deleteFolderFileSystem(path)
    }
    let errMsg = err?.message || err
    if (errMsg === "unexpected response Not Found") {
      errMsg = "Github release tarball not found"
    }
    throw new Error(errMsg)

View on GitHub (pinned to a81a902e9a)

Solutions

  1. Ask the plugin maintainer to attach a .tar.gz (application/gzip) asset to the latest release
  2. Publish a new release including a tar.gz build artifact
  3. Check the release assets at https://github.com/owner/repo/releases/latest and confirm a gzip asset is present
  4. Point at an older release/tag that does include a tar.gz if the flow allows
Defensive patterns

Strategy: validation

Validate before calling

const rel = await fetch(`https://api.github.com/repos/${owner}/${repo}/releases/latest`).then(r => r.json())
const hasGzip = (rel.assets || []).some(a => a.content_type === 'application/gzip')
if (!hasGzip) throw new Error('Latest release has no tar.gz asset')

Type guard

function hasGzipAsset(release: { assets?: Array<{ content_type?: string }> }): boolean {
  return (release.assets ?? []).some(a => a.content_type === 'application/gzip')
}

Try / catch

try {
  await installPlugin({ source: 'GITHUB', url })
} catch (err) {
  if (err.message === 'Github latest release url not found') {
    console.error('Ask the maintainer to attach a .tar.gz asset to the latest release')
  }
}

Prevention

When it happens

Trigger: The repo's latest GitHub release has no .tar.gz asset (only source zip / wrong content_type), or the release has zero assets.

Common situations: Plugin repo publishes releases via GitHub auto-generated source archives only (GitHub source zips get application/zip content_type); CI uploaded a zip instead of tar.gz; repo has a tag but no packaged release.

Related errors


AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29). Data as JSON: /api/errors/8262d9c686d8fea1. Report an issue: GitHub.