Probably should have committed a long time ago...
This commit is contained in:
@@ -0,0 +1,231 @@
|
||||
#!/bin/bash
|
||||
# Omarchy Repository Package Builder - Docker Isolated
|
||||
# Builds packages in Docker without affecting the host system
|
||||
|
||||
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
|
||||
|
||||
# Repository paths
|
||||
REPO_DIR="/home/ryan/Dev/omarchy-repo"
|
||||
ARCH_DIR="$REPO_DIR/x86_64"
|
||||
BUILD_DIR="$REPO_DIR/build"
|
||||
|
||||
# Create directories if they don't exist
|
||||
mkdir -p "$ARCH_DIR" "$BUILD_DIR"
|
||||
|
||||
# Function to print colored messages
|
||||
print_msg() {
|
||||
local color=$1
|
||||
local msg=$2
|
||||
echo -e "${color}${msg}${NC}"
|
||||
}
|
||||
|
||||
|
||||
# Function to build Docker image
|
||||
build_docker_image() {
|
||||
print_msg "$BLUE" "==> Building Docker image..."
|
||||
|
||||
# Check if Dockerfile exists
|
||||
if [[ ! -f "$BUILD_DIR/Dockerfile" ]]; then
|
||||
print_msg "$RED" "Error: Dockerfile not found at $BUILD_DIR/Dockerfile"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Prepare package list for Docker build
|
||||
if [[ -n "$ONLY_PACKAGES" ]]; then
|
||||
print_msg "$YELLOW" " -> Filtering packages: $ONLY_PACKAGES"
|
||||
|
||||
# Create temporary filtered list
|
||||
> "$BUILD_DIR/packages"
|
||||
|
||||
# Check each package against the main list
|
||||
for pkg in $ONLY_PACKAGES; do
|
||||
# Check if in package list (handle options like skip-pgp)
|
||||
if [[ -f "$REPO_DIR/packages" ]]; then
|
||||
grep "^$pkg\( \|$\)" "$REPO_DIR/packages" >> "$BUILD_DIR/packages" && {
|
||||
print_msg "$GREEN" " -> $pkg"
|
||||
} || {
|
||||
print_msg "$YELLOW" " -> $pkg (not found in package list)"
|
||||
}
|
||||
fi
|
||||
done
|
||||
else
|
||||
# Copy full packages list to build directory
|
||||
cp "$REPO_DIR/packages" "$BUILD_DIR/packages"
|
||||
fi
|
||||
|
||||
# Build image
|
||||
cd "$BUILD_DIR"
|
||||
docker build -t omarchy-builder . || {
|
||||
print_msg "$RED" "Failed to build Docker image"
|
||||
exit 1
|
||||
}
|
||||
|
||||
print_msg "$GREEN" " -> Docker image built successfully!"
|
||||
}
|
||||
|
||||
# Function to run build in Docker
|
||||
run_docker_build() {
|
||||
print_msg "$BLUE" "==> Running package build in Docker..."
|
||||
|
||||
# Create src directory if it doesn't exist
|
||||
mkdir -p "$REPO_DIR/src"
|
||||
|
||||
# Build docker run command with options
|
||||
DOCKER_ENV=""
|
||||
if [[ "$SKIP_PGP" == true ]]; then
|
||||
print_msg "$YELLOW" " -> Skipping PGP signature verification"
|
||||
DOCKER_ENV="$DOCKER_ENV -e SKIP_PGP=true"
|
||||
fi
|
||||
if [[ "$FORCE_REBUILD" == true ]]; then
|
||||
print_msg "$YELLOW" " -> Forcing rebuild of all packages"
|
||||
DOCKER_ENV="$DOCKER_ENV -e FORCE_REBUILD=true"
|
||||
fi
|
||||
|
||||
docker run --rm \
|
||||
$DOCKER_ENV \
|
||||
-v "$ARCH_DIR:/output" \
|
||||
-v "$ARCH_DIR:/var/cache/pacman/pkg" \
|
||||
-v "$REPO_DIR/src:/src" \
|
||||
omarchy-builder || {
|
||||
print_msg "$RED" "Docker build failed"
|
||||
exit 1
|
||||
}
|
||||
|
||||
print_msg "$GREEN" " -> Package build complete!"
|
||||
}
|
||||
|
||||
# Function to clean Docker resources
|
||||
clean_docker() {
|
||||
print_msg "$BLUE" "==> Cleaning Docker resources..."
|
||||
|
||||
# Remove image
|
||||
docker rmi omarchy-builder 2>/dev/null || true
|
||||
|
||||
# Clean temporary packages file from build directory
|
||||
rm -f "$BUILD_DIR/packages"
|
||||
|
||||
print_msg "$GREEN" " -> Cleanup complete!"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
print_msg "$BLUE" "================================"
|
||||
print_msg "$BLUE" "Omarchy Repository Docker Builder"
|
||||
print_msg "$BLUE" "================================"
|
||||
|
||||
# Check for Docker
|
||||
if ! command -v docker &> /dev/null; then
|
||||
print_msg "$RED" "Error: Docker is not installed"
|
||||
print_msg "$YELLOW" "Please install Docker first:"
|
||||
print_msg "$YELLOW" " sudo pacman -S docker"
|
||||
print_msg "$YELLOW" " sudo systemctl start docker"
|
||||
print_msg "$YELLOW" " sudo usermod -aG docker $USER"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if Docker daemon is running
|
||||
if ! docker info &> /dev/null; then
|
||||
print_msg "$RED" "Error: Docker daemon is not running"
|
||||
print_msg "$YELLOW" "Start Docker with: sudo systemctl start docker"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Parse command line arguments
|
||||
CLEAN_ONLY=false
|
||||
KEEP_IMAGE=false
|
||||
ONLY_PACKAGES=""
|
||||
SKIP_PGP=false
|
||||
FORCE_REBUILD=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--clean)
|
||||
CLEAN_ONLY=true
|
||||
shift
|
||||
;;
|
||||
--keep-image)
|
||||
KEEP_IMAGE=true
|
||||
shift
|
||||
;;
|
||||
--only)
|
||||
ONLY_PACKAGES="$2"
|
||||
shift 2
|
||||
;;
|
||||
--skip-pgp)
|
||||
SKIP_PGP=true
|
||||
shift
|
||||
;;
|
||||
--force)
|
||||
FORCE_REBUILD=true
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --clean Clean Docker resources only"
|
||||
echo " --keep-image Keep Docker image after build"
|
||||
echo " --only \"pkg1 pkg2\" Only build specific packages"
|
||||
echo " --skip-pgp Skip PGP signature verification"
|
||||
echo " --force Force rebuild even if no updates"
|
||||
echo " -h, --help Show this help message"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 # Build all packages"
|
||||
echo " $0 --only \"yay walker-bin\" # Only build yay and walker-bin"
|
||||
echo " $0 --skip-pgp # Build without PGP checks"
|
||||
echo ""
|
||||
echo "This script builds all packages listed in:"
|
||||
echo " - packages.official (downloaded from Arch repos)"
|
||||
echo " - packages.aur (built from AUR)"
|
||||
echo ""
|
||||
echo "All builds happen inside a Docker container."
|
||||
echo "No packages are installed on your host system."
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
print_msg "$RED" "Unknown option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Execute based on options
|
||||
if [[ "$CLEAN_ONLY" == true ]]; then
|
||||
clean_docker
|
||||
else
|
||||
# Build packages
|
||||
build_docker_image
|
||||
run_docker_build
|
||||
|
||||
# Clean up unless keeping image
|
||||
if [[ "$KEEP_IMAGE" != true ]]; then
|
||||
clean_docker
|
||||
else
|
||||
print_msg "$YELLOW" "Docker image kept: omarchy-builder"
|
||||
print_msg "$YELLOW" "Remove with: docker rmi omarchy-builder"
|
||||
fi
|
||||
|
||||
# Show results
|
||||
print_msg "$BLUE" "\n==> Build Summary:"
|
||||
local count=$(ls -1 "$ARCH_DIR"/*.pkg.tar.* 2>/dev/null | wc -l)
|
||||
if [[ $count -gt 0 ]]; then
|
||||
print_msg "$GREEN" " -> Built/downloaded $count package(s)"
|
||||
print_msg "$GREEN" " -> Packages are in: $ARCH_DIR"
|
||||
print_msg "$YELLOW" "\nNext step: Run ./scripts/update-repo.sh"
|
||||
else
|
||||
print_msg "$YELLOW" " -> No packages were built"
|
||||
print_msg "$YELLOW" " -> Check your package lists"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
Executable
+245
@@ -0,0 +1,245 @@
|
||||
#!/bin/bash
|
||||
# Omarchy Repository Cleaner
|
||||
# Removes old package versions keeping only the latest
|
||||
|
||||
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
|
||||
|
||||
# Repository configuration
|
||||
REPO_DIR="/home/ryan/Dev/omarchy-repo"
|
||||
ARCH_DIR="$REPO_DIR/x86_64"
|
||||
KEEP_VERSIONS=2
|
||||
|
||||
# Function to print colored messages
|
||||
print_msg() {
|
||||
local color=$1
|
||||
local msg=$2
|
||||
echo -e "${color}${msg}${NC}"
|
||||
}
|
||||
|
||||
# Function to clean old packages
|
||||
clean_packages() {
|
||||
local keep=$1
|
||||
local dry_run=$2
|
||||
|
||||
print_msg "$BLUE" "==> Cleaning old packages (keeping $keep versions)..."
|
||||
|
||||
cd "$ARCH_DIR"
|
||||
|
||||
# Group packages by name
|
||||
declare -A packages
|
||||
|
||||
for pkg in *.pkg.tar.*; do
|
||||
[[ -f "$pkg" ]] || continue
|
||||
|
||||
# Skip signature files
|
||||
[[ "$pkg" == *.sig ]] && continue
|
||||
|
||||
# Extract package name (remove version and architecture)
|
||||
# Format: name-version-release-arch.pkg.tar.*
|
||||
local pkgname=$(echo "$pkg" | sed -E 's/-[0-9]+.*-(any|x86_64|i686)\.pkg\.tar\..*//')
|
||||
|
||||
# Add to array
|
||||
if [[ -n "${packages[$pkgname]}" ]]; then
|
||||
packages[$pkgname]="${packages[$pkgname]} $pkg"
|
||||
else
|
||||
packages[$pkgname]="$pkg"
|
||||
fi
|
||||
done
|
||||
|
||||
# Process each package group
|
||||
local total_removed=0
|
||||
local space_freed=0
|
||||
|
||||
for pkgname in "${!packages[@]}"; do
|
||||
# Convert string to array and sort by modification time (newest first)
|
||||
IFS=' ' read -ra pkg_files <<< "${packages[$pkgname]}"
|
||||
|
||||
# Sort by modification time
|
||||
local sorted_files=($(ls -t "${pkg_files[@]}" 2>/dev/null))
|
||||
local count=${#sorted_files[@]}
|
||||
|
||||
if [[ $count -gt $keep ]]; then
|
||||
print_msg "$GREEN" " -> Processing $pkgname ($count versions found)"
|
||||
|
||||
# Remove old versions
|
||||
for ((i=$keep; i<$count; i++)); do
|
||||
local file="${sorted_files[$i]}"
|
||||
local size=$(stat -c%s "$file" 2>/dev/null || echo 0)
|
||||
space_freed=$((space_freed + size))
|
||||
|
||||
if [[ "$dry_run" == true ]]; then
|
||||
print_msg "$YELLOW" " Would remove: $file ($(numfmt --to=iec-i --suffix=B $size))"
|
||||
else
|
||||
print_msg "$RED" " Removing: $file ($(numfmt --to=iec-i --suffix=B $size))"
|
||||
rm -f "$file"
|
||||
rm -f "${file}.sig" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
total_removed=$((total_removed + 1))
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
# Summary
|
||||
if [[ $total_removed -gt 0 ]]; then
|
||||
if [[ "$dry_run" == true ]]; then
|
||||
print_msg "$BLUE" "\n -> Would remove $total_removed old package(s)"
|
||||
print_msg "$BLUE" " -> Would free $(numfmt --to=iec-i --suffix=B $space_freed)"
|
||||
else
|
||||
print_msg "$GREEN" "\n -> Removed $total_removed old package(s)"
|
||||
print_msg "$GREEN" " -> Freed $(numfmt --to=iec-i --suffix=B $space_freed)"
|
||||
fi
|
||||
else
|
||||
print_msg "$YELLOW" " -> No old packages to remove"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to remove all packages
|
||||
remove_all_packages() {
|
||||
local dry_run=$1
|
||||
|
||||
print_msg "$RED" "==> WARNING: Removing ALL packages from repository!"
|
||||
|
||||
if [[ "$dry_run" != true ]]; then
|
||||
read -p "Are you sure? Type 'yes' to confirm: " confirm
|
||||
if [[ "$confirm" != "yes" ]]; then
|
||||
print_msg "$YELLOW" "Cancelled."
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
cd "$ARCH_DIR"
|
||||
|
||||
local count=$(ls -1 *.pkg.tar.* 2>/dev/null | wc -l)
|
||||
|
||||
if [[ $count -eq 0 ]]; then
|
||||
print_msg "$YELLOW" "No packages found to remove"
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ "$dry_run" == true ]]; then
|
||||
print_msg "$YELLOW" "Would remove $count package(s):"
|
||||
ls -1 *.pkg.tar.* 2>/dev/null | while read -r pkg; do
|
||||
echo " - $pkg"
|
||||
done
|
||||
else
|
||||
rm -f *.pkg.tar.*
|
||||
rm -f *.db* *.files*
|
||||
print_msg "$GREEN" "Removed $count package(s) and database files"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to show repository disk usage
|
||||
show_disk_usage() {
|
||||
print_msg "$BLUE" "\n==> Repository Disk Usage:"
|
||||
|
||||
cd "$ARCH_DIR"
|
||||
|
||||
local total_size=$(du -sh . 2>/dev/null | cut -f1)
|
||||
local package_count=$(ls -1 *.pkg.tar.* 2>/dev/null | grep -v '\.sig$' | wc -l)
|
||||
|
||||
print_msg "$GREEN" " -> Total size: $total_size"
|
||||
print_msg "$GREEN" " -> Package count: $package_count"
|
||||
|
||||
if [[ $package_count -gt 0 ]]; then
|
||||
print_msg "$GREEN" " -> Average package size: $(du -b *.pkg.tar.* 2>/dev/null | awk '{sum+=$1; count++} END {print sum/count}' | numfmt --to=iec-i --suffix=B)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
print_msg "$BLUE" "================================"
|
||||
print_msg "$BLUE" "Omarchy Repository Cleaner"
|
||||
print_msg "$BLUE" "================================"
|
||||
|
||||
# Parse command line arguments
|
||||
DRY_RUN=false
|
||||
REMOVE_ALL=false
|
||||
SHOW_USAGE=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--keep)
|
||||
KEEP_VERSIONS="$2"
|
||||
shift 2
|
||||
;;
|
||||
--dry-run)
|
||||
DRY_RUN=true
|
||||
shift
|
||||
;;
|
||||
--all)
|
||||
REMOVE_ALL=true
|
||||
shift
|
||||
;;
|
||||
--usage)
|
||||
SHOW_USAGE=true
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --keep N Keep N versions of each package (default: 2)"
|
||||
echo " --dry-run Preview what would be removed without removing"
|
||||
echo " --all Remove ALL packages (dangerous!)"
|
||||
echo " --usage Show disk usage statistics"
|
||||
echo " -h, --help Show this help message"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 # Keep 2 versions (default)"
|
||||
echo " $0 --keep 3 # Keep 3 versions"
|
||||
echo " $0 --dry-run # Preview cleanup"
|
||||
echo " $0 --all --dry-run # Preview complete removal"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
print_msg "$RED" "Unknown option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Validate keep versions
|
||||
if ! [[ "$KEEP_VERSIONS" =~ ^[0-9]+$ ]] || [[ "$KEEP_VERSIONS" -lt 1 ]]; then
|
||||
print_msg "$RED" "Error: --keep must be a positive integer"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Show dry run notice
|
||||
if [[ "$DRY_RUN" == true ]]; then
|
||||
print_msg "$YELLOW" "DRY RUN MODE - No changes will be made"
|
||||
fi
|
||||
|
||||
# Execute based on options
|
||||
if [[ "$SHOW_USAGE" == true ]]; then
|
||||
show_disk_usage
|
||||
elif [[ "$REMOVE_ALL" == true ]]; then
|
||||
remove_all_packages "$DRY_RUN"
|
||||
else
|
||||
clean_packages "$KEEP_VERSIONS" "$DRY_RUN"
|
||||
|
||||
# Update database after cleaning (unless dry run)
|
||||
if [[ "$DRY_RUN" != true ]]; then
|
||||
print_msg "$BLUE" "\n==> Updating repository database..."
|
||||
"$REPO_DIR/scripts/update-repo.sh" >/dev/null 2>&1 && {
|
||||
print_msg "$GREEN" " -> Database updated successfully!"
|
||||
} || {
|
||||
print_msg "$YELLOW" " -> Database update failed (may need manual update)"
|
||||
}
|
||||
fi
|
||||
|
||||
show_disk_usage
|
||||
fi
|
||||
|
||||
print_msg "$GREEN" "\n==> Cleanup complete!"
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Usage: sync-repo.sh [directory]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rclone sync "$1" "pkgs.omarchy.org:omarchy-pkgs/$(basename $1)" --checksum --progress --copy-links --delete-after -v
|
||||
Executable
+186
@@ -0,0 +1,186 @@
|
||||
#!/bin/bash
|
||||
# Omarchy Repository Database Manager
|
||||
# Updates the repository database with all packages
|
||||
|
||||
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
|
||||
|
||||
# Repository configuration
|
||||
REPO_DIR="/home/ryan/Dev/omarchy-repo"
|
||||
ARCH_DIR="$REPO_DIR/x86_64"
|
||||
REPO_NAME="omarchy"
|
||||
DB_FILE="$ARCH_DIR/${REPO_NAME}.db.tar.zst"
|
||||
FILES_FILE="$ARCH_DIR/${REPO_NAME}.files.tar.zst"
|
||||
|
||||
# Function to print colored messages
|
||||
print_msg() {
|
||||
local color=$1
|
||||
local msg=$2
|
||||
echo -e "${color}${msg}${NC}"
|
||||
}
|
||||
|
||||
# Function to update repository database
|
||||
update_database() {
|
||||
print_msg "$BLUE" "==> Updating repository database..."
|
||||
|
||||
# Change to architecture directory
|
||||
cd "$ARCH_DIR"
|
||||
|
||||
# Remove old database files and symlinks
|
||||
rm -f "${REPO_NAME}.db" "${REPO_NAME}.db.tar.zst"
|
||||
rm -f "${REPO_NAME}.files" "${REPO_NAME}.files.tar.zst"
|
||||
rm -f "${REPO_NAME}.db.tar.zst.old" "${REPO_NAME}.files.tar.zst.old"
|
||||
|
||||
# Check if there are any packages
|
||||
if ! ls *.pkg.tar.* 1> /dev/null 2>&1; then
|
||||
print_msg "$YELLOW" "Warning: No packages found in $ARCH_DIR"
|
||||
print_msg "$YELLOW" "Run ./scripts/build-packages.sh first to build packages"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Add all packages to the database (excluding signature files)
|
||||
print_msg "$GREEN" " -> Adding packages to database..."
|
||||
# Process packages in smaller batches to avoid command line limits
|
||||
# Use -n 5 to process 5 packages at a time
|
||||
find . -maxdepth 1 -name "*.pkg.tar.*" ! -name "*.sig" -exec basename {} \; | xargs -n 5 repo-add "$DB_FILE" || {
|
||||
print_msg "$RED" "Error: Failed to update repository database"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Create symlinks for compatibility
|
||||
ln -sf "${REPO_NAME}.db.tar.zst" "${REPO_NAME}.db"
|
||||
ln -sf "${REPO_NAME}.files.tar.zst" "${REPO_NAME}.files"
|
||||
|
||||
# Count packages
|
||||
PACKAGE_COUNT=$(ls -1 *.pkg.tar.* 2>/dev/null | wc -l)
|
||||
|
||||
print_msg "$GREEN" " -> Database updated successfully!"
|
||||
print_msg "$BLUE" " -> Total packages in repository: $PACKAGE_COUNT"
|
||||
}
|
||||
|
||||
# Function to verify database
|
||||
verify_database() {
|
||||
print_msg "$BLUE" "\n==> Verifying repository database..."
|
||||
|
||||
if [[ -f "$DB_FILE" ]]; then
|
||||
# List packages in database
|
||||
print_msg "$GREEN" " -> Packages in database:"
|
||||
tar -tf "$DB_FILE" 2>/dev/null | grep -E "^[^/]+/$" | sed 's|/$||' | sort -u | while read -r pkg; do
|
||||
echo " - $pkg"
|
||||
done
|
||||
|
||||
print_msg "$GREEN" " -> Database verification complete!"
|
||||
else
|
||||
print_msg "$RED" "Error: Database file not found!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to sign database (optional)
|
||||
sign_database() {
|
||||
print_msg "$BLUE" "\n==> Signing repository database..."
|
||||
|
||||
# Check if GPG key is available
|
||||
if ! gpg --list-secret-keys 2>/dev/null | grep -q "sec"; then
|
||||
print_msg "$YELLOW" "Warning: No GPG key found, skipping signing"
|
||||
print_msg "$YELLOW" "To enable signing, create a GPG key and configure it"
|
||||
return
|
||||
fi
|
||||
|
||||
# Sign the database
|
||||
gpg --detach-sign --use-agent "$DB_FILE" 2>/dev/null && {
|
||||
print_msg "$GREEN" " -> Database signed successfully!"
|
||||
} || {
|
||||
print_msg "$YELLOW" " -> Database signing failed (optional)"
|
||||
}
|
||||
}
|
||||
|
||||
# Function to generate repository statistics
|
||||
generate_stats() {
|
||||
print_msg "$BLUE" "\n==> Repository Statistics:"
|
||||
|
||||
cd "$ARCH_DIR"
|
||||
|
||||
# Count packages by type
|
||||
local total_packages=$(ls -1 *.pkg.tar.* 2>/dev/null | wc -l)
|
||||
local total_size=$(du -sh . 2>/dev/null | cut -f1)
|
||||
|
||||
print_msg "$GREEN" " -> Total packages: $total_packages"
|
||||
print_msg "$GREEN" " -> Repository size: $total_size"
|
||||
|
||||
# List largest packages
|
||||
if [[ $total_packages -gt 0 ]]; then
|
||||
print_msg "$GREEN" " -> Largest packages:"
|
||||
ls -lhS *.pkg.tar.* 2>/dev/null | head -5 | awk '{print " " $9 " (" $5 ")"}'
|
||||
fi
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
print_msg "$BLUE" "================================"
|
||||
print_msg "$BLUE" "Omarchy Repository Database Manager"
|
||||
print_msg "$BLUE" "================================"
|
||||
|
||||
# Parse command line arguments
|
||||
VERIFY_ONLY=false
|
||||
SIGN_DB=false
|
||||
STATS_ONLY=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--verify)
|
||||
VERIFY_ONLY=true
|
||||
shift
|
||||
;;
|
||||
--sign)
|
||||
SIGN_DB=true
|
||||
shift
|
||||
;;
|
||||
--stats)
|
||||
STATS_ONLY=true
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --verify Only verify the database"
|
||||
echo " --sign Sign the database with GPG"
|
||||
echo " --stats Show repository statistics only"
|
||||
echo " -h, --help Show this help message"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
print_msg "$RED" "Unknown option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Execute based on options
|
||||
if [[ "$STATS_ONLY" == true ]]; then
|
||||
generate_stats
|
||||
elif [[ "$VERIFY_ONLY" == true ]]; then
|
||||
verify_database
|
||||
else
|
||||
update_database
|
||||
|
||||
if [[ "$SIGN_DB" == true ]]; then
|
||||
sign_database
|
||||
fi
|
||||
|
||||
verify_database
|
||||
generate_stats
|
||||
fi
|
||||
|
||||
print_msg "$GREEN" "\n==> Repository update complete!"
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user