-
-
Notifications
You must be signed in to change notification settings - Fork 14.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
vscode-extensions.ms-dotnettools.csharp: 2.39.29 -> 2.55.29
Also converted the dynamic info to a JSON file and implemented an update script to automatically update it. (cherry picked from commit 620b6a0)
- Loading branch information
1 parent
b58ffaf
commit 05be25a
Showing
3 changed files
with
240 additions
and
85 deletions.
There are no files selected for viewing
121 changes: 36 additions & 85 deletions
121
pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/default.nix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
46 changes: 46 additions & 0 deletions
46
pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/lockfile.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
{ | ||
"version": "2.55.29", | ||
"linux-x64": { | ||
"hash": "sha256-3RQk5VNrI2sSUBCBfRTEsxjLqZkpoTELt/v+CIp94QU=", | ||
"binaries": [ | ||
".debugger/createdump", | ||
".debugger/vsdbg", | ||
".debugger/vsdbg-ui", | ||
".razor/rzls", | ||
".roslyn/Microsoft.CodeAnalysis.LanguageServer" | ||
] | ||
}, | ||
"linux-arm64": { | ||
"hash": "sha256-p8VbpeLtGDO3TKpjY9EuqDVyCDvZaQe9+KeAMTMulDc=", | ||
"binaries": [ | ||
".debugger/createdump", | ||
".debugger/vsdbg", | ||
".debugger/vsdbg-ui", | ||
".razor/rzls", | ||
".roslyn/Microsoft.CodeAnalysis.LanguageServer" | ||
] | ||
}, | ||
"darwin-x64": { | ||
"hash": "sha256-r85BNsxIXuQD20kjgqBvCLzTof4ExYDfbKG0zHaR86o=", | ||
"binaries": [ | ||
".debugger/x86_64/createdump", | ||
".debugger/x86_64/vsdbg", | ||
".debugger/x86_64/vsdbg-ui", | ||
".razor/rzls", | ||
".roslyn/Microsoft.CodeAnalysis.LanguageServer" | ||
] | ||
}, | ||
"darwin-arm64": { | ||
"hash": "sha256-p56EkUDxsukTx0FCCE2OrUBk3t2zj/kU6cdUVqdpfb8=", | ||
"binaries": [ | ||
".debugger/arm64/createdump", | ||
".debugger/arm64/vsdbg", | ||
".debugger/arm64/vsdbg-ui", | ||
".debugger/x86_64/createdump", | ||
".debugger/x86_64/vsdbg", | ||
".debugger/x86_64/vsdbg-ui", | ||
".razor/rzls", | ||
".roslyn/Microsoft.CodeAnalysis.LanguageServer" | ||
] | ||
} | ||
} |
158 changes: 158 additions & 0 deletions
158
pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/update.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
#!/usr/bin/env nix-shell | ||
#!nix-shell -I nixpkgs=./. -i bash -p curl coreutils jq nix unzip | ||
# shellcheck shell=bash | ||
set -euo pipefail | ||
shopt -s globstar | ||
shopt -s dotglob | ||
|
||
export LC_ALL=C | ||
|
||
PUBLISHER=ms-dotnettools | ||
EXTENSION=csharp | ||
LOCKFILE=pkgs/applications/editors/vscode/extensions/$PUBLISHER.$EXTENSION/lockfile.json | ||
|
||
response=$(curl -s 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery' \ | ||
-H 'accept: application/json;api-version=3.0-preview.1' \ | ||
-H 'content-type: application/json' \ | ||
--data-raw '{"filters":[{"criteria":[{"filterType":7,"value":"'"$PUBLISHER.$EXTENSION"'"}]}],"flags":16}') | ||
|
||
# Find the latest version compatible with stable vscode version | ||
latest_version=$(jq --raw-output ' | ||
.results[0].extensions[0].versions | ||
| map(select(has("properties"))) | ||
| map(select(.properties | map(select(.key == "Microsoft.VisualStudio.Code.Engine")) | .[0].value | test("\\^[0-9.]+$"))) | ||
| map(select(.properties | map(select(.key == "Microsoft.VisualStudio.Code.PreRelease")) | .[0].value != "true")) | ||
| .[0].version' <<<"$response") | ||
|
||
current_version=$(jq '.version' --raw-output <"$LOCKFILE") | ||
|
||
if [[ "$latest_version" == "$current_version" ]]; then | ||
echo "Package is up to date." >&2 | ||
exit 1 | ||
fi | ||
|
||
# Return success if the specified file is an ELF object. | ||
isELF() { | ||
local fn="$1" | ||
local fd | ||
local magic | ||
exec {fd}<"$fn" | ||
read -r -n 4 -u "$fd" magic | ||
exec {fd}<&- | ||
if [ "$magic" = $'\177ELF' ]; then return 0; else return 1; fi | ||
} | ||
|
||
# Return success if the specified file is a Mach-O object. | ||
isMachO() { | ||
local fn="$1" | ||
local fd | ||
local magic | ||
exec {fd}<"$fn" | ||
read -r -n 4 -u "$fd" magic | ||
exec {fd}<&- | ||
|
||
# nix uses 'declare -F' in get-env.sh to retrieve the loaded functions. | ||
# If we use the $'string' syntax instead of 'echo -ne' then 'declare' will print the raw characters and break nix. | ||
# See https://github.com/NixOS/nixpkgs/pull/138334 and https://github.com/NixOS/nix/issues/5262. | ||
|
||
# https://opensource.apple.com/source/lldb/lldb-310.2.36/examples/python/mach_o.py.auto.html | ||
if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xcf") || "$magic" = $(echo -ne "\xcf\xfa\xed\xfe") ]]; then | ||
# MH_MAGIC_64 || MH_CIGAM_64 | ||
return 0 | ||
elif [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xce") || "$magic" = $(echo -ne "\xce\xfa\xed\xfe") ]]; then | ||
# MH_MAGIC || MH_CIGAM | ||
return 0 | ||
elif [[ "$magic" = $(echo -ne "\xca\xfe\xba\xbe") || "$magic" = $(echo -ne "\xbe\xba\xfe\xca") ]]; then | ||
# FAT_MAGIC || FAT_CIGAM | ||
return 0 | ||
else | ||
return 1 | ||
fi | ||
} | ||
|
||
getDownloadUrl() { | ||
nix-instantiate \ | ||
--eval \ | ||
--strict \ | ||
--json \ | ||
pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix \ | ||
--attr url \ | ||
--argstr publisher $PUBLISHER \ | ||
--argstr name $EXTENSION \ | ||
--argstr version "$latest_version" \ | ||
--argstr arch "$1" | jq . --raw-output | ||
} | ||
|
||
TEMP=$(mktemp --directory --tmpdir) | ||
OUTPUT="$TEMP/lockfile.json" | ||
trap 'rm -r "$TEMP"' EXIT | ||
|
||
HASH= | ||
BINARIES=() | ||
fetchMarketplace() { | ||
arch="$1" | ||
|
||
echo " Downloading VSIX..." | ||
if ! curl -sLo "$TEMP/$arch".zip "$(getDownloadUrl "$arch")"; then | ||
echo " Failed to download extension for arch $arch" >&2 | ||
exit 1 | ||
fi | ||
|
||
HASH=$(nix hash file --type sha256 --sri "$TEMP/$arch".zip) | ||
BINARIES=() | ||
|
||
echo " Extracting VSIX..." | ||
mkdir "$TEMP/$arch" | ||
if ! unzip "$TEMP/$arch".zip -d "$TEMP/$arch" >/dev/null; then | ||
echo " Failed to unzip extension for arch $arch" >&2 | ||
file "$TEMP/$arch".zip >&2 | ||
exit 1 | ||
fi | ||
|
||
echo " Listing binaries..." | ||
for file in "$TEMP/$arch"/**/*; do | ||
if [[ ! -f "$file" || "$file" == *.so || "$file" == *.dylib ]] || | ||
(! isELF "$file" && ! isMachO "$file"); then | ||
continue | ||
fi | ||
|
||
echo " FOUND: ${file#"$TEMP/$arch/extension/"}" | ||
BINARIES+=("${file#"$TEMP/$arch/extension/"}") | ||
done | ||
rm -r "${TEMP:?}/$arch" | ||
} | ||
|
||
cat >"$OUTPUT" <<EOF | ||
{ | ||
"version": "$latest_version", | ||
EOF | ||
firstArch=true | ||
for arch in linux-x64 linux-arm64 darwin-x64 darwin-arm64; do | ||
if [ "$firstArch" = false ]; then | ||
echo -e ',' >>"$OUTPUT" | ||
fi | ||
firstArch=false | ||
|
||
echo "Getting data for $arch..." | ||
fetchMarketplace "$arch" | ||
|
||
cat >>"$OUTPUT" <<EOF | ||
"$arch": { | ||
"hash": "$HASH", | ||
"binaries": [ | ||
EOF | ||
|
||
firstBin=true | ||
for binary in "${BINARIES[@]}"; do | ||
if [ "$firstBin" = false ]; then | ||
echo -e ',' >>"$OUTPUT" | ||
fi | ||
firstBin=false | ||
|
||
echo -n " \"$binary\"" >>"$OUTPUT" | ||
done | ||
echo -ne '\n ]\n }' >>"$OUTPUT" | ||
done | ||
echo -e '\n}' >>"$OUTPUT" | ||
|
||
mv "$OUTPUT" "$LOCKFILE" |