Skip to content

Publish Linux release artifacts so the documented install path works #56

Description

@Mineru98

Problem

The documented quick-start install path fails on Linux with an HTTP 404. A fresh Ubuntu server that follows the README verbatim cannot install Ourocode:

curl -fsSL https://raw.githubusercontent.com/Q00/ourocode/release/bootstrap/install.sh | bash
==> ourocode install
==> downloading release ourocode-v0.1.13-linux-x86_64
...
curl: (22) The requested URL returned error: 404

The installer resolves the platform correctly (linux-x86_64) and requests the matching release tarball, but no Linux asset has ever been published, so curl -fL returns 404 and set -euo pipefail aborts the install.

Root cause

bootstrap/install.sh (identical to repo install.sh) builds the download URL from platform_name():

https://github.com/Q00/ourocode/releases/download/v0.1.13/ourocode-v0.1.13-linux-x86_64.tar.gz

But release v0.1.13 only ships macOS assets:

  • ourocode-v0.1.13-darwin-arm64.tar.gz
  • ourocode-v0.1.13-darwin-arm64.tar.gz.sha256

Verified directly:

# linux
$ curl -IL .../v0.1.13/ourocode-v0.1.13-linux-x86_64.tar.gz  -> 404
# darwin
$ curl -IL .../v0.1.13/ourocode-v0.1.13-darwin-arm64.tar.gz  -> 200

Q00/ourocode transparently redirects to Ouro-labs/ourocode, so the default REPO is not the problem — the Linux asset simply does not exist.

Contributing factors:

  • There is no CI release workflow in the repository (no .github/ at all), so release artifacts are produced manually.
  • scripts/package.sh only builds for the host OS/arch (uname -s / uname -m). When a maintainer packages on macOS, only darwin-arm64 is ever produced; Linux (and Intel macOS) tarballs are never generated.
  • The pipe-to-bash path has no source tree, so the installer skips the build fallback and goes straight to download_release(), making the missing asset a hard failure rather than a graceful degrade.
  • Version drift: install.sh defaults to VERSION=0.1.13 while mix.exs is already at 0.1.14. Even if a new release is cut, Linux assets are still absent, so both versions 404 on Linux.

Current evidence

Installer / packaging:

  • install.sh -> platform_name() maps Linux x86_64 to linux-x86_64.
  • install.sh -> download_release() requests ourocode-v${VERSION}-${platform}.tar.gz with curl -fL (fails hard on 404 under set -euo pipefail).
  • install.sh -> VERSION="${OUROCODE_VERSION:-0.1.13}", REPO="${OUROCODE_REPO:-Q00/ourocode}".
  • scripts/package.sh -> NAME="ourocode-v${VERSION}-${OS}-${ARCH}" built from uname; single host platform only.
  • No .github/workflows/* release automation exists.
  • mix.exs -> version: "0.1.14" (installer default is 0.1.13).

Release state:

  • v0.1.13 assets: darwin-arm64 tarball + .sha256 only.
  • README "Quick Start" and "Install Locally" advertise the curl ... install.sh | bash path for all platforms.
  • README "Package A Release" only lists dist/ourocode-v0.1.13-darwin-arm64.tar.gz(.sha256).

Reproduction

  1. On a fresh Ubuntu x86_64 host, run the documented quick start:
    curl -fsSL https://raw.githubusercontent.com/Q00/ourocode/release/bootstrap/install.sh | bash
  2. Observe ==> downloading release ourocode-v0.1.13-linux-x86_64 followed by curl: (22) The requested URL returned error: 404.

Desired UX

Following the documented quick start on Linux x86_64 (and, ideally, arm64) should install and start Ourocode, matching the macOS experience:

curl -fsSL https://raw.githubusercontent.com/Q00/ourocode/release/bootstrap/install.sh | bash
ourocode --detect

The installer already handles the Erlang/OTP prerequisite via ensure_erlang_runtime() (apt/dnf best effort), so the only missing piece is a downloadable Linux release asset.

Proposed scope

  1. Produce and publish Linux release tarballs alongside the macOS ones, at least ourocode-v<version>-linux-x86_64.tar.gz (+ .sha256); arm64 (linux-arm64) is a natural follow-up.
  2. Add a CI release workflow (.github/workflows/) that builds the escript + ourocode_tty on a Linux runner and uploads the tarball + checksum to the GitHub Release, so future versions ship Linux assets automatically instead of depending on a maintainer's host OS.
  3. Align versions: make the installer default VERSION track mix.exs (or derive it), and cut a release whose tag matches the installer default so the documented path never points at a version without assets.
  4. Make a missing-asset download degrade with an actionable message (e.g. "no prebuilt release for ; build from source or set OUROCODE_RELEASE_URL") instead of a bare curl: (22) 404.
  5. Update README (Quick Start / Requirements / Package A Release) to reflect the platforms that actually ship binaries.

Acceptance criteria

  • A Linux release asset ourocode-v<version>-linux-x86_64.tar.gz (+ .sha256) exists on the GitHub Release matching the installer's default version.
  • curl -fsSL .../bootstrap/install.sh | bash completes on a clean Ubuntu x86_64 host and ourocode --detect runs.
  • The installer's default VERSION and the latest published release with Linux assets are consistent (no version drift 404).
  • A CI workflow builds and uploads Linux artifacts on release so this does not regress.
  • A missing prebuilt asset produces a clear, actionable error rather than a raw curl 404.

Non-goals for the first PR

  • Bundling the Erlang/OTP runtime into the tarball (the escript still requires escript/erl on PATH; that is tracked by the existing runtime story).
  • A single self-contained binary or app bundle.
  • Homebrew / apt / dnf package distribution.
  • Windows support (tracked in Support Windows PowerShell install and launch path #39).

Related files

  • install.sh
  • bootstrap/install.sh (release branch)
  • scripts/package.sh
  • mix.exs
  • README.md
  • docs/site/index.html

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions