Make Android APK downloads use dynamic GitHub release URLs#264
Make Android APK downloads use dynamic GitHub release URLs#264AnthonyRonning merged 1 commit intomasterfrom
Conversation
Replace hardcoded APK download link with dynamic URL fetching similar to desktop downloads. This ensures the download page always points to the latest APK release. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
WalkthroughAdds an androidApk URL to download types and plumbing. Extends FALLBACK_URLS and UI in downloads.tsx to surface an Android beta APK link. Updates githubRelease.ts to populate androidApk in DownloadInfo based on release data. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant U as User
participant D as DownloadsPage (downloads.tsx)
participant GR as githubRelease.ts
participant GH as GitHub Releases API
U->>D: Open Downloads page
activate D
alt Use latest release
D->>GR: fetchLatestRelease()
activate GR
GR->>GH: GET /repos/.../releases/latest
GH-->>GR: Release JSON (assets)
GR-->>D: DownloadInfo { downloadUrls: { ..., androidApk } }
deactivate GR
D-->>U: Render links incl. Android APK
else Fallback
D-->>U: Render FALLBACK_URLS incl. androidApk
end
deactivate D
note over D,GR: New: androidApk added to types, populated from release or fallback.
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Comment |
Deploying maple with
|
| Latest commit: |
97a4712
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://38246359.maple-ca8.pages.dev |
| Branch Preview URL: | https://dynamic-android-apk-download.maple-ca8.pages.dev |
There was a problem hiding this comment.
Greptile Overview
Summary
This PR replaces the hardcoded Android APK download URL with a dynamic URL that fetches from the latest GitHub release, matching the pattern used for desktop downloads.
Critical Issue Found:
- The implementation assumes the "latest" release contains Android APK files, but the current release structure shows Android APKs are published in separate tagged releases (e.g.,
v1.99.0-android-beta1vsv1.99.0) - The latest release (
v1.99.0) does NOT containapp-universal-release.apk, meaning the dynamic URL will result in 404 errors for users - The fallback URL also points to the wrong release structure
Required Changes:
- Either: Ensure Android APKs are included in the main releases going forward
- Or: Modify the logic to fetch from Android-specific release tags
- Or: Keep the hardcoded URL approach until release structure is unified
Confidence Score: 0/5
- This PR will break Android APK downloads with 404 errors due to incorrect assumptions about release structure
- The code assumes Android APKs exist in the latest release, but they're published in separate Android-specific releases. This will cause immediate user-facing failures
- Both files require attention:
frontend/src/utils/githubRelease.tsneeds logic to handle Android-specific releases, andfrontend/src/routes/downloads.tsxshould continue using hardcoded URLs until this is resolved
Important Files Changed
File Analysis
| Filename | Score | Overview |
|---|---|---|
| frontend/src/utils/githubRelease.ts | 1/5 | Added androidApk to download URLs, but this will cause 404 errors since latest release doesn't contain Android APKs |
| frontend/src/routes/downloads.tsx | 2/5 | Replaced hardcoded Android APK URL with dynamic downloadUrls.androidApk, but this relies on incorrect assumption about release structure |
Sequence Diagram
sequenceDiagram
participant User
participant DownloadPage
participant githubRelease
participant GitHubAPI
participant Release
User->>DownloadPage: Visit /downloads
DownloadPage->>DownloadPage: useEffect on mount
DownloadPage->>githubRelease: getLatestDownloadInfo()
githubRelease->>githubRelease: fetchLatestRelease()
githubRelease->>GitHubAPI: GET /repos/.../releases/latest
GitHubAPI-->>githubRelease: {tag_name: "v1.99.0", ...}
githubRelease->>githubRelease: Build download URLs
Note over githubRelease: Constructs androidApk URL:<br/>baseUrl/app-universal-release.apk
githubRelease-->>DownloadPage: {downloadUrls: {androidApk: "..."}}
DownloadPage->>DownloadPage: setDownloadUrls(...)
User->>DownloadPage: Click "Download APK"
DownloadPage->>Release: Navigate to androidApk URL
Release-->>User: 404 Not Found
Note over Release: APK doesn't exist in v1.99.0<br/>Only in v1.99.0-android-beta1
2 files reviewed, 1 comment
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
frontend/src/routes/downloads.tsx(3 hunks)frontend/src/utils/githubRelease.ts(2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx,js,jsx}: Use 2-space indentation, double quotes, and a 100-character line limit for formatting
Use camelCase for variable and function names
Use try/catch with specific error types for error handling
Files:
frontend/src/utils/githubRelease.tsfrontend/src/routes/downloads.tsx
**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
Use strict TypeScript typing and avoid
anywhen possible
Files:
frontend/src/utils/githubRelease.tsfrontend/src/routes/downloads.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: build-linux
- GitHub Check: build-android
- GitHub Check: build-ios
- GitHub Check: build-macos (universal-apple-darwin)
🔇 Additional comments (4)
frontend/src/utils/githubRelease.ts (1)
20-20: LGTM!The
androidApkfield addition to the interface is correct and consistent with the other download URL fields.frontend/src/routes/downloads.tsx (3)
17-17: LGTM!The
androidApkfield addition to the interface correctly matches the type definition infrontend/src/utils/githubRelease.ts.
28-29: LGTM!The fallback URL for Android APK is consistent with the implementation in
frontend/src/utils/githubRelease.ts. The static filename format matches the primary URL construction.
261-261: LGTM!The download link correctly uses the dynamically fetched
downloadUrls.androidApk, achieving the PR objective of replacing the hardcoded APK download link with dynamic URL fetching.
| linuxRpm: `${baseDownloadUrl}/Maple-${version}-1.x86_64.rpm`, | ||
| androidApk: `${baseDownloadUrl}/app-universal-release.apk` |
There was a problem hiding this comment.
🧩 Analysis chain
Verify that the APK filename matches the GitHub release assets.
The Android APK uses a static filename app-universal-release.apk without version information, unlike other platforms which include version numbers (e.g., Maple_${version}_universal.dmg). Ensure that this exact filename exists in your GitHub releases.
Run the following script to check recent releases for APK files:
🏁 Script executed:
#!/bin/bash
# Description: Verify APK filename in GitHub releases
# Fetch the latest release and check for APK assets
gh api repos/OpenSecretCloud/Maple/releases/latest --jq '.assets[] | select(.name | endswith(".apk")) | .name'
# Also check the last 3 releases to see the pattern
echo "--- Last 3 releases APK filenames ---"
gh api repos/OpenSecretCloud/Maple/releases --jq '.[:3] | .[] | {tag: .tag_name, apks: [.assets[] | select(.name | endswith(".apk")) | .name]}'Length of output: 161
Static APK filename not present in the latest release
The hard-coded app-universal-release.apk isn’t among assets for the latest stable release (v1.99.0). Either upload the APK to your stable releases or update this filename to match the actual asset.
🤖 Prompt for AI Agents
frontend/src/utils/githubRelease.ts around lines 74-75: the code hard-codes
androidApk to "app-universal-release.apk", which is not present in the latest
release; either replace that string with the actual APK filename used in the
latest stable release (update the literal to the exact asset name you find on
GitHub), or better, change the implementation to query the release assets (via
the GitHub Releases API) and pick the asset whose name ends with ".apk" and use
its browser_download_url as androidApk so it always matches the uploaded asset.
There was a problem hiding this comment.
@coderabbitai please check again, it was just released
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Re-check the latest release for the APK file
echo "=== Latest Release Info ==="
gh api repos/OpenSecretCloud/Maple/releases/latest --jq '{tag: .tag_name, name: .name, published: .published_at}'
echo -e "\n=== All Assets in Latest Release ==="
gh api repos/OpenSecretCloud/Maple/releases/latest --jq '.assets[] | {name: .name, size: .size, download_url: .browser_download_url}'
echo -e "\n=== Looking specifically for app-universal-release.apk ==="
gh api repos/OpenSecretCloud/Maple/releases/latest --jq '.assets[] | select(.name == "app-universal-release.apk") | {name: .name, size: .size, download_url: .browser_download_url}'
Length of output: 1996
@AnthonyRonning, you're absolutely right! ✅ I can confirm that app-universal-release.apk is now present in the latest release (v1.99.0). The file is available at:
https://github.com/OpenSecretCloud/Maple/releases/download/v1.99.0/app-universal-release.apk
The implementation looks good and will correctly fetch the APK from the latest release. The static filename approach works since your release process consistently uses the same filename for the APK asset.
Would you like me to resolve my previous comment?
Replace hardcoded APK download link with dynamic URL fetching similar to desktop downloads. This ensures the download page always points to the latest APK release.
Summary by CodeRabbit