mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-24 21:42:51 -05:00
218 lines
7.0 KiB
Bash
Executable File
218 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Unified PPA status checker for DMS packages
|
|
# Checks build status for packages across multiple PPAs via Launchpad API
|
|
# Usage: ./distro/scripts/ppa-status.sh [package-name] [ppa-name]
|
|
#
|
|
# Examples:
|
|
# ./distro/scripts/ppa-status.sh # Check all packages in all PPAs
|
|
# ./distro/scripts/ppa-status.sh dms # Check dms package
|
|
# ./distro/scripts/ppa-status.sh all dms-git # Check all packages in dms-git PPA
|
|
|
|
PPA_OWNER="avengemedia"
|
|
LAUNCHPAD_API="https://api.launchpad.net/1.0"
|
|
DISTRO_SERIES="questing"
|
|
|
|
# Define packages (sync with ppa-upload.sh)
|
|
ALL_PACKAGES=(dms dms-git dms-greeter)
|
|
|
|
# Function to get PPA name for a package
|
|
get_ppa_name() {
|
|
local pkg="$1"
|
|
case "$pkg" in
|
|
dms) echo "dms" ;;
|
|
dms-git) echo "dms-git" ;;
|
|
dms-greeter) echo "danklinux" ;;
|
|
*) echo "" ;;
|
|
esac
|
|
}
|
|
|
|
# Check for required tools
|
|
if ! command -v curl &> /dev/null; then
|
|
echo "Error: curl is required but not installed"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v jq &> /dev/null; then
|
|
echo "Error: jq is required but not installed"
|
|
exit 1
|
|
fi
|
|
|
|
# Parse arguments
|
|
PACKAGE_INPUT="${1:-}"
|
|
PPA_INPUT="${2:-}"
|
|
|
|
# Determine packages and PPAs to check
|
|
if [[ -n "$PACKAGE_INPUT" ]] && [[ "$PACKAGE_INPUT" != "all" ]]; then
|
|
# Check specific package
|
|
VALID_PACKAGE=false
|
|
for pkg in "${ALL_PACKAGES[@]}"; do
|
|
if [[ "$PACKAGE_INPUT" == "$pkg" ]]; then
|
|
VALID_PACKAGE=true
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [[ "$VALID_PACKAGE" != "true" ]]; then
|
|
echo "Error: Unknown package: $PACKAGE_INPUT"
|
|
echo "Available packages: ${ALL_PACKAGES[*]}"
|
|
exit 1
|
|
fi
|
|
|
|
PACKAGES=("$PACKAGE_INPUT")
|
|
if [[ -n "$PPA_INPUT" ]]; then
|
|
PPAS=("$PPA_INPUT")
|
|
else
|
|
PPAS=("$(get_ppa_name "$PACKAGE_INPUT")")
|
|
fi
|
|
elif [[ -n "$PPA_INPUT" ]]; then
|
|
# Check all packages in specific PPA
|
|
PACKAGES=("${ALL_PACKAGES[@]}")
|
|
PPAS=("$PPA_INPUT")
|
|
else
|
|
# Check all packages in all PPAs
|
|
PACKAGES=("${ALL_PACKAGES[@]}")
|
|
PPAS=("dms" "dms-git" "danklinux")
|
|
fi
|
|
|
|
# Function to get build status color and symbol
|
|
get_status_display() {
|
|
local status="$1"
|
|
case "$status" in
|
|
"Successfully built")
|
|
echo -e "✅ \033[0;32m$status\033[0m"
|
|
;;
|
|
"Failed to build")
|
|
echo -e "❌ \033[0;31m$status\033[0m"
|
|
;;
|
|
"Needs building"|"Currently building")
|
|
echo -e "⏳ \033[0;33m$status\033[0m"
|
|
;;
|
|
"Dependency wait")
|
|
echo -e "⚠️ \033[0;33m$status\033[0m"
|
|
;;
|
|
"Chroot problem")
|
|
echo -e "🔧 \033[0;31m$status\033[0m"
|
|
;;
|
|
"Uploading build")
|
|
echo -e "📤 \033[0;36m$status\033[0m"
|
|
;;
|
|
*)
|
|
echo -e "❓ \033[0;37m$status\033[0m"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Check each PPA
|
|
for PPA_NAME in "${PPAS[@]}"; do
|
|
PPA_ARCHIVE="${LAUNCHPAD_API}/~${PPA_OWNER}/+archive/ubuntu/${PPA_NAME}"
|
|
|
|
echo "=========================================="
|
|
echo "=== PPA: ${PPA_OWNER}/${PPA_NAME} ==="
|
|
echo "=========================================="
|
|
echo "Distribution: Ubuntu $DISTRO_SERIES"
|
|
echo ""
|
|
|
|
for pkg in "${PACKAGES[@]}"; do
|
|
# Only check packages that belong to this PPA
|
|
PKG_PPA=$(get_ppa_name "$pkg")
|
|
if [[ "$PKG_PPA" != "$PPA_NAME" ]]; then
|
|
continue
|
|
fi
|
|
|
|
echo "----------------------------------------"
|
|
echo "--- $pkg ---"
|
|
echo "----------------------------------------"
|
|
|
|
# Get published sources for this package
|
|
SOURCES_URL="${PPA_ARCHIVE}?ws.op=getPublishedSources&source_name=${pkg}&distro_series=${LAUNCHPAD_API}/ubuntu/${DISTRO_SERIES}&status=Published"
|
|
|
|
SOURCES=$(curl -s "$SOURCES_URL" 2>/dev/null)
|
|
|
|
if [[ -z "$SOURCES" ]] || [[ "$SOURCES" == "null" ]]; then
|
|
echo " ⚠️ No published sources found"
|
|
echo ""
|
|
continue
|
|
fi
|
|
|
|
# Get the latest source
|
|
TOTAL=$(echo "$SOURCES" | jq '.total_size // 0')
|
|
|
|
if [[ "$TOTAL" == "0" ]]; then
|
|
echo " ⚠️ No published sources found for $DISTRO_SERIES"
|
|
echo ""
|
|
continue
|
|
fi
|
|
|
|
# Get most recent entry
|
|
ENTRY=$(echo "$SOURCES" | jq '.entries[0]')
|
|
|
|
if [[ "$ENTRY" == "null" ]]; then
|
|
echo " ⚠️ No source entries found"
|
|
echo ""
|
|
continue
|
|
fi
|
|
|
|
# Extract source info
|
|
VERSION=$(echo "$ENTRY" | jq -r '.source_package_version // "unknown"')
|
|
STATUS=$(echo "$ENTRY" | jq -r '.status // "unknown"')
|
|
DATE_PUBLISHED=$(echo "$ENTRY" | jq -r '.date_published // "unknown"')
|
|
SELF_LINK=$(echo "$ENTRY" | jq -r '.self_link // ""')
|
|
|
|
echo " 📦 Version: $VERSION"
|
|
echo " 📅 Published: ${DATE_PUBLISHED%T*}"
|
|
echo " 📋 Source Status: $STATUS"
|
|
echo ""
|
|
|
|
# Get builds for this source
|
|
if [[ -n "$SELF_LINK" && "$SELF_LINK" != "null" ]]; then
|
|
BUILDS_URL="${SELF_LINK}?ws.op=getBuilds"
|
|
BUILDS=$(curl -s "$BUILDS_URL" 2>/dev/null)
|
|
|
|
if [[ -n "$BUILDS" && "$BUILDS" != "null" ]]; then
|
|
BUILD_COUNT=$(echo "$BUILDS" | jq '.total_size // 0')
|
|
|
|
if [[ "$BUILD_COUNT" -gt 0 ]]; then
|
|
echo " Builds:"
|
|
echo "$BUILDS" | jq -r '.entries[] | "\(.arch_tag) \(.buildstate)"' 2>/dev/null | while read -r line; do
|
|
ARCH=$(echo "$line" | awk '{print $1}')
|
|
BUILD_STATUS=$(echo "$line" | cut -d' ' -f2-)
|
|
DISPLAY=$(get_status_display "$BUILD_STATUS")
|
|
echo " $ARCH: $DISPLAY"
|
|
done
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Alternative: Get build records directly from archive
|
|
BUILD_RECORDS_URL="${PPA_ARCHIVE}?ws.op=getBuildRecords&source_name=${pkg}"
|
|
BUILD_RECORDS=$(curl -s "$BUILD_RECORDS_URL" 2>/dev/null)
|
|
|
|
if [[ -n "$BUILD_RECORDS" && "$BUILD_RECORDS" != "null" ]]; then
|
|
RECORD_COUNT=$(echo "$BUILD_RECORDS" | jq '.total_size // 0')
|
|
|
|
if [[ "$RECORD_COUNT" -gt 0 ]]; then
|
|
echo ""
|
|
echo " Recent build history:"
|
|
|
|
# Get unique version+arch combinations
|
|
echo "$BUILD_RECORDS" | jq -r '.entries[:6][] | "\(.source_package_version) \(.arch_tag) \(.buildstate)"' 2>/dev/null | while read -r line; do
|
|
VER=$(echo "$line" | awk '{print $1}')
|
|
ARCH=$(echo "$line" | awk '{print $2}')
|
|
BUILD_STATUS=$(echo "$line" | cut -d' ' -f3-)
|
|
DISPLAY=$(get_status_display "$BUILD_STATUS")
|
|
echo " $VER ($ARCH): $DISPLAY"
|
|
done
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
done
|
|
|
|
echo "View full PPA at: https://launchpad.net/~${PPA_OWNER}/+archive/ubuntu/${PPA_NAME}"
|
|
echo ""
|
|
done
|
|
|
|
echo "=========================================="
|
|
echo "Status check complete!"
|
|
echo ""
|