aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremmett1 <me@emmett1.my>2026-05-25 07:59:03 +0800
committeremmett1 <me@emmett1.my>2026-05-25 07:59:03 +0800
commitea6dfd720eb5a5ee4fc4f332d7fcd3600091d0b8 (patch)
tree2240392aa30d8a2e9303ec5c47125dd1383e5d83
parentef5bfeb93345a5a681d88e99775622bf28defd8d (diff)
downloadalicelinux-ea6dfd720eb5a5ee4fc4f332d7fcd3600091d0b8.tar.gz
alicelinux-ea6dfd720eb5a5ee4fc4f332d7fcd3600091d0b8.zip
added ./utils/outdated.sh
-rw-r--r--repos/archive/clang/outdated2
-rw-r--r--repos/core/ca-certificates/outdated3
-rw-r--r--repos/extra/cairo/outdated2
-rw-r--r--repos/extra/dejavu-fonts-ttf/outdated2
-rw-r--r--repos/extra/font-awesome/outdated2
-rw-r--r--repos/extra/fuse/outdated2
-rw-r--r--repos/extra/glib-gi/outdated2
-rw-r--r--repos/extra/imagemagick/outdated3
-rw-r--r--repos/extra/lcms2/outdated2
-rw-r--r--repos/extra/libaom/outdated2
-rw-r--r--repos/extra/libclc/outdated2
-rw-r--r--repos/extra/librewolf/outdated3
-rw-r--r--repos/extra/mako/outdated2
-rw-r--r--repos/extra/wpa_supplicant/outdated2
-rwxr-xr-xutils/outdated.sh148
15 files changed, 159 insertions, 20 deletions
diff --git a/repos/archive/clang/outdated b/repos/archive/clang/outdated
index a4490d84..453889a6 100644
--- a/repos/archive/clang/outdated
+++ b/repos/archive/clang/outdated
@@ -1 +1 @@
-name=llvm
+llvm
diff --git a/repos/core/ca-certificates/outdated b/repos/core/ca-certificates/outdated
deleted file mode 100644
index 79f2d38a..00000000
--- a/repos/core/ca-certificates/outdated
+++ /dev/null
@@ -1,3 +0,0 @@
-newver() {
- newver=$(echo $newver | sed 's/\.//g')
-}
diff --git a/repos/extra/cairo/outdated b/repos/extra/cairo/outdated
index 792dd54e..7f031acc 100644
--- a/repos/extra/cairo/outdated
+++ b/repos/extra/cairo/outdated
@@ -1 +1 @@
-name=cairo-graphics-library
+cairo-graphics-library
diff --git a/repos/extra/dejavu-fonts-ttf/outdated b/repos/extra/dejavu-fonts-ttf/outdated
index c701e72d..117de797 100644
--- a/repos/extra/dejavu-fonts-ttf/outdated
+++ b/repos/extra/dejavu-fonts-ttf/outdated
@@ -1 +1 @@
-name=fonts:dejavu
+fonts:dejavu
diff --git a/repos/extra/font-awesome/outdated b/repos/extra/font-awesome/outdated
index ee6116be..3a018c87 100644
--- a/repos/extra/font-awesome/outdated
+++ b/repos/extra/font-awesome/outdated
@@ -1 +1 @@
-name=fonts:fontawesome
+fonts:fontawesome
diff --git a/repos/extra/fuse/outdated b/repos/extra/fuse/outdated
index c7c43e26..fb58f053 100644
--- a/repos/extra/fuse/outdated
+++ b/repos/extra/fuse/outdated
@@ -1 +1 @@
-name=fusefs:3
+fusefs:3
diff --git a/repos/extra/glib-gi/outdated b/repos/extra/glib-gi/outdated
index 8713324b..4f55ab90 100644
--- a/repos/extra/glib-gi/outdated
+++ b/repos/extra/glib-gi/outdated
@@ -1 +1 @@
-name=glib
+glib
diff --git a/repos/extra/imagemagick/outdated b/repos/extra/imagemagick/outdated
deleted file mode 100644
index dfdb2509..00000000
--- a/repos/extra/imagemagick/outdated
+++ /dev/null
@@ -1,3 +0,0 @@
-newver() {
- newver=$(echo $newver | sed 's/_/\./')
-}
diff --git a/repos/extra/lcms2/outdated b/repos/extra/lcms2/outdated
index 10cbe0ab..3ab739fa 100644
--- a/repos/extra/lcms2/outdated
+++ b/repos/extra/lcms2/outdated
@@ -1 +1 @@
-name=lcms
+lcms
diff --git a/repos/extra/libaom/outdated b/repos/extra/libaom/outdated
index 1547db5e..dbf81fe6 100644
--- a/repos/extra/libaom/outdated
+++ b/repos/extra/libaom/outdated
@@ -1 +1 @@
-name=aom
+aom
diff --git a/repos/extra/libclc/outdated b/repos/extra/libclc/outdated
index a4490d84..453889a6 100644
--- a/repos/extra/libclc/outdated
+++ b/repos/extra/libclc/outdated
@@ -1 +1 @@
-name=llvm
+llvm
diff --git a/repos/extra/librewolf/outdated b/repos/extra/librewolf/outdated
deleted file mode 100644
index dfdb2509..00000000
--- a/repos/extra/librewolf/outdated
+++ /dev/null
@@ -1,3 +0,0 @@
-newver() {
- newver=$(echo $newver | sed 's/_/\./')
-}
diff --git a/repos/extra/mako/outdated b/repos/extra/mako/outdated
index 4c90f265..2f16a6a3 100644
--- a/repos/extra/mako/outdated
+++ b/repos/extra/mako/outdated
@@ -1 +1 @@
-name=mako-notifier
+mako-notifier
diff --git a/repos/extra/wpa_supplicant/outdated b/repos/extra/wpa_supplicant/outdated
index 7c706a4c..b2850d62 100644
--- a/repos/extra/wpa_supplicant/outdated
+++ b/repos/extra/wpa_supplicant/outdated
@@ -1 +1 @@
-name=wpa-supplicant
+wpa-supplicant
diff --git a/utils/outdated.sh b/utils/outdated.sh
new file mode 100755
index 00000000..fd8efa27
--- /dev/null
+++ b/utils/outdated.sh
@@ -0,0 +1,148 @@
+#!/bin/sh
+#
+# Scan repos/ for outdated packages using repology.org's latest-version badge.
+# Run from the project root.
+#
+# Usage:
+# ./utils/outdated.sh scan all repos
+# ./utils/outdated.sh core extra scan only specified repos
+# ./utils/outdated.sh llvm libressl check only specified packages
+# ./utils/outdated.sh -j output as JSON
+# ./utils/outdated.sh -q quiet: only print outdated, skip "checking" lines
+
+repos_dir="$(dirname "$0")/../repos"
+
+json_output=false
+quiet=false
+selected_repos=
+selected_pkgs=
+
+known_repos="core extra community wip"
+
+for arg; do
+ case "$arg" in
+ -j) json_output=true;;
+ -q) quiet=true;;
+ *)
+ case " $known_repos " in
+ *" $arg "*) selected_repos="$selected_repos $arg";;
+ *) selected_pkgs="$selected_pkgs $arg";;
+ esac
+ ;;
+ esac
+done
+
+if [ -z "$selected_repos" ]; then
+ selected_repos=$known_repos
+fi
+
+fetch_version() {
+ curl -sS -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" \
+ "https://repology.org/badge/latest-versions/${1}.svg" \
+ | sed 's/, /,/g' \
+ | tr ' ' '\n' \
+ | grep -Eo 'central">.*<' \
+ | sed 's/<.*//;s/.*>//' \
+ | tr ',' '\n' \
+ | tail -n1
+}
+
+# collect package list into a temp file so the while loop runs in the main shell
+tmpfile=$(mktemp -t outdated.XXXXXX)
+trap 'rm -f "$tmpfile"' EXIT
+
+for repo in $selected_repos; do
+ [ -d "$repos_dir/$repo" ] || continue
+ for abuild in "$repos_dir/$repo"/*/abuild; do
+ [ -f "$abuild" ] || continue
+ dir="${abuild%/abuild}"
+ pkgname="${dir##*/}"
+
+ # filter by package name if specific packages were requested
+ if [ -n "$selected_pkgs" ]; then
+ match=false
+ for p in $selected_pkgs; do
+ [ "$pkgname" = "$p" ] && match=true && break
+ done
+ $match || continue
+ fi
+
+ printf '%s\t%s\t%s\n' "$repo" "$pkgname" "$dir"
+ done
+done | sort -t' ' -k2 > "$tmpfile"
+
+total=0
+outdated=0
+errors=0
+
+if $json_output; then
+ printf '{\n "outdated": ['
+ first=true
+fi
+
+while IFS=' ' read -r repo pkgname dir; do
+ curver=$(grep "^version=" "$dir/abuild" | awk -F= '{print $2}')
+ [ -n "$curver" ] || continue
+
+ # build repology lookup name from the directory name
+ repology_name="$pkgname"
+ case "$pkgname" in
+ python-*) repology_name="python:${pkgname#python-}";;
+ perl-*) repology_name="perl:${pkgname#perl-}";;
+ esac
+
+ # per-package repology name override
+ if [ -s "$dir/outdated" ]; then
+ display_name=$(head -n1 "$dir/outdated")
+ repology_name="$display_name"
+ else
+ display_name="$pkgname"
+ fi
+
+ if ! $quiet; then
+ printf ' checking %s/%s ...\r' "$repo" "$display_name" >&2
+ fi
+
+ newver=$(fetch_version "$repology_name" 2>/dev/null || true)
+
+ if [ -z "$newver" ] || [ "$newver" = "-" ]; then
+ if $json_output; then
+ $first || printf ','
+ printf '\n {"repo":"%s","name":"%s","current":"%s","status":"error"}' \
+ "$repo" "$display_name" "$curver"
+ first=false
+ else
+ printf '%-12s %-32s %-12s %s\n' "[$repo]" "$display_name" "$curver" "(repology lookup failed)" >&2
+ fi
+ errors=$((errors + 1))
+ elif [ "$curver" != "$newver" ]; then
+ if $json_output; then
+ $first || printf ','
+ printf '\n {"repo":"%s","name":"%s","current":"%s","latest":"%s"}' \
+ "$repo" "$display_name" "$curver" "$newver"
+ first=false
+ else
+ printf '%-12s %-32s %-12s -> %s\n' "[$repo]" "$display_name" "$curver" "$newver"
+ fi
+ outdated=$((outdated + 1))
+ fi
+ total=$((total + 1))
+done < "$tmpfile"
+
+if $json_output; then
+ printf '\n ]'
+ if [ "$errors" -gt 0 ] || [ "$outdated" -gt 0 ]; then
+ printf ',\n "errors": %d,\n "outdated_count": %d' "$errors" "$outdated"
+ else
+ printf ',\n "errors": 0,\n "outdated_count": 0'
+ fi
+ printf ',\n "total": %d\n}\n' "$total"
+else
+ printf ' \033[0K' >&2
+ printf 'Done. %d packages checked, ' "$total" >&2
+ if [ "$outdated" -eq 0 ] && [ "$errors" -eq 0 ]; then
+ printf 'all up to date.\n' >&2
+ else
+ printf '%d outdated, %d lookup errors.\n' "$outdated" "$errors" >&2
+ fi
+fi