#!/bin/bash # Automated verification script for Debian package set -e # Colors for output GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo "======================================================================" echo " Sensorpajen Debian Package Verification" echo "======================================================================" echo "" # Check dependencies echo -n "Checking for dpkg-deb... " if command -v dpkg-deb >/dev/null 2>&1; then echo -e "${GREEN}OK${NC}" else echo -e "${RED}MISSING${NC}" echo "Install with: sudo apt install dpkg-dev" exit 1 fi echo -n "Checking for lintian... " if command -v lintian >/dev/null 2>&1; then echo -e "${GREEN}OK${NC}" else echo -e "${YELLOW}MISSING${NC}" echo "Install with: sudo apt install lintian" echo "Continuing without lintian checks..." SKIP_LINTIAN=1 fi echo -n "Checking for debhelper... " if dpkg -l debhelper >/dev/null 2>&1; then echo -e "${GREEN}OK${NC}" else echo -e "${YELLOW}MISSING${NC}" echo "Install with: sudo apt install debhelper" fi echo "" # Get project root SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" PROJECT_ROOT="$( cd "$SCRIPT_DIR/.." && pwd )" cd "$PROJECT_ROOT" # Check required files exist echo "Checking required files..." REQUIRED_FILES=( "debian/control" "debian/rules" "debian/install" "debian/changelog" "debian/postinst" "debian/prerm" "debian/postrm" "debian/compat" "debian/sensorpajen.service" "src/sensorpajen/main.py" "pyproject.toml" ) ALL_FILES_OK=1 for file in "${REQUIRED_FILES[@]}"; do echo -n " $file... " if [ -f "$file" ]; then echo -e "${GREEN}OK${NC}" else echo -e "${RED}MISSING${NC}" ALL_FILES_OK=0 fi done if [ $ALL_FILES_OK -eq 0 ]; then echo -e "${RED}Some required files are missing!${NC}" exit 1 fi echo "" # Extract version from pyproject.toml VERSION=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/') echo "Package version: $VERSION" echo "" # Clean previous builds echo "Cleaning previous builds..." rm -f ../*.deb ../*.build ../*.buildinfo ../*.changes rm -rf debian/.debhelper debian/sensorpajen debian/files # Build the package echo "Building Debian package..." echo "======================================================================" dpkg-buildpackage -us -uc -b if [ $? -ne 0 ]; then echo -e "${RED}Build failed!${NC}" exit 1 fi echo "" echo -e "${GREEN}Build successful!${NC}" echo "" # Find the built package DEB_FILE=$(ls -t ../*.deb 2>/dev/null | head -1) if [ -z "$DEB_FILE" ]; then echo -e "${RED}No .deb file found!${NC}" exit 1 fi echo "Package: $DEB_FILE" echo "" # Show package contents echo "Package contents:" echo "======================================================================" dpkg-deb -c "$DEB_FILE" | head -20 TOTAL_FILES=$(dpkg-deb -c "$DEB_FILE" | wc -l) if [ $TOTAL_FILES -gt 20 ]; then echo "... and $(($TOTAL_FILES - 20)) more files" fi echo "" # Show package info echo "Package information:" echo "======================================================================" dpkg-deb -I "$DEB_FILE" echo "" # Run lintian if available if [ -z "$SKIP_LINTIAN" ]; then echo "Running lintian checks..." echo "======================================================================" # Run lintian - allow warnings but fail on errors if lintian "$DEB_FILE"; then echo -e "${GREEN}Lintian passed!${NC}" else LINTIAN_EXIT=$? echo -e "${YELLOW}Lintian found issues (exit code: $LINTIAN_EXIT)${NC}" echo "Review the output above. Warnings are acceptable, errors should be fixed." fi echo "" fi # Final summary echo "======================================================================" echo -e "${GREEN}Package verification complete!${NC}" echo "======================================================================" echo "" echo "Package location: $DEB_FILE" echo "" echo "To install on a Raspberry Pi:" echo " scp $DEB_FILE pi@raspberrypi:~/" echo " ssh pi@raspberrypi" echo " sudo apt install ./$(basename $DEB_FILE)" echo "" echo "To test locally (not recommended, will modify /opt and /etc):" echo " sudo apt install $DEB_FILE" echo "" exit 0