1#! /usr/bin/env nix-shell
2#! nix-shell -i oil -p oil jq sd nix-prefetch-github ripgrep moreutils
3
4# TODO set to `verbose` or `extdebug` once implemented in oil
5shopt --set xtrace
6# we need failures inside of command subs to get the correct dependency sha256
7shopt --unset inherit_errexit
8
9const directory = $(dirname $0 | xargs realpath)
10const owner = "LemmyNet"
11const ui_repo = "lemmy-ui"
12const server_repo = "lemmy"
13const latest_rev = $(curl -q https://api.github.com/repos/${owner}/${server_repo}/releases/latest | \
14 jq -r '.tag_name')
15const latest_version = $(echo $latest_rev)
16const current_version = $(jq -r '.version' $directory/pin.json)
17if (latest_version === $current_version) {
18 echo "lemmy is already up-to-date"
19 return 0
20} else {
21 # for some strange reason, hydra fails on reading upstream package.json directly
22 const source = "https://raw.githubusercontent.com/$owner/$ui_repo/$latest_version"
23 const package_json = $(curl -qf $source/package.json)
24 echo $package_json > $directory/package.json
25
26 const server_tarball_meta = $(nix-prefetch-github $owner $server_repo --rev $latest_rev)
27 const server_tarball_hash = "sha256-$(echo $server_tarball_meta | jq -r '.sha256')"
28 const ui_tarball_meta = $(nix-prefetch-github $owner $ui_repo --rev $latest_rev)
29 const ui_tarball_hash = "sha256-$(echo $ui_tarball_meta | jq -r '.sha256')"
30
31 jq ".version = \"$latest_version\" | \
32 .\"serverSha256\" = \"$server_tarball_hash\" | \
33 .\"uiSha256\" = \"$ui_tarball_hash\" | \
34 .\"serverCargoSha256\" = \"\" | \
35 .\"uiYarnDepsSha256\" = \"\"" $directory/pin.json | sponge $directory/pin.json
36
37 const new_cargo_sha256 = $(nix-build -A lemmy-server 2>&1 | \
38 tail -n 2 | \
39 head -n 1 | \
40 sd '\s+got:\s+' '')
41
42 const new_offline_cache_sha256 = $(nix-build -A lemmy-ui 2>&1 | \
43 tail -n 2 | \
44 head -n 1 | \
45 sd '\s+got:\s+' '')
46
47 jq ".\"serverCargoSha256\" = \"$new_cargo_sha256\" | \
48 .\"uiYarnDepsSha256\" = \"$new_offline_cache_sha256\"" \
49 $directory/pin.json | sponge $directory/pin.json
50}
51