258 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # SZCI Installer Script (v5.0+)
 | |
| # Downloads and installs pre-compiled SZCI binary from Gitea releases
 | |
| #
 | |
| # Usage:
 | |
| #   Direct piped installation (recommended):
 | |
| #     curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/master/install.sh | sudo bash
 | |
| #
 | |
| #   With version specification:
 | |
| #     curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/master/install.sh | sudo bash -s -- --version v5.0.0
 | |
| #
 | |
| # Options:
 | |
| #   -h, --help             Show this help message
 | |
| #   --version VERSION      Install specific version (e.g., v5.0.0)
 | |
| #   --install-dir DIR      Installation directory (default: /opt/szci)
 | |
| 
 | |
| set -e
 | |
| 
 | |
| # Default values
 | |
| SHOW_HELP=0
 | |
| SPECIFIED_VERSION=""
 | |
| INSTALL_DIR="/opt/szci"
 | |
| GITEA_BASE_URL="https://code.foss.global"
 | |
| GITEA_REPO="ship.zone/szci"
 | |
| 
 | |
| # Parse command line arguments
 | |
| while [[ $# -gt 0 ]]; do
 | |
|   case $1 in
 | |
|     -h|--help)
 | |
|       SHOW_HELP=1
 | |
|       shift
 | |
|       ;;
 | |
|     --version)
 | |
|       SPECIFIED_VERSION="$2"
 | |
|       shift 2
 | |
|       ;;
 | |
|     --install-dir)
 | |
|       INSTALL_DIR="$2"
 | |
|       shift 2
 | |
|       ;;
 | |
|     *)
 | |
|       echo "Unknown option: $1"
 | |
|       echo "Use -h or --help for usage information"
 | |
|       exit 1
 | |
|       ;;
 | |
|   esac
 | |
| done
 | |
| 
 | |
| if [ $SHOW_HELP -eq 1 ]; then
 | |
|   echo "SZCI Installer Script (v5.0+)"
 | |
|   echo "Downloads and installs pre-compiled SZCI binary"
 | |
|   echo ""
 | |
|   echo "Usage: $0 [options]"
 | |
|   echo ""
 | |
|   echo "Options:"
 | |
|   echo "  -h, --help             Show this help message"
 | |
|   echo "  --version VERSION      Install specific version (e.g., v5.0.0)"
 | |
|   echo "  --install-dir DIR      Installation directory (default: /opt/szci)"
 | |
|   echo ""
 | |
|   echo "Examples:"
 | |
|   echo "  # Install latest version"
 | |
|   echo "  curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/master/install.sh | sudo bash"
 | |
|   echo ""
 | |
|   echo "  # Install specific version"
 | |
|   echo "  curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/master/install.sh | sudo bash -s -- --version v5.0.0"
 | |
|   exit 0
 | |
| fi
 | |
| 
 | |
| # Check if running as root
 | |
| if [ "$EUID" -ne 0 ]; then
 | |
|   echo "Please run as root (sudo bash install.sh or pipe to sudo bash)"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| # Helper function to detect OS and architecture
 | |
| detect_platform() {
 | |
|   local os=$(uname -s)
 | |
|   local arch=$(uname -m)
 | |
| 
 | |
|   # Map OS
 | |
|   case "$os" in
 | |
|     Linux)
 | |
|       os_name="linux"
 | |
|       ;;
 | |
|     Darwin)
 | |
|       os_name="macos"
 | |
|       ;;
 | |
|     MINGW*|MSYS*|CYGWIN*)
 | |
|       os_name="windows"
 | |
|       ;;
 | |
|     *)
 | |
|       echo "Error: Unsupported operating system: $os"
 | |
|       echo "Supported: Linux, macOS, Windows"
 | |
|       exit 1
 | |
|       ;;
 | |
|   esac
 | |
| 
 | |
|   # Map architecture
 | |
|   case "$arch" in
 | |
|     x86_64|amd64)
 | |
|       arch_name="x64"
 | |
|       ;;
 | |
|     aarch64|arm64)
 | |
|       arch_name="arm64"
 | |
|       ;;
 | |
|     *)
 | |
|       echo "Error: Unsupported architecture: $arch"
 | |
|       echo "Supported: x86_64/amd64 (x64), aarch64/arm64 (arm64)"
 | |
|       exit 1
 | |
|       ;;
 | |
|   esac
 | |
| 
 | |
|   # Construct binary name
 | |
|   if [ "$os_name" = "windows" ]; then
 | |
|     echo "szci-${os_name}-${arch_name}.exe"
 | |
|   else
 | |
|     echo "szci-${os_name}-${arch_name}"
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # Get latest release version from Gitea API
 | |
| get_latest_version() {
 | |
|   echo "Fetching latest release version from Gitea..." >&2
 | |
| 
 | |
|   local api_url="${GITEA_BASE_URL}/api/v1/repos/${GITEA_REPO}/releases/latest"
 | |
|   local response=$(curl -sSL "$api_url" 2>/dev/null)
 | |
| 
 | |
|   if [ $? -ne 0 ] || [ -z "$response" ]; then
 | |
|     echo "Error: Failed to fetch latest release information from Gitea API" >&2
 | |
|     echo "URL: $api_url" >&2
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   # Extract tag_name from JSON response
 | |
|   local version=$(echo "$response" | grep -o '"tag_name":"[^"]*"' | cut -d'"' -f4)
 | |
| 
 | |
|   if [ -z "$version" ]; then
 | |
|     echo "Error: Could not determine latest version from API response" >&2
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "$version"
 | |
| }
 | |
