Repository navigation
Unify update feeds with channel-aware installer manifest - #414
Conversation
Give Application.Updates.IUpdateService a channel-aware CheckForUpdateAsync overload (default forwards to Stable so existing callers and fakes compile unchanged). UpdateService resolves manifest.json for Stable and manifest-preview.json for Preview and ignores prerelease manifests on Stable. Repoint ReleaseManifestUpdateService off the dead api.trackdub.com host to releases.trackdub.ai, removing the last api.trackdub.com reference. Covers C6 core half of the combined-priority work-split.
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
📒 Files selected for processing (4)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughUpdate checks now accept a channel and select a stable or preview manifest. Stable checks ignore prerelease manifests. The legacy release manifest service uses the new releases.trackdub.ai URL. Tests verify channel-based requests and stable prerelease handling. ChangesUpdate channels
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Feature Sequence Diagram(s)sequenceDiagram
participant Caller
participant UpdateService
participant ManifestEndpoint
Caller->>UpdateService: CheckForUpdateAsync(currentVersion, channel)
UpdateService->>ManifestEndpoint: GET manifest for selected channel
ManifestEndpoint-->>UpdateService: Release manifest
alt Stable channel with prerelease manifest
UpdateService-->>Caller: No update and no error
else Other manifest cases
UpdateService-->>Caller: Continue version and download URL validation
end
|
PR Summary by QodoAdd channel-aware installer update manifests and unify release hosts
AI Description
Diagram
High-Level Assessment
Files changed (4)
|
There was a problem hiding this comment.
The implementation successfully unifies update feeds with channel-aware manifests. The changes correctly add a channel-aware overload to IUpdateService, migrate from the deprecated api.trackdub.com to releases.trackdub.ai, and implement proper prerelease filtering for the Stable channel. The comprehensive test coverage validates all the new functionality including channel routing, prerelease handling, and manifest URL resolution. All 19 UpdateServiceTests pass as noted in the PR description. No blocking issues found.
You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: df1cbb69df
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| return new Trackdub.Application.Updates.UpdateCheckResult(false, null, "Release manifest could not be parsed."); | ||
| } | ||
|
|
||
| if (channel == UpdateChannel.Stable && schema.IsPrerelease) |
There was a problem hiding this comment.
Parse prerelease versions in the Preview path
When the Preview manifest contains a normal SemVer prerelease such as 2.0.1-beta.1 (the format already exercised by CheckForUpdatesAsync_SemVerSuffix_ReturnsUpdateResult), this branch falls through to Version.TryParse(schema.LatestVersion), which rejects the suffix and returns “Version format in manifest is invalid.” Consequently, the newly added Preview channel cannot offer actual prerelease builds; compare prerelease-aware versions or normalize them before parsing.
Useful? React with 👍 / 👎.
Code Review by Qodo
1.
|
Qodo FixerNo findings are within the configured fix scope. To change which findings are fixed, adjust the setting on your Qodo configuration page. |
tonythethompson
left a comment
There was a problem hiding this comment.
One material note on Preview version parsing; otherwise the channel URL split and Stable prerelease gate look right.
| if (channel == UpdateChannel.Stable && schema.IsPrerelease) | ||
| { | ||
| logger.LogInformation( | ||
| $"Ignoring prerelease {schema.LatestVersion} on the Stable channel."); | ||
| return new Trackdub.Application.Updates.UpdateCheckResult(false, null, null); |
There was a problem hiding this comment.
Version.TryParse immediately below still rejects SemVer pre-release tags (2.0.1-beta.1, 2.1.0-preview.3). Preview manifests will almost always publish those forms, so a Preview check returns "Version format in manifest is invalid" instead of an update — this Stable IsPrerelease gate never gets a chance to help on the Preview path.
ReleaseManifestUpdateService already strips -/+ suffixes before comparing (SanitizeVersion). Mirror that here (or share a helper) for both schema.LatestVersion and currentVersion, and keep the full original string on ReleaseEntry. Worth a Preview test with a suffixed latest version; the new Preview URL test uses plain 2.0.0, so this gap is unguarded.
Residual: strip-and-compare still collapses 2.0.0-beta.1 vs 2.0.0-beta.2; fine to leave unless Preview bumps often within the same numeric triple.
|
The discovery worker independently confirmed my analysis: no confirmed defects in the changed code. The PR is a clean, well-tested, low-risk change. Per the skill, with no confirmed findings and no material verification notes, I report clean and do not submit an empty review. No noteworthy issues found. The PR cleanly adds a channel-aware |
|
/q fix |
|
I'll implement the fix for the prerelease version parsing issue: Changes to be made: |
|
✅ Changes committed. The prerelease version parsing issue has been fixed by adding a |
Add StripVersionSuffix helper to remove SemVer prerelease suffixes (e.g., -beta.1, -preview.3) before parsing versions, allowing Preview channel manifests to use standard prerelease version formats. Keep full version strings in ReleaseEntry for display purposes. Add test coverage for Preview channel with prerelease versions.
C6 core half (combined-priority work-split).
Verification: UpdateServiceTests 19/19, Infrastructure.Tests 430/430, Application.Tests 1149/1149, Release -warnaserror clean on Application + Infrastructure.
Follow-ups (not in this PR): gated UpdateViewModel passes channel through after repin; release pipeline must publish manifest-preview.json.
Summary by CodeRabbit