Add HTML email generator

This commit is contained in:
Pascal Le Merrer 2025-12-26 22:25:22 +01:00
parent 35b999c8c6
commit f1864d8841
14 changed files with 1748 additions and 16 deletions

249
setup_mdtosendy.sh Executable file
View file

@ -0,0 +1,249 @@
#!/bin/bash
# Bootstrap installer for mdtosendy
# Can be run via: curl -s https://github.com/ttscoff/mdtosendy/raw/main/bootstrap.sh | bash
# Or saved locally and run with: ./bootstrap.sh --update
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored messages
info() {
echo -e "${BLUE}${NC} $1"
}
success() {
echo -e "${GREEN}${NC} $1"
}
warning() {
echo -e "${YELLOW}${NC} $1"
}
error() {
echo -e "${RED}${NC} $1"
}
# Function to show help
show_help() {
echo "Bootstrap installer for mdtosendy"
echo
echo "Usage:"
echo " curl -s https://github.com/ttscoff/mdtosendy/raw/main/bootstrap.sh | bash"
echo " ./bootstrap.sh [OPTIONS]"
echo
echo "Options:"
echo " --update, -u Update existing installation by running git pull"
echo " --help, -h Show this help message"
echo
echo "Examples:"
echo " # Install mdtosendy"
echo " curl -s https://github.com/ttscoff/mdtosendy/raw/main/bootstrap.sh | bash"
echo
echo " # Update existing installation"
echo " ./bootstrap.sh --update"
echo
echo "For more information, visit: https://github.com/ttscoff/mdtosendy"
}
# Function to find real path of a file (following symlinks)
get_real_path() {
local file="$1"
if command -v realpath >/dev/null 2>&1; then
realpath "$file"
elif command -v readlink >/dev/null 2>&1; then
readlink -f "$file" 2>/dev/null || {
# Fallback for systems without readlink -f
local dir=$(dirname "$file")
local base=$(basename "$file")
cd "$dir" 2>/dev/null || return 1
local target=$(readlink "$base" 2>/dev/null)
if [ -n "$target" ]; then
if [ "${target:0:1}" = "/" ]; then
get_real_path "$target"
else
get_real_path "$dir/$target"
fi
else
echo "$(pwd)/$base"
fi
}
else
# Last resort: try to resolve manually
local dir=$(dirname "$file")
local base=$(basename "$file")
cd "$dir" 2>/dev/null || return 1
echo "$(pwd)/$base"
fi
}
# Function to update existing installation
update_installation() {
info "Updating mdtosendy installation..."
echo
# Try to find mdtosendy in PATH
if ! command -v mdtosendy >/dev/null 2>&1; then
error "mdtosendy not found in PATH"
echo "Please ensure mdtosendy is installed and in your PATH"
exit 1
fi
# Get the real path of the mdtosendy script
MDTOSENDY_PATH=$(command -v mdtosendy)
REAL_PATH=$(get_real_path "$MDTOSENDY_PATH")
if [ ! -f "$REAL_PATH" ]; then
error "Could not resolve real path of mdtosendy: $MDTOSENDY_PATH"
exit 1
fi
# Get the directory containing the script
REPO_DIR=$(dirname "$REAL_PATH")
info "Found installation at: $REPO_DIR"
# Check if it's a git repository
if [ ! -d "$REPO_DIR/.git" ]; then
error "Installation directory is not a git repository: $REPO_DIR"
echo "Cannot update. Please reinstall using the bootstrap script."
exit 1
fi
# Change to repository directory and pull
info "Updating repository..."
cd "$REPO_DIR" || exit 1
if ! git pull; then
error "Failed to update repository"
exit 1
fi
success "Repository updated successfully"
# Re-run install.sh to ensure symlink is up to date
if [ -f "$REPO_DIR/install.sh" ]; then
info "Re-running install script to update symlink..."
"$REPO_DIR/install.sh"
else
warning "install.sh not found, skipping symlink update"
fi
echo
success "Update complete!"
}
# Parse arguments
UPDATE_MODE=false
for arg in "$@"; do
case $arg in
--update|-u)
UPDATE_MODE=true
shift
;;
--help|-h)
show_help
exit 0
;;
*)
warning "Unknown option: $arg"
echo "Use --help for usage information"
exit 1
;;
esac
done
# If --update flag is set, run update and exit
if [ "$UPDATE_MODE" = true ]; then
update_installation
exit 0
fi
# Normal installation flow
info "Bootstrap installer for mdtosendy"
echo
# Check for required tools
if ! command -v git >/dev/null 2>&1; then
error "git is not installed"
echo "Please install git first: https://git-scm.com/downloads"
exit 1
fi
# Prompt for install directory
DEFAULT_INSTALL_DIR="$HOME/mdtosendy"
info "Installation directory (default: $DEFAULT_INSTALL_DIR)"
read -p "Enter directory path or press Enter for default: " INSTALL_DIR
INSTALL_DIR="${INSTALL_DIR:-$DEFAULT_INSTALL_DIR}"
INSTALL_DIR="${INSTALL_DIR/#\~/$HOME}" # Expand ~
# Check if directory exists
if [ -d "$INSTALL_DIR" ]; then
if [ -d "$INSTALL_DIR/.git" ]; then
# It's a git repository, offer to update
warning "Directory already exists and is a git repository: $INSTALL_DIR"
read -p "Update existing installation? (Y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
info "Updating existing installation..."
cd "$INSTALL_DIR" || exit 1
if ! git pull; then
error "Failed to update repository"
exit 1
fi
success "Repository updated"
else
info "Installation cancelled"
exit 0
fi
else
# Directory exists but is not a git repository
warning "Directory already exists but is not a git repository: $INSTALL_DIR"
read -p "Remove and reinstall? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
info "Removing existing directory..."
rm -rf "$INSTALL_DIR"
else
read -p "Enter a different directory path: " INSTALL_DIR
INSTALL_DIR="${INSTALL_DIR/#\~/$HOME}" # Expand ~
if [ -d "$INSTALL_DIR" ]; then
error "Directory still exists: $INSTALL_DIR"
exit 1
fi
fi
fi
fi
# Clone repository
info "Cloning repository to $INSTALL_DIR..."
if ! git clone https://github.com/ttscoff/mdtosendy.git "$INSTALL_DIR"; then
error "Failed to clone repository"
exit 1
fi
success "Repository cloned successfully"
# Run install.sh from cloned directory
if [ -f "$INSTALL_DIR/install.sh" ]; then
info "Running install script..."
cd "$INSTALL_DIR" || exit 1
chmod +x install.sh
./install.sh
else
error "install.sh not found in cloned repository"
exit 1
fi
echo
success "Bootstrap installation complete!"
echo
info "The repository is installed at: $INSTALL_DIR"
info "You can update it later by running: cd $INSTALL_DIR && git pull"
info "Or use: ./bootstrap.sh --update (if you saved this script locally)"