94 lines
2.2 KiB
Bash
Executable File
94 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Check PKGBUILD versions against published repo versions
|
|
# Creates state files for edge and/or stable if any packages need building
|
|
|
|
set -e
|
|
|
|
BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..")
|
|
source "$BUILD_ROOT/helpers/message-helpers.sh"
|
|
source "$BUILD_ROOT/helpers/paths.sh"
|
|
source "$BUILD_ROOT/helpers/package-metadata.sh"
|
|
|
|
STATE_DIR="${OMARCHY_STATE_DIR:-/root/.state}"
|
|
ARCH="${ARCH:-x86_64}"
|
|
|
|
mkdir -p "$STATE_DIR"
|
|
|
|
print_header "Package Version Check"
|
|
|
|
get_repo_version() {
|
|
local pkg="$1"
|
|
local mirror="$2"
|
|
local repo_db="$BUILD_ROOT/pkgs.omarchy.org/$mirror/$ARCH/omarchy.db.tar.zst"
|
|
|
|
if [[ -f "$repo_db" ]]; then
|
|
local desc_file
|
|
desc_file=$(tar -tf "$repo_db" 2>/dev/null | grep "^${pkg}-[0-9r].*/desc$" | head -1)
|
|
if [[ -n "$desc_file" ]]; then
|
|
tar -xOf "$repo_db" "$desc_file" 2>/dev/null | awk '/%VERSION%/{getline; print; exit}'
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_pkgbuild_version() {
|
|
local pkgdir="$1"
|
|
if [[ -f "$pkgdir/PKGBUILD" ]]; then
|
|
(cd "$pkgdir" && bash -c 'source PKGBUILD 2>/dev/null; if [[ -n "$epoch" ]]; then echo "${epoch}:${pkgver}-${pkgrel}"; else echo "${pkgver}-${pkgrel}"; fi')
|
|
fi
|
|
}
|
|
|
|
check_package() {
|
|
local pkg="$1"
|
|
local pkgdir="$2"
|
|
local mirror="$3"
|
|
|
|
local pkgbuild_version repo_version
|
|
pkgbuild_version=$(get_pkgbuild_version "$pkgdir")
|
|
repo_version=$(get_repo_version "$pkg" "$mirror")
|
|
|
|
if [[ -z "$pkgbuild_version" ]]; then
|
|
return 1
|
|
fi
|
|
|
|
if [[ "$pkgbuild_version" != "$repo_version" ]]; then
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
check_mirror() {
|
|
local mirror="$1"
|
|
local state_file="$STATE_DIR/.sync-needed-$mirror"
|
|
local needs_build=false
|
|
local packages=()
|
|
|
|
print_info "Checking $mirror packages..."
|
|
|
|
while IFS= read -r pkg; do
|
|
local pkgdir="$PKGBUILDS_DIR/$pkg"
|
|
if check_package "$pkg" "$pkgdir" "$mirror"; then
|
|
needs_build=true
|
|
packages+=("$pkg")
|
|
fi
|
|
done < <(packages_for_mirror "$mirror")
|
|
|
|
echo ""
|
|
|
|
if [[ "$needs_build" == true ]]; then
|
|
touch "$state_file"
|
|
print_success "${mirror^} needs building (${#packages[@]} packages)"
|
|
print_info "Packages: ${packages[*]}"
|
|
print_info "State file created: $state_file"
|
|
else
|
|
print_info "${mirror^} is up to date"
|
|
fi
|
|
|
|
echo ""
|
|
}
|
|
|
|
check_mirror edge
|
|
check_mirror stable
|
|
|
|
print_success "Version check complete!"
|