Crosstalk-Solutions/project-nomad · error
Failed to fetch available versions for this service.
Error message
Failed to fetch available versions for this service.
What it means
This 500 error is returned by the getAvailableVersions endpoint when the underlying call to fetch available update versions for a service (via DockerService/update source repo) throws. It is a catch-all wrapper: any network failure, registry error, or unexpected exception while listing versions is masked as this generic message, with the real cause logged server-side.
Source
Thrown at admin/app/controllers/system_controller.ts:252
.where('service_name', serviceName)
.where('installed', true)
.first()
if (!service) {
return response.status(404).send({ error: `Service ${serviceName} not found or not installed` })
}
try {
const hostArch = await this.getHostArch()
const updates = await this.containerRegistryService.getAvailableUpdates(
service.container_image,
hostArch,
service.source_repo
)
response.send({ versions: updates })
} catch (error) {
logger.error({ err: error }, `[SystemController] Failed to fetch versions for ${serviceName}`)
response.status(500).send({ error: 'Failed to fetch available versions for this service.' })
}
}
async updateService({ request, response }: HttpContext) {
const payload = await request.validateUsing(updateServiceValidator)
const result = await this.dockerService.updateContainer(
payload.service_name,
payload.target_version
)
if (result.success) {
response.send({ success: true, message: result.message })
} else {
response.status(400).send({ error: result.message })
}
}
private async getHostArch(): Promise<string> {View on GitHub (pinned to 0bd1c6f4f9)
Solutions
- Check the server logs for the line '[SystemController] Failed to fetch versions for <name>' — the err field holds the real cause
- Verify the host has outbound network access to the service's source_repo (curl the registry/manifest URL)
- Confirm the Service row's source_repo and hostArch are set correctly
- Retry after resolving connectivity; if the registry is rate-limiting, wait or authenticate
Defensive patterns
Strategy: try-catch
Validate before calling
const reachable = await fetch(serviceRepoHealthUrl, { method: 'HEAD' }).then(() => true).catch(() => false);
if (!reachable) throw new Error('Version source unreachable'); Try / catch
try {
const { versions } = await api.getAvailableVersions(serviceName);
} catch (e: any) {
if (e?.response?.status === 500) showOfflineFallback(); // real cause is in server logs
} Prevention
- Monitor host outbound connectivity to registries
- Cache last-known version list client-side to degrade gracefully
When it happens
Trigger: GET request to the available-versions route (e.g. /api/system/versions) when the service's source_repo is unreachable, the registry API rate-limits or times out, hostArch detection fails, or the service record has a malformed source_repo.
Common situations: Offline or firewalled homelab host, Docker Hub / GitHub API rate limiting, a service entry with a bad or empty source_repo, or a transient DNS failure during version lookup.
Related errors
- HTTP ${resp.status} from ${MANIFEST_URL}
- No internet — connect to download FDA drug data. (${msg})
- sysbench disk-write benchmark produced no parseable MiB/s —
- Sysbench command failed: ${error.message}
- Failed to get auth token from ${registry}: ${response.status
AI-assisted analysis of Crosstalk-Solutions/project-nomad@0bd1c6f4f9 (2026-08-27).
Data as JSON: /api/errors/8e5020b46cbdcfe2.
Report an issue: GitHub.