{"record":{"id":"a0a8e7f11ff0c59c","repo":"badges/shields","slug":"no-versions-found-a0a8e7","errorCode":null,"errorMessage":"no versions found","messagePattern":"no versions found","errorType":"exception","errorClass":"InvalidResponse","httpStatus":null,"severity":"error","filePath":"services/piwheels/piwheels-version.service.js","lineNumber":84,"sourceCode":"  }\n\n  static transform(releases, includePrereleases) {\n    const allReleases = Object.keys(releases)\n      .reduce(\n        (acc, key) =>\n          acc.concat({\n            version: key,\n            prerelease: releases[key].prerelease,\n            yanked: releases[key].yanked,\n            hasFiles: Object.keys(releases[key].files).length > 0,\n          }),\n        [],\n      )\n      .filter(release => !release.yanked) // exclude any yanked releases\n      .filter(release => release.hasFiles) // exclude any releases with no wheels\n\n    if (allReleases.length === 0) {\n      throw new InvalidResponse({ prettyMessage: 'no versions found' })\n    }\n\n    if (includePrereleases) {\n      return allReleases[0].version\n    }\n\n    const stableReleases = allReleases.filter(release => !release.prerelease)\n    if (stableReleases.length > 0) {\n      return stableReleases[0].version\n    }\n    return allReleases[0].version\n  }\n\n  async handle({ wheel }, queryParams) {\n    const includePrereleases = queryParams.include_prereleases !== undefined\n    const { releases } = await this.fetch({ wheel })\n    const version = this.constructor.transform(releases, includePrereleases)\n    return this.constructor.render({ version })","sourceCodeStart":66,"sourceCodeEnd":102,"githubUrl":"https://github.com/badges/shields/blob/766fd8bc89a90b8534dc573ab72dec30215ab1ec/services/piwheels/piwheels-version.service.js#L66-L102","documentation":"This InvalidResponse error is thrown by the piwheels version badge transform when, after filtering out yanked releases and releases with no wheels, zero releases remain. The piwheels API responded successfully, but there is no publishable release to display.","triggerScenarios":"Querying a piwheels package badge for a project whose every release is yanked or has no built wheels (no ARM-compatible wheels published on piwheels), or a package name with no releases at all.","commonSituations":"Newly published packages piwheels has not built yet; packages whose wheels were all yanked; typos in the package name leading to an empty result; pure-Python-only packages not built by piwheels.","solutions":["Verify the package name is correct and exists on PyPI/piwheels","Check whether the package's releases are all yanked or lack wheels on piwheels.org","Wait for piwheels to build wheels for a newly released package, then re-request","Use the PyPI version badge instead if the package is not distributed via piwheels"],"exampleFix":"// before\n/piwheels/version/nonexistent-package\n// after\n/piwheels/version/rpi-gpio","handlingStrategy":"try-catch","validationCode":"const data = await fetchPiwheelsReleases(pkg)\nconst publishable = Object.values(data.releases || {}).filter(r => !r.yanked && r.hasFiles)\nif (publishable.length === 0) throw new Error('No publishable (non-yanked, wheeled) releases on piwheels')","typeGuard":"function hasPublishableReleases(piwheelsData) {\n  return typeof piwheelsData === 'object' && piwheelsData !== null &&\n    Object.values(piwheelsData.releases || {}).some(r => !r.yanked && r.hasFiles)\n}","tryCatchPattern":"try {\n  const version = await piwheelsVersion(pkg)\n} catch (e) {\n  if (e instanceof InvalidResponse && e.message === 'no versions found') return { label: 'piwheels', message: 'no releases', color: 'lightgrey' }\n  throw e\n}","preventionTips":["Verify the package exists and has wheels on piwheels.org before adding the badge","Wait for piwheels builds after a fresh release before rendering badges","Fall back to a PyPI badge when a package is not distributed via piwheels"],"tags":["piwheels","python","versioning","no-data"],"backgroundTag":"resource-not-found","analyzedSha":"766fd8bc89a90b8534dc573ab72dec30215ab1ec","analyzedAt":"2026-08-30T01:40:27.499Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}