50 lines
1.5 KiB
Bash
Executable file
50 lines
1.5 KiB
Bash
Executable file
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i bash -p curl git gnugrep nix
|
|
|
|
set -euo pipefail
|
|
|
|
nixfile='default.nix'
|
|
release_url='https://download.savannah.nongnu.org/releases/oath-toolkit/'
|
|
attr='oath-toolkit'
|
|
command='oathtool --version'
|
|
|
|
color() {
|
|
printf '%s: \033[%sm%s\033[39m\n' "$0" "$1" "$2" >&2 || true
|
|
}
|
|
|
|
color 32 "downloading $release_url..."
|
|
if ! release_page=$(curl -Lf "$release_url"); then
|
|
color 31 "cannot download release page"
|
|
exit 1
|
|
fi
|
|
|
|
tarball_name=$(printf '%s\n' "$release_page" \
|
|
| grep -Po '(?<=href=").*?\.tar\.gz(?=")' \
|
|
| sort -n | tail -n1)
|
|
tarball_version="${tarball_name%.tar.*}"
|
|
tarball_version="${tarball_version##*-}"
|
|
tarball_url="mirror://savannah${release_url#https://*/releases}$tarball_name"
|
|
|
|
color 32 "nix-prefetch-url $tarball_url..."
|
|
if ! tarball_sha256=$(nix-prefetch-url --type sha256 "$tarball_url"); then
|
|
color 31 "cannot prefetch $tarball_url"
|
|
exit 1
|
|
fi
|
|
|
|
old_version=$(grep -Pom1 '(?<=version = ").*?(?=";)' "$nixfile")
|
|
|
|
version=$(printf 'version = "%s";\n' "$tarball_version")
|
|
sha256=$(printf 'sha256 = "%s";\n' "$tarball_sha256")
|
|
sed -e "s,version = .*,$version," -e "s,sha256 = .*,$sha256," -i "$nixfile"
|
|
|
|
if git diff --exit-code "$nixfile" > /dev/stderr; then
|
|
printf '\n' >&2 || true
|
|
color 32 "$tarball_version is up to date"
|
|
else
|
|
color 32 "running '$command' with nix-shell..."
|
|
nix-shell -p "callPackage ./$nixfile {}" --run "$command"
|
|
msg="$attr: $old_version -> $tarball_version"
|
|
printf '\n' >&2 || true
|
|
color 31 "$msg"
|
|
git commit -m "$msg" "$nixfile"
|
|
fi
|