From 98cb2e2a63e446a085b8eed436a16dba09109e1d Mon Sep 17 00:00:00 2001 From: Connor Olding Date: Tue, 4 Oct 2022 19:12:49 -0700 Subject: [PATCH] meta: add a script to auto-update `*_COMMIT` and `*_SHA256` envs --- TODO.md | 1 - auto-update | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100755 auto-update diff --git a/TODO.md b/TODO.md index 5a1f7c4..872dc3e 100644 --- a/TODO.md +++ b/TODO.md @@ -4,7 +4,6 @@ remove elements from this list as you see fit. * meta: do build virtualization without Docker, a la Void Linux * meta: describe Dockerfile gotchas and whatnot -* meta: add a script to auto-update `*_COMMIT` and `*_SHA256` envs * meta: create a custom preprocessor to generate shell scripts * takes a sane syntax and transforms it into my fucked-up code style with `&&`s * meta: generate Dockerfiles too diff --git a/auto-update b/auto-update new file mode 100755 index 0000000..9278302 --- /dev/null +++ b/auto-update @@ -0,0 +1,48 @@ +#!/usr/bin/env sh + +note() { + local IFS=' ' + printf '\033[1m%s\033[0m\n' "$*" >&2 +} + +investigate() { + url="${1?huh}" + [ "${url#"https://github.com/"}" = "$url" ] \ + && re='/commit/' || re='/spoofed_commit_check/' + curl $curlflags "$url" | grep -F "$re" | grep -Eo '[0-9a-f]{40}' +} + +set -- \ +cosmo COSMO_COMMIT https://github.com/jart/cosmopolitan \ +cosmo-kuroko KUROKO_COMMIT https://github.com/kuroko-lang/kuroko \ +cosmo-muon MUON_COMMIT https://git.sr.ht/~lattis/muon \ +cosmo-perl PERL_COMMIT https://github.com/G4Vi/perl5/tree/cosmo \ +cosmo-python PYTHON_COMMIT https://github.com/ahgamut/cpython/tree/cosmo_py311 \ +cosmo-yices KISSAT_COMMIT https://github.com/BrunoDutertre/kissat \ +cosmo-yices YICES_COMMIT https://github.com/SRI-CSL/yices2 \ +; + +me="$(readlink -f "$0")" && cd "${me%/*}" || exit +curlflags="-L --no-progress-meter" +any=0 + +while [ $# != 0 ]; do + dir="$1" tag="$2" url="$3" + shift && shift && shift || { note 'not a multiple of 3!'; exit 255 ;} + ours="$(grep -F "$tag"= "$dir/Dockerfile" | grep -Eo '[0-9a-f]{40}' | head -n1)" + theirs="$(investigate "$url" | head -n1)" + if [ ${#theirs} == 0 ]; then + note "failed to retrieve update for $tag" + elif [ "$ours" != "$theirs" ]; then + any=1 + note "updating $dir" + other="${tag%_COMMIT}_SHA256" + tgz="${url%/}" + tgz="${tgz%%/tree/*}" + tgz="$tgz/archive/$theirs.tar.gz" + sum="$(curl $curlflags "$tgz" | sha256sum - | awk '{print $1}')" + notwa-util/shed "$dir/Dockerfile" "s/$ours/$theirs/g" + notwa-util/shed "$dir/Dockerfile" "s/$other=.*/$other=$sum/g" + fi +done +[ $any = 1 ] || note "no new updates"