feat: add curl | bash installer for Linux/macOS without Homebrew #33

Merged
starkSV merged 1 commit from feat/install-script into main 2026-07-13 22:29:56 +05:30
starkSV commented 2026-07-13 22:29:27 +05:30 (Migrated from github.com)

Summary

  • Adds a GET /install.sh endpoint on the backend (embedded via Go's embed package, stays a real shellcheck-able .sh file)
  • Auto-detects OS/arch (including Termux via $PREFIX) and always resolves the latest GitHub release -- needs no per-release maintenance unlike winget/brew/AUR
  • Documented alongside winget/Homebrew in README, release notes template, web CLI page, and the per-product CliHandoff card

Test plan

  • Verified end-to-end in an ephemeral Ubuntu container: downloads, installs, and msdl --help runs
  • Verified the Termux $PREFIX code path in a second container run
  • Verified the endpoint locally against a running backend instance (correct Content-Type, correct script content)
  • Frontend typechecks and builds clean

Summary by CodeRabbit

  • New Features

    • Added a curl-based installation option for macOS and Linux without Homebrew.
    • The installer automatically detects supported operating systems and CPU architectures, including Termux on Android.
    • Added a copy button for the curl installation command.
    • Published the installer through a dedicated download endpoint.
  • Documentation

    • Updated installation instructions and release notes with the new option.
## Summary - Adds a GET /install.sh endpoint on the backend (embedded via Go's embed package, stays a real shellcheck-able .sh file) - Auto-detects OS/arch (including Termux via $PREFIX) and always resolves the latest GitHub release -- needs no per-release maintenance unlike winget/brew/AUR - Documented alongside winget/Homebrew in README, release notes template, web CLI page, and the per-product CliHandoff card ## Test plan - Verified end-to-end in an ephemeral Ubuntu container: downloads, installs, and msdl --help runs - Verified the Termux $PREFIX code path in a second container run - Verified the endpoint locally against a running backend instance (correct Content-Type, correct script content) - Frontend typechecks and builds clean <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added a curl-based installation option for macOS and Linux without Homebrew. - The installer automatically detects supported operating systems and CPU architectures, including Termux on Android. - Added a copy button for the curl installation command. - Published the installer through a dedicated download endpoint. - **Documentation** - Updated installation instructions and release notes with the new option. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
cloudflare-workers-and-pages[bot] commented 2026-07-13 22:29:36 +05:30 (Migrated from github.com)

Deploying msdl-frontend with  Cloudflare Pages  Cloudflare Pages

Latest commit: 5eec035
Status:   Deploy successful!
Preview URL: https://be1c1459.msdl-frontend.pages.dev
Branch Preview URL: https://feat-install-script.msdl-frontend.pages.dev

View logs

## Deploying msdl-frontend with &nbsp;<a href="https://pages.dev"><img alt="Cloudflare Pages" src="https://user-images.githubusercontent.com/23264/106598434-9e719e00-654f-11eb-9e59-6167043cfa01.png" width="16"></a> &nbsp;Cloudflare Pages <table><tr><td><strong>Latest commit:</strong> </td><td> <code>5eec035</code> </td></tr> <tr><td><strong>Status:</strong></td><td>&nbsp;✅&nbsp; Deploy successful!</td></tr> <tr><td><strong>Preview URL:</strong></td><td> <a href='https://be1c1459.msdl-frontend.pages.dev'>https://be1c1459.msdl-frontend.pages.dev</a> </td></tr> <tr><td><strong>Branch Preview URL:</strong></td><td> <a href='https://feat-install-script.msdl-frontend.pages.dev'>https://feat-install-script.msdl-frontend.pages.dev</a> </td></tr> </table> [View logs](https://dash.cloudflare.com/?to=/630cc520524402c8c1de35025c15b122/pages/view/msdl-frontend/be1c1459-da26-4258-881d-9ae820c9f1cc)
coderabbitai[bot] commented 2026-07-13 22:29:52 +05:30 (Migrated from github.com)

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f818be59-e478-4b79-89ec-ce7b9bf67a23

📥 Commits

Reviewing files that changed from the base of the PR and between 151f70d67f and 5eec0351e7.

📒 Files selected for processing (7)
  • .gitattributes
  • .github/workflows/cli-release.yml
  • README.md
  • backend/install.sh
  • backend/main.go
  • frontend/src/components/CliHandoff.tsx
  • frontend/src/pages/CliPage.tsx

📝 Walkthrough

Walkthrough

Adds a Bash installer for the CLI, embeds and serves it from /install.sh, and documents the no-Homebrew curl installation path in release notes, the README, and the frontend.

Changes

CLI installer delivery

Layer / File(s) Summary
Installer script and executable format
backend/install.sh, .gitattributes
Adds platform and architecture detection, release-asset download, executable installation, and LF line-ending enforcement.
Embedded installer endpoint
backend/main.go
Embeds install.sh, serves it for GET requests at /install.sh, and rejects other methods with HTTP 405.
Release, documentation, and UI guidance
.github/workflows/cli-release.yml, README.md, frontend/src/pages/CliPage.tsx, frontend/src/components/CliHandoff.tsx
Adds the no-Homebrew curl command to release and documentation surfaces, plus a frontend copy button with temporary success state.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant InstallEndpoint
  participant install.sh
  participant GitHubRelease
  User->>InstallEndpoint: curl /install.sh
  InstallEndpoint-->>User: Embedded installer script
  User->>install.sh: Execute script
  install.sh->>GitHubRelease: Download matching CLI asset
  install.sh-->>User: Install msdl and print help reminder
Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/install-script

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.12.2)

