feat: add CLI with TUI, self-update, install script, and terminal section on landing page
- Full-screen Bubble Tea TUI with cream background fill using PadLine/FillBlankLines - Self-update command (--update) pulling from GitHub releases - install.sh for curl one-liner installation - Terminal Lovers section on web landing page with install command and CLI features - All 7 format categories, glob/directory batch support, auto-download ffmpeg
This commit is contained in:
Executable
+109
@@ -0,0 +1,109 @@
|
||||
#!/bin/sh
|
||||
# Transmute CLI installer
|
||||
# Usage: curl -fsSL https://raw.githubusercontent.com/noauf/Transmute/main/install.sh | sh
|
||||
set -e
|
||||
|
||||
REPO="noauf/Transmute"
|
||||
BINARY="transmute"
|
||||
INSTALL_DIR="/usr/local/bin"
|
||||
|
||||
# Detect OS
|
||||
OS="$(uname -s)"
|
||||
case "$OS" in
|
||||
Darwin) OS="darwin" ;;
|
||||
Linux) OS="linux" ;;
|
||||
MINGW*|MSYS*|CYGWIN*) OS="windows" ;;
|
||||
*)
|
||||
echo "Error: unsupported operating system: $OS"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Detect architecture
|
||||
ARCH="$(uname -m)"
|
||||
case "$ARCH" in
|
||||
x86_64|amd64) ARCH="x86_64" ;;
|
||||
arm64|aarch64) ARCH="arm64" ;;
|
||||
*)
|
||||
echo "Error: unsupported architecture: $ARCH"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Determine file extension
|
||||
if [ "$OS" = "windows" ]; then
|
||||
EXT="zip"
|
||||
else
|
||||
EXT="tar.gz"
|
||||
fi
|
||||
|
||||
ASSET="${BINARY}-${OS}-${ARCH}.${EXT}"
|
||||
|
||||
echo "Transmute CLI installer"
|
||||
echo "======================"
|
||||
echo ""
|
||||
echo " OS: $OS"
|
||||
echo " Arch: $ARCH"
|
||||
echo ""
|
||||
|
||||
# Get latest release tag
|
||||
echo "Fetching latest release..."
|
||||
TAG=$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" | grep '"tag_name"' | head -1 | sed 's/.*"tag_name": *"\([^"]*\)".*/\1/')
|
||||
|
||||
if [ -z "$TAG" ]; then
|
||||
echo "Error: could not determine latest release"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo " Latest version: $TAG"
|
||||
|
||||
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${TAG}/${ASSET}"
|
||||
|
||||
echo " Downloading $ASSET..."
|
||||
|
||||
# Create temp directory
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
trap 'rm -rf "$TMP_DIR"' EXIT
|
||||
|
||||
curl -fsSL "$DOWNLOAD_URL" -o "${TMP_DIR}/${ASSET}"
|
||||
|
||||
# Extract
|
||||
echo " Extracting..."
|
||||
if [ "$EXT" = "tar.gz" ]; then
|
||||
tar -xzf "${TMP_DIR}/${ASSET}" -C "$TMP_DIR"
|
||||
else
|
||||
unzip -q "${TMP_DIR}/${ASSET}" -d "$TMP_DIR"
|
||||
fi
|
||||
|
||||
# Find the binary
|
||||
BIN_PATH=""
|
||||
if [ -f "${TMP_DIR}/${BINARY}" ]; then
|
||||
BIN_PATH="${TMP_DIR}/${BINARY}"
|
||||
elif [ -f "${TMP_DIR}/${BINARY}-${OS}-${ARCH}/${BINARY}" ]; then
|
||||
BIN_PATH="${TMP_DIR}/${BINARY}-${OS}-${ARCH}/${BINARY}"
|
||||
fi
|
||||
|
||||
if [ -z "$BIN_PATH" ]; then
|
||||
echo "Error: could not find ${BINARY} binary in archive"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chmod +x "$BIN_PATH"
|
||||
|
||||
# Install
|
||||
echo " Installing to ${INSTALL_DIR}/${BINARY}..."
|
||||
if [ -w "$INSTALL_DIR" ]; then
|
||||
mv "$BIN_PATH" "${INSTALL_DIR}/${BINARY}"
|
||||
else
|
||||
echo " (requires sudo)"
|
||||
sudo mv "$BIN_PATH" "${INSTALL_DIR}/${BINARY}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo " Installed transmute $TAG to ${INSTALL_DIR}/${BINARY}"
|
||||
echo ""
|
||||
echo " Get started:"
|
||||
echo " transmute *.png Convert all PNGs"
|
||||
echo " transmute ./files/ Convert all files in a directory"
|
||||
echo " transmute --help Show all options"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user