aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/misc/vscode-extensions/ms-dotnettools-csharp/update-bin-srcs-lib.sh
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/misc/vscode-extensions/ms-dotnettools-csharp/update-bin-srcs-lib.sh')
-rwxr-xr-xinfra/libkookie/nixpkgs/pkgs/misc/vscode-extensions/ms-dotnettools-csharp/update-bin-srcs-lib.sh154
1 files changed, 154 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/misc/vscode-extensions/ms-dotnettools-csharp/update-bin-srcs-lib.sh b/infra/libkookie/nixpkgs/pkgs/misc/vscode-extensions/ms-dotnettools-csharp/update-bin-srcs-lib.sh
new file mode 100755
index 000000000000..ad494a37908a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/misc/vscode-extensions/ms-dotnettools-csharp/update-bin-srcs-lib.sh
@@ -0,0 +1,154 @@
+#!/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'
+.runtimeDependencies \
+| map(select(.platforms[] | in({"linux": null}))) \
+| map(select(.architectures[] | in({"x86_64": null}))) \
+| .[] | {(.id + "-" + (.architectures[0]) + "-" + (.platforms[0])): \
+{installPath, binaries, urls: [.url, .fallbackUrl]}}
+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'
+}