Skip to content

install-graff.sh hangs forever (infinite self-recursion) + installs nothing (wrong tarball layout) #4

Description

@pranavp311

Summary

curl -fsSL https://codegraff.com/install-graff.sh | sh hangs forever for a fresh install. After working around the hang, the script reports success but no binary is actually installed. Two separate bugs.

Environment: macOS (darwin-arm64), zsh.

Bug 1 — infinite self-recursion (the hang)

https://codegraff.com/install-graff.sh serves the installer itself. In the "graff companion suite" step the script runs:

# line ~175
if curl -fsSL https://codegraff.com/install-graff.sh | sh >/dev/null 2>&1; then

That URL is this same script. The guard above it (command -v muonry && command -v zigpatch) fails on a fresh machine because those tools aren't installed yet, so every invocation re-enters the same branch and re-runs itself — forever, silently (>/dev/null 2>&1). Result: the installer never returns.

Workaround: HARNESS_NO_GRAFF=1 sh install-graff.sh skips the block and the install completes.

Fix: the companion-suite step should fetch the companion installer (muonry/zigrep/zigpatch suite), not re-curl install-graff.sh. As written it can never make muonry/zigpatch present, so it can only recurse.

Bug 2 — wrong tarball layout, nothing gets installed

Even with the hang bypassed, the prebuilt-release path fails:

install: /var/folders/.../tmp.XXXX/graff-aarch64-macos/graff: No such file or directory
  │ download   ✓ (prebuilt release)
  │ install    ✓
  installed → /Users/<me>/bin/graff

fetch_release extracts the tarball and calls (line ~108):

place_bin "$tmpd/$stem-$target/$stem"   # expects graff-aarch64-macos/graff

But the actual release asset graff-aarch64-macos.tar.gz extracts flat:

$ tar -tzf graff-aarch64-macos.tar.gz
graff
README.md
LICENSE

There is no graff-aarch64-macos/ subdirectory, so install gets a nonexistent path and fails. The failure is swallowed (the codesign/|| true flow continues) and the script still prints installed ✓ — a false success.

Fix options: either (a) package the tarball with the expected graff-<target>/graff subdirectory, or (b) change place_bin to use the flat path ($tmpd/$stem), or locate the binary after extraction rather than assuming the layout. Whichever is chosen, fetch_release should also verify the binary exists before reporting download ✓, so a failed extract doesn't print a false success.

Repro

curl -fsSL https://codegraff.com/install-graff.sh | sh    # hangs forever
# vs
HARNESS_NO_GRAFF=1 sh install-graff.sh                    # no hang, but no binary installed

Manual install that does work

curl -fsSL https://github.com/justrach/codegraff/releases/latest/download/graff-aarch64-macos.tar.gz -o graff.tar.gz
tar -xzf graff.tar.gz
install -m 0755 graff "$HOME/bin/graff"
codesign -s - --force "$HOME/bin/graff"   # macOS
$HOME/bin/graff --version                 # -> simple-harness 0.0.1

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions