Skip to content

Exclude deprecated apps from catalog and add URL health check#226

Open
ugurkocde wants to merge 1 commit into
mainfrom
catalog-deprecation-and-url-health
Open

Exclude deprecated apps from catalog and add URL health check#226
ugurkocde wants to merge 1 commit into
mainfrom
catalog-deprecation-and-url-health

Conversation

@ugurkocde

Copy link
Copy Markdown
Owner

Problem

Three IntuneBrew website upload runs failed on 2026-07-02. Investigating them revealed a systematic issue in the catalog pipeline: an audit of all 1271 download URLs found 19 broken ones, in two categories.

Zombie entries (14 apps). The nightly collector syncs versions from Homebrew casks but ignores the deprecated and disabled cask flags, and it silently swallows 404s for casks that were deleted from Homebrew. Discontinued apps like Skype, Facebook Messenger, Boxcryptor, or Twitch Studio therefore stayed in supported_apps.json forever, and any upload attempt for them was guaranteed to fail.

Silent URL rot (5 apps). Nothing in the pipeline ever probes the download URLs. When a vendor deletes a versioned file (jamovi removed its 2.7.37.0 DMG and redirects to a 404 page served with HTTP 200), the catalog keeps republishing the dead link every night with a green workflow run. The jamovi upload failure surfaced as a cryptic commitFileFailed in Intune after uploading a 32 KB HTML page.

Changes

  • collect_app_info.py honors the deprecated/disabled flags of Homebrew casks. Affected app JSONs get "deprecated": true plus the upstream reason, and the flag is cleared automatically if the cask becomes healthy again (verified both directions against the live Homebrew API).
  • supported_apps.json generation and the packaging step in build-app-packages.yml skip flagged apps. The JSON files stay in Apps/ for history.
  • New url-health-check.yml workflow (Mondays and Thursdays, plus manual dispatch) probes every non-deprecated catalog URL and creates or updates a GitHub issue listing broken ones, closing it when everything is healthy. The checker tries several client profiles per URL (HEAD, ranged GET, curl and browser user agents) because different CDNs block different clients; a URL counts as broken only when every attempt fails.
  • Data cleanup: the 14 currently dead apps are flagged and supported_apps.json is regenerated (1271 to 1257 apps). The README app table will be rebuilt by the next nightly run.

Verification

  • Ran the new deprecation path against the live Homebrew API for all 12 deprecated/disabled casks: all flagged with the correct upstream reason.
  • Ran a revival test: a healthy cask (jamovi) with an artificial deprecated flag gets the flag removed and the JSON round-trips byte-identical otherwise.
  • Ran the health check script over the full catalog: 5 broken URLs found (jamovi, postbox, real_vnc_viewer, tuta_mail, warp), zero false positives from bot-protected CDNs (SourceForge, Tableau, VideoLAN all pass).
  • py_compile and YAML validation pass for all touched files.

Uploads for apps like Skype or Twitch Studio were guaranteed to fail
because their vendors discontinued them, and apps like jamovi broke
silently when the vendor removed a versioned download file.

- collect_app_info.py now honors the deprecated and disabled flags of
  Homebrew casks: affected app JSONs get a deprecated flag with the
  upstream reason, and the flag is cleared automatically if the cask
  becomes healthy again
- supported_apps.json generation and app packaging skip deprecated apps
- New twice-weekly url-health-check workflow probes every catalog
  download URL and maintains a GitHub issue listing broken ones
- Flag the 14 apps that are currently discontinued or removed upstream
  and regenerate supported_apps.json (1271 to 1257 apps)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant