e071084ebe
govulncheck / govulncheck (push) Waiting to run
Harness (E2E) / Harnesses (mock LLM) (push) Waiting to run
Harness (E2E) / Provider harnesses (live LLM conformance) (push) Waiting to run
Lint / golangci-lint (push) Waiting to run
Run Tests / Unit Tests (push) Waiting to run
Run Tests / Etcd Integration Tests (push) Waiting to run
110 lines
3.0 KiB
Bash
Executable File
110 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Install script for micro CLI
|
|
# Usage: curl -fsSL https://go-micro.dev/install.sh | sh
|
|
|
|
set -e
|
|
|
|
VERSION="${MICRO_VERSION:-latest}"
|
|
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
ARCH=$(uname -m)
|
|
|
|
# Normalize architecture
|
|
case $ARCH in
|
|
x86_64|amd64) ARCH="amd64" ;;
|
|
aarch64|arm64) ARCH="arm64" ;;
|
|
armv7l) ARCH="armv7" ;;
|
|
*) echo "Unsupported architecture: $ARCH"; exit 1 ;;
|
|
esac
|
|
|
|
# Normalize OS
|
|
case $OS in
|
|
darwin) OS="darwin" ;;
|
|
linux) OS="linux" ;;
|
|
*) echo "Unsupported OS: $OS"; exit 1 ;;
|
|
esac
|
|
|
|
# Determine install directory. MICRO_INSTALL_DIR is intended for CI/local smoke
|
|
# tests that verify the installer without writing to a real system directory.
|
|
if [ -n "${MICRO_INSTALL_DIR:-}" ]; then
|
|
INSTALL_DIR="$MICRO_INSTALL_DIR"
|
|
mkdir -p "$INSTALL_DIR"
|
|
elif [ "$EUID" -eq 0 ] || [ "$(id -u)" -eq 0 ]; then
|
|
INSTALL_DIR="/usr/local/bin"
|
|
else
|
|
INSTALL_DIR="$HOME/.local/bin"
|
|
mkdir -p "$INSTALL_DIR"
|
|
fi
|
|
|
|
echo "Installing micro ${VERSION} for ${OS}/${ARCH}..."
|
|
|
|
# Download URL
|
|
if [ "$VERSION" = "latest" ]; then
|
|
URL="https://github.com/micro/go-micro/releases/latest/download/micro_${OS}_${ARCH}.tar.gz"
|
|
else
|
|
URL="https://github.com/micro/go-micro/releases/download/${VERSION}/micro_${OS}_${ARCH}.tar.gz"
|
|
fi
|
|
|
|
# Create temp directory for extraction
|
|
TMP_DIR=$(mktemp -d)
|
|
TMP_FILE="${TMP_DIR}/micro.tar.gz"
|
|
|
|
# Download, or use a local release archive supplied by the deterministic smoke
|
|
# harness. The default path still fetches the documented GitHub release artifact.
|
|
if [ -n "${MICRO_INSTALL_ARCHIVE:-}" ]; then
|
|
cp "$MICRO_INSTALL_ARCHIVE" "$TMP_FILE"
|
|
elif command -v curl &> /dev/null; then
|
|
curl -fsSL "$URL" -o "$TMP_FILE"
|
|
elif command -v wget &> /dev/null; then
|
|
wget -q "$URL" -O "$TMP_FILE"
|
|
else
|
|
echo "Error: curl or wget required"
|
|
rm -rf "$TMP_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
# Extract and install
|
|
tar -xzf "$TMP_FILE" -C "$TMP_DIR"
|
|
|
|
# Handle different archive structures (binary at root or in subdirectory)
|
|
if [ -f "${TMP_DIR}/micro" ]; then
|
|
BINARY_PATH="${TMP_DIR}/micro"
|
|
elif [ -f "${TMP_DIR}/micro_${OS}_${ARCH}/micro" ]; then
|
|
BINARY_PATH="${TMP_DIR}/micro_${OS}_${ARCH}/micro"
|
|
else
|
|
# Try to find any executable named 'micro' in the extracted content
|
|
BINARY_PATH=$(find "$TMP_DIR" -name "micro" -type f -executable | head -n1)
|
|
fi
|
|
|
|
if [ -z "$BINARY_PATH" ] || [ ! -f "$BINARY_PATH" ]; then
|
|
echo "Error: Could not find micro binary in archive"
|
|
echo "Archive contents:"
|
|
tar -tzf "$TMP_FILE"
|
|
rm -rf "$TMP_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
chmod +x "$BINARY_PATH"
|
|
mv "$BINARY_PATH" "$INSTALL_DIR/micro"
|
|
|
|
# Cleanup
|
|
rm -rf "$TMP_DIR"
|
|
|
|
echo ""
|
|
echo "✓ Installed micro to $INSTALL_DIR/micro"
|
|
echo ""
|
|
|
|
# Verify
|
|
if command -v micro &> /dev/null; then
|
|
micro --version
|
|
else
|
|
echo "Note: Add $INSTALL_DIR to your PATH:"
|
|
echo " export PATH=\"\$PATH:$INSTALL_DIR\""
|
|
fi
|
|
|
|
echo ""
|
|
echo "Get started:"
|
|
echo " micro new myservice # Create a new service"
|
|
echo " micro run # Run locally"
|
|
echo " micro deploy # Deploy to server"
|
|
echo ""
|