80 lines
2.1 KiB
Plaintext
80 lines
2.1 KiB
Plaintext
|
#!/usr/bin/env nix-shell
|
||
|
#!nix-shell --packages curl
|
||
|
#!nix-shell --packages jq
|
||
|
#!nix-shell --packages parallel
|
||
|
#!nix-shell -i bash
|
||
|
|
||
|
# Exit immediately if a command exits with a non-zero status.
|
||
|
# Exit when a producer fails in a pipe
|
||
|
# Treat undefined variable references as errors
|
||
|
set -e -o pipefail -u
|
||
|
|
||
|
# Check if working directory is (probably) right
|
||
|
test "./update" = $0 || {
|
||
|
echo "The working directory ought to be the same is the update script location. Please invoke as ./update" 1>&2
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
# Create temporary directory with automatic cleanup
|
||
|
readonly MY_TMP="$(mktemp -d)"
|
||
|
cleanup () {
|
||
|
rm -rf "$MY_TMP"
|
||
|
}
|
||
|
trap cleanup EXIT
|
||
|
|
||
|
# stdout: file containing release info and a convenient placeholder
|
||
|
# for the sha256 attribute
|
||
|
getRelease () {
|
||
|
local owner="$1"
|
||
|
local repo="$2"
|
||
|
local out="$MY_TMP/$owner--$repo-release"
|
||
|
curl -fSs https://api.github.com/repos/"$owner"/"$repo"/releases/latest \
|
||
|
| jq '{ version: .name, url: .tarball_url, sha256: "__SHA256__" }' \
|
||
|
> "$out"
|
||
|
echo "$out"
|
||
|
}
|
||
|
|
||
|
# 'getters' for the release info file
|
||
|
|
||
|
# stdout: unquoted tarball url
|
||
|
releaseUrl () {
|
||
|
local file="$1"
|
||
|
jq -r '.url' <"$file"
|
||
|
}
|
||
|
|
||
|
# stdout: unquoted version
|
||
|
releaseVersion () {
|
||
|
local file="$1"
|
||
|
jq -r '.version' <"$file"
|
||
|
}
|
||
|
|
||
|
# Fetch release tarball and compute hash
|
||
|
# stdout: base32 sha256 to be used in fetchurl
|
||
|
getReleaseHash () {
|
||
|
local file="$1"
|
||
|
local name="$2"
|
||
|
nix-prefetch-url "$(releaseUrl "$file")" --name "$name-$(releaseVersion "$file").tar.gz"
|
||
|
}
|
||
|
|
||
|
# Write a release info file to release-info/$owner-$repo.json
|
||
|
updateRelease () {
|
||
|
local owner="$1"
|
||
|
local repo="$2"
|
||
|
local r="$(getRelease "$owner" "$repo")"
|
||
|
local hash="$(getReleaseHash "$r" "$repo")"
|
||
|
sed \
|
||
|
-e s/__SHA256__/"$hash"/\
|
||
|
<"$r" \
|
||
|
>"release-info/$owner-$repo.json"
|
||
|
}
|
||
|
|
||
|
updateRelease LanguageMachines frogdata
|
||
|
updateRelease LanguageMachines frog
|
||
|
updateRelease LanguageMachines libfolia
|
||
|
updateRelease LanguageMachines mbt
|
||
|
updateRelease LanguageMachines ticcutils
|
||
|
updateRelease LanguageMachines timbl
|
||
|
updateRelease LanguageMachines timblserver
|
||
|
updateRelease LanguageMachines ucto
|
||
|
updateRelease LanguageMachines uctodata
|