nixpkgs/pkgs/development/libraries/languagemachines/update
2017-08-14 12:57:54 +02:00

80 lines
2.1 KiB
Plaintext
Executable file

#!/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