2020-10-10 23:46:58 +02:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
prefetchExtensionZip() {
|
|
|
|
declare publisher="${1?}"
|
|
|
|
declare name="${2?}"
|
|
|
|
declare version="${3?}"
|
|
|
|
|
|
|
|
1>&2 echo
|
|
|
|
1>&2 echo "------------- Downloading extension ---------------"
|
|
|
|
|
|
|
|
declare extZipStoreName="${publisher}-${name}.zip"
|
|
|
|
declare extUrl="https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publisher}/extension/${name}/${version}/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage";
|
|
|
|
1>&2 echo "extUrl='$extUrl'"
|
|
|
|
declare nixPrefetchArgs=( --name "$extZipStoreName" --print-path "$extUrl" )
|
|
|
|
|
|
|
|
1>&2 printf "$ nix-prefetch-url"
|
|
|
|
1>&2 printf " %q" "${nixPrefetchArgs[@]}"
|
|
|
|
1>&2 printf " 2> /dev/null\n"
|
|
|
|
declare zipShaWStorePath
|
|
|
|
zipShaWStorePath=$(nix-prefetch-url "${nixPrefetchArgs[@]}" 2> /dev/null)
|
|
|
|
|
|
|
|
1>&2 echo "zipShaWStorePath='$zipShaWStorePath'"
|
|
|
|
echo "$zipShaWStorePath"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
prefetchExtensionUnpacked() {
|
|
|
|
declare publisher="${1?}"
|
|
|
|
declare name="${2?}"
|
|
|
|
declare version="${3?}"
|
|
|
|
|
|
|
|
declare zipShaWStorePath
|
|
|
|
zipShaWStorePath="$(prefetchExtensionZip "$publisher" "$name" "$version")"
|
|
|
|
|
|
|
|
declare zipStorePath
|
|
|
|
zipStorePath="$(echo "$zipShaWStorePath" | tail -n1)"
|
|
|
|
1>&2 echo "zipStorePath='$zipStorePath'"
|
|
|
|
|
|
|
|
function rm_tmpdir() {
|
|
|
|
1>&2 printf "rm -rf -- %q\n" "$tmpDir"
|
|
|
|
rm -rf -- "$tmpDir"
|
|
|
|
unset tmpDir
|
|
|
|
trap - INT TERM HUP EXIT
|
|
|
|
}
|
|
|
|
function make_trapped_tmpdir() {
|
|
|
|
tmpDir=$(mktemp -d)
|
|
|
|
trap rm_tmpdir INT TERM HUP EXIT
|
|
|
|
}
|
|
|
|
|
|
|
|
1>&2 echo
|
|
|
|
1>&2 echo "------------- Unpacking extension ---------------"
|
|
|
|
|
|
|
|
make_trapped_tmpdir
|
|
|
|
declare unzipArgs=( -q -d "$tmpDir" "$zipStorePath" )
|
|
|
|
1>&2 printf "$ unzip"
|
|
|
|
1>&2 printf " %q" "${unzipArgs[@]}"
|
|
|
|
1>&2 printf "\n"
|
|
|
|
unzip "${unzipArgs[@]}"
|
|
|
|
|
|
|
|
declare unpackedStoreName="${publisher}-${name}"
|
|
|
|
|
|
|
|
declare unpackedStorePath
|
|
|
|
unpackedStorePath="$(nix add-to-store -n "$unpackedStoreName" "$tmpDir")"
|
|
|
|
declare unpackedSha256
|
|
|
|
unpackedSha256="$(nix hash-path --base32 --type sha256 "$unpackedStorePath")"
|
|
|
|
1>&2 echo "unpackedStorePath='$unpackedStorePath'"
|
|
|
|
1>&2 echo "unpackedSha256='$unpackedSha256'"
|
|
|
|
|
|
|
|
rm_tmpdir
|
|
|
|
|
|
|
|
echo "$unpackedSha256"
|
|
|
|
echo "$unpackedStorePath"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
prefetchExtensionJson() {
|
|
|
|
declare publisher="${1?}"
|
|
|
|
declare name="${2?}"
|
|
|
|
declare version="${3?}"
|
|
|
|
|
|
|
|
declare unpackedShaWStorePath
|
|
|
|
unpackedShaWStorePath="$(prefetchExtensionUnpacked "$publisher" "$name" "$version")"
|
|
|
|
|
|
|
|
declare unpackedStorePath
|
|
|
|
unpackedStorePath="$(echo "$unpackedShaWStorePath" | tail -n1)"
|
|
|
|
1>&2 echo "unpackedStorePath='$unpackedStorePath'"
|
|
|
|
|
|
|
|
declare jsonShaWStorePath
|
|
|
|
jsonShaWStorePath=$(nix-prefetch-url --print-path "file://${unpackedStorePath}/extension/package.json" 2> /dev/null)
|
|
|
|
|
|
|
|
1>&2 echo "jsonShaWStorePath='$jsonShaWStorePath'"
|
|
|
|
echo "$jsonShaWStorePath"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
formatExtRuntimeDeps() {
|
|
|
|
declare publisher="${1?}"
|
|
|
|
declare name="${2?}"
|
|
|
|
declare version="${3?}"
|
|
|
|
|
|
|
|
declare jsonShaWStorePath
|
|
|
|
jsonShaWStorePath="$(prefetchExtensionJson "$publisher" "$name" "$version")"
|
|
|
|
|
|
|
|
declare jsonStorePath
|
|
|
|
jsonStorePath="$(echo "$jsonShaWStorePath" | tail -n1)"
|
|
|
|
1>&2 echo "jsonStorePath='$jsonStorePath'"
|
|
|
|
|
|
|
|
declare jqQuery
|
|
|
|
jqQuery=$(cat <<'EOF'
|
2021-10-05 04:58:57 +02:00
|
|
|
.runtimeDependencies
|
|
|
|
| map(select(.platforms[] | in({"linux": null})))
|
|
|
|
| map(select(.architectures[] | in({"x86_64": null})))
|
|
|
|
| .[] | {
|
|
|
|
(.id + "__" + (.architectures[0]) + "-" + (.platforms[0])):
|
|
|
|
{installPath, binaries, urls: [.url, .fallbackUrl] | map(select(. != null))}
|
|
|
|
}
|
2020-10-10 23:46:58 +02:00
|
|
|
EOF
|
|
|
|
)
|
|
|
|
|
|
|
|
1>&2 printf "$ cat %q | jq '%s'\n" "$jsonStorePath" "$jqQuery"
|
|
|
|
cat "$jsonStorePath" | jq "$jqQuery"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
computeExtRtDepChecksum() {
|
|
|
|
declare rtDepJsonObject="${1?}"
|
|
|
|
declare url
|
|
|
|
url="$(echo "$rtDepJsonObject" | jq -j '.[].urls[0]')"
|
|
|
|
declare sha256
|
|
|
|
1>&2 printf "$ nix-prefetch-url '%s'\n" "$url"
|
|
|
|
sha256="$(nix-prefetch-url "$url")"
|
|
|
|
1>&2 echo "$sha256"
|
|
|
|
echo "$sha256"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
computeAndAttachExtRtDepsChecksums() {
|
|
|
|
while read -r rtDepJsonObject; do
|
|
|
|
declare sha256
|
|
|
|
sha256="$(computeExtRtDepChecksum "$rtDepJsonObject")"
|
|
|
|
echo "$rtDepJsonObject" | jq --arg sha256 "$sha256" '.[].sha256 = $sha256'
|
|
|
|
done < <(cat - | jq -c '.')
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
jqStreamToJson() {
|
|
|
|
cat - | jq --slurp '. | add'
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
jsonToNix() {
|
|
|
|
# TODO: Replacing this non functional stuff with a proper json to nix
|
|
|
|
# implementation would allow us to produce a 'rt-deps-bin-srcs.nix' file instead.
|
|
|
|
false
|
|
|
|
cat - | sed -E -e 's/": /" = /g' -e 's/,$/;/g' -e 's/ }$/ };/g' -e 's/ ]$/ ];/g'
|
|
|
|
}
|