{"record":{"id":"f621986a76a70d2f","repo":"Budibase/budibase","slug":"github-release-version-not-found","errorCode":null,"errorMessage":"Github release version not found","messagePattern":"Github release version not found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/server/src/sdk/plugins/update.ts","lineNumber":107,"sourceCode":"  const url = `${GITHUB_API_ROOT}/${repo}/releases/latest`\n  const headers = headersForRequest(token)\n  const response = await fetch(url, { headers })\n\n  if (response.status === 404) {\n    return null\n  }\n\n  const data = await response.json()\n  const tarballAsset = (data.assets || []).find(\n    (asset: any) => asset?.content_type === \"application/gzip\"\n  )\n  const tarballUrl = tarballAsset?.browser_download_url\n  if (!tarballUrl) {\n    throw new Error(\"Github latest release url not found\")\n  }\n  const version = normaliseVersion(data.tag_name) || normaliseVersion(data.name)\n  if (!version) {\n    throw new Error(\"Github release version not found\")\n  }\n  return {\n    version,\n    tagName: data.tag_name,\n    name: data.name,\n    htmlUrl: data.html_url,\n    publishedAt: data.published_at,\n    tarballUrl,\n    etag: response.headers.get(\"etag\") || undefined,\n    body: data.body,\n  }\n}\n\nfunction buildUpdateInfo(\n  plugin: Plugin,\n  release: ReleaseDetails\n): PluginUpdateInfo {\n  return {","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/Budibase/budibase/blob/a81a902e9a8fe55b467d106765f6638f12e35c49/packages/server/src/sdk/plugins/update.ts#L89-L125","documentation":"fetchLatestRelease derives the plugin version from the GitHub release's tag_name or name via normaliseVersion. If neither yields a parsable version string (after the tarball check passed), it throws 'Github release version not found'.","triggerScenarios":"A GitHub release whose tag_name and display name contain no recognisable semantic version (e.g. tag \"latest\", \"stable\", or a date-only name that normaliseVersion cannot parse).","commonSituations":"Maintainers tagging releases with non-semver names; renaming releases to marketing names ('Summer drop'); CI creating tags like \"build-123\" that the version normaliser rejects.","solutions":["Retag/rename the GitHub release to include a semver version (e.g. v1.2.3) in tag_name or name.","Ask the maintainer to fix the release naming via `gh release edit <tag> --tag v1.2.3`.","Pin the plugin to an earlier release with a valid version tag.","If you control the plugin repo, ensure CI publishes tags matching semver."],"exampleFix":"// before\ngit tag build-2026 && git push --tags\n// after\ngit tag v1.2.3 && git push --tags","handlingStrategy":"validation","validationCode":"const v = normaliseVersion(release.tag_name) || normaliseVersion(release.name)\nif (!v) throw new Error(`Release ${release.tag_name} has no parsable version`)","typeGuard":"const hasParsableVersion = (r: { tag_name?: string; name?: string }): boolean => Boolean(normaliseVersion(r.tag_name) || normaliseVersion(r.name))","tryCatchPattern":null,"preventionTips":["Use strict semver tags (vX.Y.Z) for plugin releases","Avoid marketing-style release names","Enforce semver tags in release CI","Edit misnamed releases with `gh release edit --tag vX.Y.Z`"],"tags":["github","plugins","versioning"],"backgroundTag":"github-release-version-missing","analyzedSha":"a81a902e9a8fe55b467d106765f6638f12e35c49","analyzedAt":"2026-08-29T01:03:10.972Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}