#!/bin/bash # Ubuntu PPA uploader for DMS packages # Usage: ./upload-ppa.sh # # Example: # ./upload-ppa.sh ../dms_0.5.2ppa1_source.changes dms # ./upload-ppa.sh ../dms_0.5.2+git705.fdbb86appa1_source.changes dms-git set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' info() { echo -e "${BLUE}[INFO]${NC} $1"; } success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } error() { echo -e "${RED}[ERROR]${NC} $1"; } if [ $# -lt 2 ]; then error "Usage: $0 " echo echo "Arguments:" echo " changes-file : Path to .changes file (e.g., ../dms_0.5.2ppa1_source.changes)" echo " ppa-name : PPA to upload to (dms or dms-git)" echo echo "Examples:" echo " $0 ../dms_0.5.2ppa1_source.changes dms" echo " $0 ../dms_0.5.2+git705.fdbb86appa1_source.changes dms-git" exit 1 fi CHANGES_FILE="$1" PPA_NAME="$2" # Validate changes file if [ ! -f "$CHANGES_FILE" ]; then error "Changes file not found: $CHANGES_FILE" exit 1 fi if [[ ! "$CHANGES_FILE" =~ \.changes$ ]]; then error "File must be a .changes file" exit 1 fi # Validate PPA name if [ "$PPA_NAME" != "dms" ] && [ "$PPA_NAME" != "dms-git" ] && [ "$PPA_NAME" != "danklinux" ]; then error "PPA name must be 'dms', 'dms-git', or 'danklinux'" exit 1 fi # Get absolute path CHANGES_FILE=$(realpath "$CHANGES_FILE") info "Uploading to PPA: ppa:avengemedia/$PPA_NAME" info "Changes file: $CHANGES_FILE" # Check if dput or lftp is installed UPLOAD_METHOD="" if command -v dput &> /dev/null; then UPLOAD_METHOD="dput" elif command -v lftp &> /dev/null; then UPLOAD_METHOD="lftp" warn "dput not found, using lftp as fallback" else error "Neither dput nor lftp found. Install one with:" error " sudo dnf install dput-ng # Preferred but broken on Fedora" error " sudo dnf install lftp # Alternative upload method" exit 1 fi # Check if ~/.dput.cf exists if [ ! -f "$HOME/.dput.cf" ]; then error "~/.dput.cf not found!" echo info "Create it from template:" echo " cp $(dirname "$0")/../dput.cf.template ~/.dput.cf" echo info "Or create it manually with:" cat <<'EOF' [ppa:avengemedia/dms] fqdn = ppa.launchpad.net method = ftp incoming = ~avengemedia/ubuntu/dms/ login = anonymous allow_unsigned_uploads = 0 [ppa:avengemedia/dms-git] fqdn = ppa.launchpad.net method = ftp incoming = ~avengemedia/ubuntu/dms-git/ login = anonymous allow_unsigned_uploads = 0 EOF exit 1 fi # Check if PPA is configured in dput.cf if ! grep -q "^\[ppa:avengemedia/$PPA_NAME\]" "$HOME/.dput.cf"; then error "PPA 'ppa:avengemedia/$PPA_NAME' not found in ~/.dput.cf" echo info "Add this to ~/.dput.cf:" cat </dev/null; then success "GPG signature valid" else error "GPG signature verification failed!" error "The .changes file must be signed with your GPG key" exit 1 fi # Ask for confirmation echo warn "About to upload to: ppa:avengemedia/$PPA_NAME" read -p "Continue? (y/N) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then info "Upload cancelled" exit 0 fi # Upload to PPA info "Uploading to Launchpad..." echo if dput "ppa:avengemedia/$PPA_NAME" "$CHANGES_FILE"; then echo success "Upload successful!" echo info "Monitor build progress at:" echo " https://launchpad.net/~avengemedia/+archive/ubuntu/$PPA_NAME/+packages" echo info "Builds typically take 5-30 minutes depending on:" echo " - Build queue length" echo " - Package complexity" echo " - Number of target Ubuntu series" echo info "Once built, users can install with:" echo " sudo add-apt-repository ppa:avengemedia/$PPA_NAME" echo " sudo apt update" echo " sudo apt install $PACKAGE_NAME" else error "Upload failed!" echo info "Common issues:" echo " - GPG key not verified on Launchpad (check https://launchpad.net/~/+editpgpkeys)" echo " - Version already uploaded (must increment version number)" echo " - Network/firewall blocking FTP (try HTTPS method in dput.cf)" echo " - Email in changelog doesn't match GPG key email" exit 1 fi