diff options
Diffstat (limited to 'pkgs/tools/admin/meshcentral/update.sh')
-rwxr-xr-x | pkgs/tools/admin/meshcentral/update.sh | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/pkgs/tools/admin/meshcentral/update.sh b/pkgs/tools/admin/meshcentral/update.sh new file mode 100755 index 00000000000..f7f12078372 --- /dev/null +++ b/pkgs/tools/admin/meshcentral/update.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env nix-shell +#! nix-shell -i bash -p nodejs yarn yarn2nix jq rsync common-updater-scripts moreutils + +set -exuo pipefail + +expr_dir=$(cd "$(dirname "$0")"; pwd) +tmp=$(mktemp -dt update-meshcentral.XXXXXX) + +npm show --json meshcentral > "$tmp/npm.json" +version=$(<"$tmp/npm.json" jq -r .version) +tarball=$(<"$tmp/npm.json" jq -r .dist.tarball) + +prefetch=$(nix-prefetch-url --unpack --print-path "$tarball" | tr '\n' ' ') +read -r hash storePath <<<"$prefetch" +cd "$tmp" +rsync -r --chmod=u=rwX "$storePath/" package/ +cd package + +# Very crude way of discovering optional dependencies. These are +# fetched at runtime by stock upstream, but we don't allow that kind +# of thing in nix :) +awk <meshcentral.js " + BEGIN { RS=\"[\n;]\" } + match(\$0, /(modules|passport) = (\[.*\])$/, a) { print a[2] } + match(\$0, /(modules|passport).push\(('[^']+')\)/, a) { print a[2] } +" | + tr \' \" | + jq --slurp '[if type == "array" then .[] else . end] | flatten' | + # And an equally crude way of adding them to package.json. We + # can't use yarn add here, because that will blow up on + # dependencies which don't support the current platform. Even with + # --optional. + jq --slurpfile package package.json \ + '(. | map(. | capture("(?<name>@?[^@]+)(@(?<version>.+))?") | { key: .name, value: (.version // "*")}) | from_entries) as $optionalDependencies | $package | .[] | .optionalDependencies |= . + $optionalDependencies' | + sponge package.json + +# Fetch all the optional dependencies, so we have them available in +# yarn.lock/yarn.nix +yarn install --ignore-scripts + +cp package.json "$expr_dir" +cp yarn.lock "$expr_dir/yarn.lock" +yarn2nix > "$expr_dir/yarn.nix" + +cd "$expr_dir/../../../.." +update-source-version meshcentral "$version" "$hash" "$tarball" + +# Only clean up if everything worked +cd / +rm -rf "$tmp" |