#!/bin/sh # Check repository for outdated packages # # Intended behavior. # shellcheck disable=2106 [ "$1" ] || { printf 'usage: kiss outdated /path/to/repo\n' >&2 exit 1 } cd "$1" 2>/dev/null || { printf 'repository %s is inaccessible\n' "$1" >&2 exit 1 } printf 'Checking for outdated packages in %s\n' "$1" >&2 for pkg in */; do pkg=${pkg%%/} read -r ver _ 2>/dev/null < "$pkg/version" || { printf '%s: local version not found' "$pkg" >&2 continue } [ "$ver" = git ] && { printf '%s: skipping, version is git\n' "$pkg" >&2 continue } pkg=${pkg%%-bin} pkg=${pkg%%-git} rep=$(curl -s "https://repology.org/badge/latest-versions/$pkg.svg") || { printf '%s: failed to grab version from repology\n' "$pkg" >&2 continue } rep=${rep%*} rep=${rep##*>} case $rep in *", $ver"* | *"$ver,"* | "$ver") # Found match, do nothing. ;; - | '' | ' ') printf '%s: empty response from remote\n' "$pkg" >&2 ;; *) printf '%s: %s -> %s\n' "$pkg" "$ver" "$rep" ;; esac done