badges/shields · error · InvalidResponse
no versions found
Error message
no versions found
What it means
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.
Source
Thrown at services/piwheels/piwheels-version.service.js:84
}
static transform(releases, includePrereleases) {
const allReleases = Object.keys(releases)
.reduce(
(acc, key) =>
acc.concat({
version: key,
prerelease: releases[key].prerelease,
yanked: releases[key].yanked,
hasFiles: Object.keys(releases[key].files).length > 0,
}),
[],
)
.filter(release => !release.yanked) // exclude any yanked releases
.filter(release => release.hasFiles) // exclude any releases with no wheels
if (allReleases.length === 0) {
throw new InvalidResponse({ prettyMessage: 'no versions found' })
}
if (includePrereleases) {
return allReleases[0].version
}
const stableReleases = allReleases.filter(release => !release.prerelease)
if (stableReleases.length > 0) {
return stableReleases[0].version
}
return allReleases[0].version
}
async handle({ wheel }, queryParams) {
const includePrereleases = queryParams.include_prereleases !== undefined
const { releases } = await this.fetch({ wheel })
const version = this.constructor.transform(releases, includePrereleases)
return this.constructor.render({ version })View on GitHub (pinned to 766fd8bc89)
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
Example fix
// before /piwheels/version/nonexistent-package // after /piwheels/version/rpi-gpio
Defensive patterns
Strategy: try-catch
Validate before calling
const data = await fetchPiwheelsReleases(pkg)
const publishable = Object.values(data.releases || {}).filter(r => !r.yanked && r.hasFiles)
if (publishable.length === 0) throw new Error('No publishable (non-yanked, wheeled) releases on piwheels') Type guard
function hasPublishableReleases(piwheelsData) {
return typeof piwheelsData === 'object' && piwheelsData !== null &&
Object.values(piwheelsData.releases || {}).some(r => !r.yanked && r.hasFiles)
} Try / catch
try {
const version = await piwheelsVersion(pkg)
} catch (e) {
if (e instanceof InvalidResponse && e.message === 'no versions found') return { label: 'piwheels', message: 'no releases', color: 'lightgrey' }
throw e
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
AI-assisted analysis of badges/shields@766fd8bc89 (2026-08-30).
Data as JSON: /api/errors/a0a8e7f11ff0c59c.
Report an issue: GitHub.