11#! /bin/bash
2+ set -euo pipefail # Exit on error, undefined vars, pipe failures
3+
4+ # Get repository information with validation
25REPO_USER=$( git config --get remote.origin.url | cut -d' /' -f4)
3- REPO_NAME=$( basename ` git rev-parse --show-toplevel` )
6+ REPO_NAME=$( basename " $( git rev-parse --show-toplevel) " )
47TAG_NAME=$( git describe --tags --abbrev=0)
58BINARY_NAME=" r2"
69
7- cat > install.sh << EOF
10+ # Validate required variables
11+ if [ -z " $REPO_USER " ] || [ -z " $REPO_NAME " ] || [ -z " $TAG_NAME " ]; then
12+ echo " Error: Failed to determine repository information" >&2
13+ echo " REPO_USER: ${REPO_USER:- empty} " >&2
14+ echo " REPO_NAME: ${REPO_NAME:- empty} " >&2
15+ echo " TAG_NAME: ${TAG_NAME:- empty} " >&2
16+ exit 1
17+ fi
18+
19+ cat > install.sh << 'EOF '
820#!/bin/sh
9- OS=\` uname -s\`
10- ARCH=\` uname -m\`
11-
12- curl -fsSLo \$ HOME/${BINARY_NAME} -\$ {OS}-\$ {ARCH}.tar.gz \\
13- https://github.com/${REPO_USER} /${REPO_NAME} /releases/download/${TAG_NAME} /${BINARY_NAME} -\$ {OS}-\$ {ARCH}.tar.gz
14-
15- mkdir -p \$ HOME/${BINARY_NAME} -${TAG_NAME}
16- tar -xzf \$ HOME/${BINARY_NAME} -\$ {OS}-\$ {ARCH}.tar.gz -C \$ HOME/${BINARY_NAME} -${TAG_NAME}
17- chmod +x \$ HOME/${BINARY_NAME} -${TAG_NAME} /${BINARY_NAME}
18-
19- if [ "\$ EUID" -eq 0 ]; then
20- mv \$ HOME/${BINARY_NAME} -${TAG_NAME} /${BINARY_NAME} /usr/bin/${BINARY_NAME}
21- rm -r \$ HOME/${BINARY_NAME} -${TAG_NAME}
21+ set -e # Exit on error
22+
23+ OS=$(uname -s | tr '[:upper:]' '[:lower:]')
24+ ARCH=$(uname -m)
25+
26+ # Normalize architecture names to match GoReleaser output
27+ case "$ARCH" in
28+ x86_64|amd64) ARCH="x86_64" ;;
29+ i386|i686) ARCH="i386" ;;
30+ armv7l) ARCH="armv7" ;;
31+ aarch64) ARCH="arm64" ;;
32+ esac
33+
34+ # Normalize OS names to match GoReleaser output (title case)
35+ case "$OS" in
36+ linux) OS="Linux" ;;
37+ darwin) OS="Darwin" ;;
38+ *) echo "Unsupported OS: $OS" >&2; exit 1 ;;
39+ esac
40+
41+ EOF
42+
43+ # Insert dynamic values (use double quotes for variable expansion)
44+ cat >> install.sh << EOF
45+ BINARY_NAME="${BINARY_NAME} "
46+ TAG_NAME="${TAG_NAME} "
47+ REPO_USER="${REPO_USER} "
48+ REPO_NAME="${REPO_NAME} "
49+
50+ EOF
51+
52+ # Continue with static content (use single quotes to prevent expansion)
53+ cat >> install.sh << 'EOF '
54+ ARCHIVE="${BINARY_NAME}-${OS}-${ARCH}.tar.gz"
55+ DOWNLOAD_URL="https://github.com/${REPO_USER}/${REPO_NAME}/releases/download/${TAG_NAME}/${ARCHIVE}"
56+ INSTALL_DIR="$HOME/${BINARY_NAME}-${TAG_NAME}"
57+
58+ # Cleanup function
59+ cleanup() {
60+ rm -f "$HOME/$ARCHIVE"
61+ }
62+ trap cleanup EXIT
63+
64+ echo "Downloading ${BINARY_NAME} ${TAG_NAME} for ${OS}-${ARCH}..."
65+ curl -fsSL -o "$HOME/$ARCHIVE" "$DOWNLOAD_URL" || {
66+ echo "Error: Failed to download from $DOWNLOAD_URL" >&2
67+ exit 1
68+ }
69+
70+ echo "Extracting to ${INSTALL_DIR}..."
71+ mkdir -p "$INSTALL_DIR"
72+ tar -xzf "$HOME/$ARCHIVE" -C "$INSTALL_DIR" || {
73+ echo "Error: Failed to extract archive" >&2
74+ exit 1
75+ }
76+
77+ chmod +x "$INSTALL_DIR/$BINARY_NAME"
78+
79+ if [ "$(id -u)" -eq 0 ]; then
80+ echo "Installing to /usr/bin/${BINARY_NAME}..."
81+ mv "$INSTALL_DIR/$BINARY_NAME" "/usr/bin/$BINARY_NAME"
82+ rm -rf "$INSTALL_DIR"
83+ echo "Installation complete! Run '${BINARY_NAME} --version' to verify."
2284else
23- echo "Couldn't add ${BINARY_NAME} to /usr/bin because script is not running at admin"
24- echo "Please run the following commands:"
25- echo " mv \$ HOME/${BINARY_NAME} -${TAG_NAME} /${BINARY_NAME} -\$ {OS}-\$ {ARCH} /usr/bin/${BINARY_NAME} "
26- echo " rm -r \$ HOME/${BINARY_NAME} -${TAG_NAME} "
85+ echo "Installation successful!"
86+ echo ""
87+ echo "Since you're not running as root, manual steps required:"
88+ echo " sudo mv \"$INSTALL_DIR/$BINARY_NAME\" \"/usr/bin/$BINARY_NAME\""
89+ echo " rm -rf \"$INSTALL_DIR\""
90+ echo ""
91+ echo "Or add to your PATH:"
92+ echo " export PATH=\"$INSTALL_DIR:\$PATH\""
2793fi
28- EOF
94+ EOF
95+
96+ chmod +x install.sh
97+ echo " Generated install.sh for ${TAG_NAME} "
0 commit comments