| 
 | |
| # Main installation process
 | |
| echo "================================================"
 | |
| echo "  SZCI Installation Script (v5.0+)"
 | |
| echo "  Serve Zone CI/CD Tool"
 | |
| echo "================================================"
 | |
| echo ""
 | |
| 
 | |
| # Detect platform
 | |
| BINARY_NAME=$(detect_platform)
 | |
| echo "Detected platform: $BINARY_NAME"
 | |
| echo ""
 | |
| 
 | |
| # Determine version to install
 | |
| if [ -n "$SPECIFIED_VERSION" ]; then
 | |
|   VERSION="$SPECIFIED_VERSION"
 | |
|   echo "Installing specified version: $VERSION"
 | |
| else
 | |
|   VERSION=$(get_latest_version)
 | |
|   echo "Installing latest version: $VERSION"
 | |
| fi
 | |
| echo ""
 | |
| 
 | |
| # Construct download URL
 | |
| DOWNLOAD_URL="${GITEA_BASE_URL}/${GITEA_REPO}/releases/download/${VERSION}/${BINARY_NAME}"
 | |
| echo "Download URL: $DOWNLOAD_URL"
 | |
| echo ""
 | |
| 
 | |
| # Clean installation directory - ensure only binary exists
 | |
| if [ -d "$INSTALL_DIR" ]; then
 | |
|   echo "Cleaning installation directory: $INSTALL_DIR"
 | |
|   rm -rf "$INSTALL_DIR"
 | |
| fi
 | |
| 
 | |
| # Create fresh installation directory
 | |
| echo "Creating installation directory: $INSTALL_DIR"
 | |
| mkdir -p "$INSTALL_DIR"
 | |
| 
 | |
| # Download binary
 | |
| echo "Downloading SZCI binary..."
 | |
| TEMP_FILE="$INSTALL_DIR/szci.download"
 | |
| curl -sSL "$DOWNLOAD_URL" -o "$TEMP_FILE"
 | |
| 
 | |
| if [ $? -ne 0 ]; then
 | |
|   echo "Error: Failed to download binary from $DOWNLOAD_URL"
 | |
|   echo ""
 | |
|   echo "Please check:"
 | |
|   echo "  1. Your internet connection"
 | |
|   echo "  2. The specified version exists: ${GITEA_BASE_URL}/${GITEA_REPO}/releases"
 | |
|   echo "  3. The platform binary is available for this release"
 | |
|   rm -f "$TEMP_FILE"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| # Check if download was successful (file exists and not empty)
 | |
| if [ ! -s "$TEMP_FILE" ]; then
 | |
|   echo "Error: Downloaded file is empty or does not exist"
 | |
|   rm -f "$TEMP_FILE"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| # Move to final location
 | |
| BINARY_PATH="$INSTALL_DIR/szci"
 | |
| mv "$TEMP_FILE" "$BINARY_PATH"
 | |
| 
 | |
| if [ $? -ne 0 ] || [ ! -f "$BINARY_PATH" ]; then
 | |
|   echo "Error: Failed to move binary to $BINARY_PATH"
 | |
|   rm -f "$TEMP_FILE" 2>/dev/null
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| # Make executable
 | |
| chmod +x "$BINARY_PATH"
 | |
| 
 | |
| if [ $? -ne 0 ]; then
 | |
|   echo "Error: Failed to make binary executable"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| echo "Binary installed successfully to: $BINARY_PATH"
 | |
| echo ""
 | |
| 
 | |
| # Check if /usr/local/bin is in PATH
 | |
| if [[ ":$PATH:" == *":/usr/local/bin:"* ]]; then
 | |
|   BIN_DIR="/usr/local/bin"
 | |
| else
 | |
|   BIN_DIR="/usr/bin"
 | |
| fi
 | |
| 
 | |
| # Create symlink for global access
 | |
| ln -sf "$BINARY_PATH" "$BIN_DIR/szci"
 | |
| echo "Symlink created: $BIN_DIR/szci -> $BINARY_PATH"
 | |
| 
 | |
| echo ""
 | |
| echo "================================================"
 | |
| echo "  SZCI Installation Complete!"
 | |
| echo "================================================"
 | |
| echo ""
 | |
| echo "Installation details:"
 | |
| echo "  Binary location: $BINARY_PATH"
 | |
| echo "  Symlink location: $BIN_DIR/szci"
 | |
| echo "  Version: $VERSION"
 | |
| echo ""
 | |
| echo "Get started:"
 | |
| echo "  szci --version"
 | |
| echo "  szci --help"
 | |
| echo "  szci node install stable  # Install Node.js"
 | |
| echo "  szci docker build         # Build Docker images"
 | |
| echo "  szci npm test             # Run tests"
 | |
| echo ""
 | |
| echo "For CI/CD integration examples, visit:"
 | |
| echo "  https://code.foss.global/ship.zone/szci"
 | |
| echo ""
 |