Repository navigation
feat: one-command Linux installer (install.sh) - #199
Merged
Merged
Conversation
curl -fsSL https://raw.githubusercontent.com/doitintl/dci-cli/main/install.sh | sh Downloads the release archive for this machine, verifies it against the release's checksums.txt, and installs dci to ~/.local/bin with bash/zsh/fish completions, with no root needed. That location survives Cloud Shell restarts (only $HOME persists) and dci update replaces it in place. --version pins a release, --dir picks the directory, and --system installs the .deb/.rpm with sudo. Musl systems get a clear glibc error up front. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Shellcheck plus installs on ubuntu/debian/fedora containers on amd64 and arm64 runners (user install as non-root, pinned version, --system), and an Alpine run that must fail with the glibc message. Runs on changes to the script and weekly, so a release-asset rename that breaks it is caught. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
spark2ignite
requested review from
a team,
apgiorgi,
chaim0m and
taltultc
as code owners
October 16, 2026 11:02
- Detect glibc by its presence (getconf, then the arch's glibc loader) instead of refusing any host with a musl loader: Debian's musl-tools puts one on glibc systems. - Run the staged binary before it replaces ~/.local/bin/dci; a binary that can't start (glibc older than 2.34) is removed with a clear error and the existing dci is kept. --system checks the installed binary too. - rpm -U --oldpackage so a pinned --system --version can roll back. - release.yml dispatches the Install Script workflow after each release. - CI covers Alpine, Debian with musl-tools, and Ubuntu 20.04 (old glibc keeps the existing dci). README/DISTRIBUTION state the glibc 2.34 floor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A one-command Linux install:
curl -fsSL https://raw.githubusercontent.com/doitintl/dci-cli/main/install.sh | shIt downloads the release archive for this machine, checks it against the release's
checksums.txt, and installsdcito~/.local/binwith bash, zsh and fish completions. No root is needed.Why
~/.local/bin: Cloud Shell keeps only$HOME, so a.debinstalled withdpkg -idisappears when the VM restarts. The same install also works in WSL, containers and on machines without sudo.dci updatealready treats a binary there as a standalone install and replaces it in place.Options (passed after
sh -s --):--version <v>/DCI_VERSIONinstalls a specific release.--dir <path>/DCI_INSTALL_DIRpicks the install directory.--systeminstalls the.deb/.rpmpackage with sudo instead.Design notes
--version, the version and checksum both come fromreleases/latest/download/checksums.txt. That avoids the unauthenticated rate limit that shared Cloud Shell and CI IPs run into.main "$@"is the last line, so a script cut off mid-download can't run.dciearlier on PATH would take precedence.shellcheck -s sh.CI
New
install-script.ymlworkflow:shellcheck.ubuntu:24.04,debian:12andfedora:41containers, on both amd64 and arm64 runners. Each run covers a non-root user install with completions, a pinned 2.7.5 install, and--system.Verified locally (Docker)
~/.local/bin, bash and fish completions in place--version v2.7.5,SHELL=zshfpathhint--systemdci-2.8.0-1.aarch64rpm,/usr/bin/dci--systemcat install.sh | sh -s -- --dir /opt/dci/bindci update --yesdci updated: 2.7.5 → 2.8.0sha256sum(checksum mismatch)--version 0.0.1The README now lists the Linux one-liner first and notes that the Homebrew formula also works on Linux. DISTRIBUTION.md gains a Linux Installer section describing what the script depends on (release asset names and archive layout).
🤖 Generated with Claude Code