#!/bin/bash set -euo pipefail REPO="free-code/free-code" INSTALL_DIR="${HOME}/.free-code/bin" echo "Installing free-code..." OS="$(uname -s | tr '[:upper:]' '[:lower:]')" ARCH="$(uname -m)" case "${OS}" in darwin) OS="osx" ;; linux) OS="linux" ;; *) echo "Unsupported OS: ${OS}"; exit 1 ;; esac case "${ARCH}" in x86_64|amd64) ARCH="x64" ;; arm64|aarch64) ARCH="arm64" ;; *) echo "Unsupported architecture: ${ARCH}"; exit 1 ;; esac RID="${OS}-${ARCH}" BINARY_NAME="free-code" if [ "${OS}" = "win" ]; then BINARY_NAME="free-code.exe" fi mkdir -p "${INSTALL_DIR}" echo "Downloading ${RID} binary..." echo "Building from source..." SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" dotnet publish "${SCRIPT_DIR}/../src/FreeCode/FreeCode.csproj" \ -c Release \ -r "${RID}" \ /p:PublishAot=true \ /p:PublishSingleFile=true \ /p:PublishTrimmed=true \ -o "${INSTALL_DIR}" chmod +x "${INSTALL_DIR}/${BINARY_NAME}" 2>/dev/null || true echo "Adding to PATH..." PROFILE_FILES=("${HOME}/.bashrc" "${HOME}/.zshrc" "${HOME}/.profile") for PROFILE in "${PROFILE_FILES[@]}"; do if [ -f "${PROFILE}" ] && ! grep -q "${INSTALL_DIR}" "${PROFILE}" 2>/dev/null; then printf 'export PATH="%s:$PATH"\n' "${INSTALL_DIR}" >> "${PROFILE}" echo "Added to ${PROFILE}" fi done echo "Installation complete. Run 'source ~/.bashrc' or start a new terminal."