diff --git a/scripts/download-roc.sh b/scripts/download-roc.sh new file mode 100755 index 0000000..23fdd98 --- /dev/null +++ b/scripts/download-roc.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROC_VERSION="${1:?Usage: $0 [target-arch]}" +TARGETARCH="${2:-amd64}" + +# Map Docker buildx arch names to Roc tarball arch names +case "$TARGETARCH" in + amd64) ROC_ARCH="x86_64" ;; + arm64) ROC_ARCH="aarch64" ;; + *) echo "Unsupported architecture: $TARGETARCH" >&2; exit 1 ;; +esac + +TARBALL="roc-linux_${ROC_ARCH}-${ROC_VERSION}.tar.gz" +URL="https://github.com/roc-lang/roc/releases/download/${ROC_VERSION}/${TARBALL}" + +echo "Downloading Roc ${ROC_VERSION} for ${ROC_ARCH}..." +curl -fsSL "$URL" -o /tmp/roc.tar.gz + +echo "Extracting..." +tar -xzf /tmp/roc.tar.gz -C /tmp/ + +# The tarball contains a single directory with an unpredictable nightly name +# e.g. roc_nightly-linux_x86_64-2025-09-09-d73ea109/ +EXTRACTED_DIR=$(find /tmp -maxdepth 1 -type d -name "roc_*" | head -1) +if [ -z "$EXTRACTED_DIR" ]; then + echo "ERROR: Could not find extracted Roc directory in /tmp" >&2 + exit 1 +fi + +echo "Installing to /opt/roc..." +mkdir -p /opt/roc/bin /opt/roc/lib + +install -m 0755 "$EXTRACTED_DIR/roc" /opt/roc/bin/roc + +# LSP may or may not be present in older releases; install if found +if [ -f "$EXTRACTED_DIR/roc_language_server" ]; then + install -m 0755 "$EXTRACTED_DIR/roc_language_server" /opt/roc/bin/roc_language_server +fi + +# WASI libc is needed for some platforms +if [ -d "$EXTRACTED_DIR/lib" ]; then + cp -r "$EXTRACTED_DIR/lib/"* /opt/roc/lib/ +fi + +# License +if [ -f "$EXTRACTED_DIR/LICENSE" ]; then + cp "$EXTRACTED_DIR/LICENSE" /opt/roc/LICENSE +fi + +# Cleanup +rm -rf /tmp/roc.tar.gz "$EXTRACTED_DIR" + +echo "Roc ${ROC_VERSION} installed successfully." +/opt/roc/bin/roc --version