aaif-goose/goose · error

Update Available but no download URL found for platform: ${p

Error message

Update Available but no download URL found for platform: ${platform}, arch: ${arch}

What it means

After finding a release, githubUpdater computes the expected asset name for the current platform/arch and looks for it (case-insensitively) among release.assets. If no asset matches, downloadUrl stays unset and this error throws with the platform and arch — the release exists but has nothing installable for this machine (e.g. Goose.zip vs Goose.dmg naming, or the platform simply isn't shipped).

Source

Thrown at ui/desktop/src/utils/githubUpdater.ts:132

      } else {
        // Linux - for future support
        assetName = `${this.bundleName}-linux-${arch}.zip`;
      }

      log.info(`GitHubUpdater: Looking for asset named: ${assetName}`);
      log.info(`GitHubUpdater: Available assets: ${release.assets.map((a) => a.name).join(', ')}`);

      const asset = release.assets.find((a) => a.name.toLowerCase() === assetName.toLowerCase()); // keeping comparison to lowercase because Goose vs goose
      if (asset) {
        downloadUrl = asset.browser_download_url;
        log.info(`GitHubUpdater: Found matching asset: ${asset.name} (${asset.size} bytes)`);
        log.info(`GitHubUpdater: Download URL: ${downloadUrl}`);
      } else {
        log.warn(`GitHubUpdater: No matching asset found for ${assetName}`);
      }

      if (!downloadUrl) {
        throw new Error(
          `Update Available but no download URL found for platform: ${platform}, arch: ${arch}`
        );
      }

      return {
        updateAvailable: true,
        latestVersion,
        downloadUrl,
        releaseUrl: release.html_url,
      };
    } catch (error) {
      log.error('GitHubUpdater: Error checking for updates:', error);
      log.error('GitHubUpdater: Error details:', {
        message: errorMessage(error, 'Unknown error'),
        stack: error instanceof Error ? error.stack : 'No stack',
        name: error instanceof Error ? error.name : 'Unknown',
        code:
          error instanceof Error && 'code' in error

View on GitHub (pinned to 3810898a74)

Solutions

  1. Check the release page: the logged 'Available assets' line lists what was actually uploaded — confirm your platform/arch is there
  2. If assets were still uploading, retry after the release finishes publishing
  3. Maintainers: ensure the release workflow uploads assets for the platform/arch in the error message
  4. On genuinely unsupported platforms, disable the update check or use manual download
Defensive patterns

Strategy: validation

Validate before calling

// Before offering the update, confirm an asset matches this platform:
const assetName = `Goose-${process.platform}-${process.arch}.zip`; // adapt to naming scheme
if (!release.assets.some(a => a.name.toLowerCase() === assetName.toLowerCase())) {
  skipUpdate('no asset for this platform');
}

Type guard

const releaseHasAssetFor = (release: GitHubRelease, name: string): boolean =>
  release.assets.some(a => a.name.toLowerCase() === name.toLowerCase());

Try / catch

try {
  const info = await checkForUpdatesViaGithub();
} catch (e) {
  if (String(e).includes('no download URL found for platform')) {
    // platform unsupported in this release: suppress update UI, log platform/arch
  } else throw e;
}

Prevention

When it happens

Trigger: Running on linux/arm64 or freebsd where no @aaif/goose-binary asset is published; release published before multi-platform CI finished uploading; asset renamed (Goose.tar.gz vs goose-linux-arm64.tar.gz); case mismatches are handled, extension/format changes are not.

Common situations: Community members on unsupported architectures; checking for updates the moment a release tag is pushed but before all matrix jobs uploaded assets; release pipeline changing artifact names between versions.

Related errors


AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16). Data as JSON: /api/errors/1cda3c0c46e993a9. Report an issue: GitHub.