diff --git a/.github/workflows/cross-platform-install-test.yml b/.github/workflows/cross-platform-install-test.yml new file mode 100644 index 000000000..2c630eaf9 --- /dev/null +++ b/.github/workflows/cross-platform-install-test.yml @@ -0,0 +1,44 @@ +name: Test Install Script + +on: + push: + branches: + - master + + pull_request: + branches: + - master + +jobs: + test-install: + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + arch: [x86_64, aarch64] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout Code + uses: actions/checkout@v3 + + # Determine Branch Name + - name: Set Branch Name + id: branch-name + run: | + if [[ "${{ github.event_name }}" == "pull_request" ]]; then + echo "BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + else + echo "BRANCH_NAME=${{ github.ref_name }}" >> $GITHUB_ENV + fi + + # Run the installation script + - name: Test installation script + run: | + curl -s https://raw.githubusercontent.com/calimero-network/core/${{ env.BRANCH_NAME }}/scripts/install.sh | bash + + # Validate the binary installation + - name: Validate installation + run: | + which meroctl + meroctl --version diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 000000000..dfdce2834 --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +BINARY_NAME="meroctl" +VERSION="v0.1.1" +REPO="calimero-network/core" +INSTALL_DIR="$HOME/.local/bin" + +# Detect OS and Architecture +OS=$(uname | tr '[:upper:]' '[:lower:]') +ARCH=$(uname -m) + +case "$ARCH" in + "x86_64") ARCH="x86_64" ;; + "arm64" | "aarch64") ARCH="aarch64" ;; + *) + echo "Unsupported architecture: $ARCH." + exit 1 + ;; +esac + +if [ "$OS" == "darwin" ]; then + PLATFORM="apple-darwin" +elif [ "$OS" == "linux" ]; then + PLATFORM="unknown-linux-gnu" +else + echo "Unsupported operating system: $OS." + exit 1 +fi + +# Construct download URL +TARBALL_NAME="${BINARY_NAME}_${ARCH}-${PLATFORM}.tar.gz" +DOWNLOAD_URL="https://github.com/$REPO/releases/download/$VERSION/$TARBALL_NAME" + +# Ensure installation directory exists +mkdir -p "$INSTALL_DIR" + +# Download binary tarball +echo "Downloading $TARBALL_NAME from $DOWNLOAD_URL..." +curl -L -o "$TARBALL_NAME" "$DOWNLOAD_URL" + +# Extract binary +echo "Extracting $TARBALL_NAME..." +tar -xzf "$TARBALL_NAME" +chmod +x "$BINARY_NAME" + +# Move binary to user-local bin directory +mv "$BINARY_NAME" "$INSTALL_DIR/$BINARY_NAME" +rm "$TARBALL_NAME" + +# Add $HOME/.local/bin to PATH if not already present +if ! echo "$PATH" | grep -q "$HOME/.local/bin"; then + echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$HOME/.bashrc" + echo "Added $HOME/.local/bin to PATH. Reload your shell or run: source ~/.bashrc" +fi + +echo "$BINARY_NAME installed successfully in $INSTALL_DIR. Run '$BINARY_NAME --version' to verify."