#!/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 @?[^@]+)(@(?.+))?") | { 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"