emacs-config/misc/config-publishing/check-package-updates.sh

69 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env sh
":"; exec emacs --quick --script "$0" -- "$@" # -*- mode: emacs-lisp; lexical-binding: t; -*-
(setq log-file (format "%s-log.txt" (file-name-base load-file-name)))
(load (expand-file-name "initialise.el" (file-name-directory load-file-name)) nil t)
(initialise)
;;; Generation of status badge
(defun gen-status-img (upgradeable total)
(let ((colour (pcase (/ (float upgradeable) total)
((pred (= 0.0)) "brightgreen")
((pred (> 0.05)) "green")
((pred (> 0.15)) "yellowgreen")
((pred (> 0.3)) "yellow")
((pred (> 0.6)) "orange")
(_ "red")))
(text (if (= 0 upgradeable)
(format "all %s up to date" total)
(format "%s/%s up to date" (- total upgradeable) total))))
(call-process
"wget"
nil nil nil
"-O"
"../pkg-status.svg"
(format "https://img.shields.io/badge/packages-%s-%s.svg?style=flat-square"
(url-hexify-string text) colour))
(publish "misc/pkg-status.svg")))
;;; Do it
(message "[34] Opening package file")
(with-current-buffer (find-file (expand-file-name "packages.el" config-root))
(message "[34] Checking for updates")
(setq package-upgrades (doom/bump-packages-in-buffer))
(goto-char (point-min))
(setq total-packages 0)
(while (search-forward "(package!" nil t)
(setq total-packages (1+ total-packages)))
(kill-buffer (current-buffer)))
(message "[32] %s total packages" total-packages)
(setq upgradeable-packages
(if (string= "No packages to update" package-upgrades) 0
(1- (length (split-string package-upgrades "\n")))))
(message "[33] %s packages upgradable" upgradeable-packages)
(gen-status-img upgradeable-packages total-packages)
(when (> upgradeable-packages 0)
(write-region
(replace-regexp-in-string
"- \\[ *[0-9.s]+\\] " ""
(replace-regexp-in-string
"\033\\[0;90m" ""
(replace-regexp-in-string
"\\`.*\n" ""
package-upgrades)))
nil
(expand-file-name "misc/upgradable-packages.txt" config-root))
(publish "misc/upgradable-packages.txt"))
(setq inhibit-message t)
(kill-emacs exit-code)