level=error msg="[linters_context] typechecking error: pattern ./...: directory prefix . does not contain main module or its selected dependencies"


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

<!-- This is an auto-generated comment: summarize by coderabbit.ai --> <!-- review_stack_entry_start --> [![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/starkSV/windows-iso-downloader/pull/33?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- This is an auto-generated comment: failure by coderabbit.ai --> > [!CAUTION] > ## Review failed > > The pull request is closed. <!-- end of auto-generated comment: failure by coderabbit.ai --> <details> <summary>ℹ️ Recent review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: defaults **Review profile**: CHILL **Plan**: Pro Plus **Run ID**: `f818be59-e478-4b79-89ec-ce7b9bf67a23` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 151f70d67f866c3d6e04b185852bd2d126ccd8e3 and 5eec0351e7f2214fb16623ed61641c9a44692a0b. </details> <details> <summary>📒 Files selected for processing (7)</summary> * `.gitattributes` * `.github/workflows/cli-release.yml` * `README.md` * `backend/install.sh` * `backend/main.go` * `frontend/src/components/CliHandoff.tsx` * `frontend/src/pages/CliPage.tsx` </details> </details> --- <!-- walkthrough_start --> <details> <summary>📝 Walkthrough</summary> ## Walkthrough Adds a Bash installer for the CLI, embeds and serves it from `/install.sh`, and documents the no-Homebrew curl installation path in release notes, the README, and the frontend. ### Changes **CLI installer delivery** |Layer / File(s)|Summary| |---|---| |**Installer script and executable format** <br> `backend/install.sh`, `.gitattributes`|Adds platform and architecture detection, release-asset download, executable installation, and LF line-ending enforcement.| |**Embedded installer endpoint** <br> `backend/main.go`|Embeds `install.sh`, serves it for GET requests at `/install.sh`, and rejects other methods with HTTP 405.| |**Release, documentation, and UI guidance** <br> `.github/workflows/cli-release.yml`, `README.md`, `frontend/src/pages/CliPage.tsx`, `frontend/src/components/CliHandoff.tsx`|Adds the no-Homebrew curl command to release and documentation surfaces, plus a frontend copy button with temporary success state.| **Estimated code review effort:** 3 (Moderate) | ~20 minutes ### Sequence Diagram(s) ```mermaid sequenceDiagram participant User participant InstallEndpoint participant install.sh participant GitHubRelease User->>InstallEndpoint: curl /install.sh InstallEndpoint-->>User: Embedded installer script User->>install.sh: Execute script install.sh->>GitHubRelease: Download matching CLI asset install.sh-->>User: Install msdl and print help reminder ``` </details> <!-- walkthrough_end --> <!-- finishing_touch_checkbox_start --> <details> <summary>✨ Finishing Touches</summary> <details> <summary>📝 Generate docstrings</summary> - [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> Create stacked PR - [ ] <!-- {"checkboxId": "3e1879ae-f29b-4d0d-8e06-d12b7ba33d98"} --> Commit on current branch </details> <details> <summary>🧪 Generate unit tests (beta)</summary> - [ ] <!-- {"checkboxId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} --> Create PR with unit tests - [ ] <!-- {"checkboxId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} --> Commit unit tests in branch `feat/install-script` </details> </details> <!-- finishing_touch_checkbox_end --> <!-- This is an auto-generated comment: all tool run failures by coderabbit.ai --> > [!WARNING] > There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. > > <details> > <summary>🔧 golangci-lint (2.12.2)</summary> > > level=error msg="[linters_context] typechecking error: pattern ./...: directory prefix . does not contain main module or its selected dependencies" > > > > > </details> <!-- end of auto-generated comment: all tool run failures by coderabbit.ai --> <!-- tips_start --> --- Thanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=starkSV/windows-iso-downloader&utm_content=33)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. <details> <summary>❤️ Share</summary> - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code) </details> <sub>Comment `@coderabbitai help` to get the list of available commands.</sub> <!-- tips_end -->
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: shekhar/windows-iso-downloader#33
No description provided.