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

  1. Check the server logs for the line '[SystemController] Failed to fetch versions for <name>' — the err field holds the real cause
  2. Verify the host has outbound network access to the service's source_repo (curl the registry/manifest URL)
  3. Confirm the Service row's source_repo and hostArch are set correctly
  4. 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

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


AI-assisted analysis of Crosstalk-Solutions/project-nomad@0bd1c6f4f9 (2026-08-27). Data as JSON: /api/errors/8e5020b46cbdcfe2. Report an issue: GitHub.