vscode-extensions.ms-dotnettools.csdevkit: 1.16.6 -> 1.18.23 (#397204)
This commit is contained in:
@@ -10,30 +10,33 @@
|
||||
libxml2,
|
||||
}:
|
||||
let
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
inherit (vscode-utils) buildVscodeMarketplaceExtension;
|
||||
|
||||
lockfile = lib.importJSON ./lockfile.json;
|
||||
extInfo =
|
||||
(arch: {
|
||||
inherit arch;
|
||||
inherit (lockfile.${arch}) hash binaries;
|
||||
})
|
||||
(
|
||||
{
|
||||
x86_64-linux = "linux-x64";
|
||||
aarch64-linux = "linux-arm64";
|
||||
x86_64-darwin = "darwin-x64";
|
||||
aarch64-darwin = "darwin-arm64";
|
||||
}
|
||||
.${system} or (throw "Unsupported system: ${system}")
|
||||
);
|
||||
extInfo = (
|
||||
{
|
||||
x86_64-linux = {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-5B2LAV5azD1mGDFWnxIOYjyyJMXxqxyL5qP0zs6jWgs=";
|
||||
};
|
||||
aarch64-linux = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-6tmHa8XbuNLheUzY8pr6oEJlkUJpeCeT3O7xfo2Iqls=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-KRJ148+N3Hzht1GgnO0s5Mv27q+onPyZlY9myXw3zjg=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-vmtE6oeLs1B9s69yaOHASdFKznV1p3v+SsJUAJrwUrU=";
|
||||
};
|
||||
}
|
||||
.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}")
|
||||
);
|
||||
in
|
||||
buildVscodeMarketplaceExtension {
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "csdevkit";
|
||||
publisher = "ms-dotnettools";
|
||||
inherit (lockfile) version;
|
||||
version = "1.18.23";
|
||||
inherit (extInfo) hash arch;
|
||||
};
|
||||
sourceRoot = "extension"; # This has more than one folder.
|
||||
@@ -56,9 +59,23 @@ buildVscodeMarketplaceExtension {
|
||||
|
||||
substituteInPlace dist/extension.js \
|
||||
--replace-fail 'e.extensionPath,"cache"' 'require("os").tmpdir(),"'"$ext_unique_id"'"' \
|
||||
--replace-fail 't.setExecuteBit=async function(e){if("win32"!==process.platform){const t=o.join(e[a.SERVICEHUB_CONTROLLER_COMPONENT_NAME],"Microsoft.ServiceHub.Controller"),r=o.join(e[a.SERVICEHUB_HOST_COMPONENT_NAME],(0,a.getServiceHubHostEntrypointName)()),n=[(0,a.getServerPath)(e),t,r,(0,c.getReliabilityMonitorPath)(e)];await Promise.all(n.map((e=>(0,i.chmod)(e,"0755"))))}}' 't.setExecuteBit=async function(e){}'
|
||||
--replace-fail 't.setExecuteBit=async function(e){if("win32"!==process.platform){const t=i.join(e[a.SERVICEHUB_CONTROLLER_COMPONENT_NAME],"Microsoft.VisualStudio.Code.ServiceController"),r=i.join(e[a.SERVICEHUB_HOST_COMPONENT_NAME],(0,a.getServiceHubHostEntrypointName)()),n=[(0,a.getServerPath)(e),t,r,(0,c.getReliabilityMonitorPath)(e)];await Promise.all(n.map((e=>(0,o.chmod)(e,"0755"))))}}' 't.setExecuteBit=async function(e){}'
|
||||
'';
|
||||
|
||||
chmod +x ${lib.escapeShellArgs extInfo.binaries}
|
||||
preFixup = ''
|
||||
(
|
||||
shopt -s globstar
|
||||
shopt -s dotglob
|
||||
for file in "$out"/**/*; do
|
||||
if [[ ! -f "$file" || "$file" == *.so || "$file" == *.dylib ]] ||
|
||||
(! isELF "$file" && ! isMachO "$file"); then
|
||||
continue
|
||||
fi
|
||||
|
||||
echo Making "$file" executable...
|
||||
chmod +x "$file"
|
||||
done
|
||||
)
|
||||
'';
|
||||
|
||||
passthru.updateScript = ./update.sh;
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"version": "1.16.6",
|
||||
"linux-x64": {
|
||||
"hash": "sha256-/ONaevRlpGc4xaYr9vV8maZUP3HbjmgUk/AbXAJM4tg=",
|
||||
"binaries": [
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/servicehub-controller-net60.linux-x64/Microsoft.ServiceHub.Controller",
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/visualstudio-code-servicehost.linux-x64/Microsoft.VisualStudio.Code.ServiceHost",
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/visualstudio-reliability-monitor.linux-x64/Microsoft.VisualStudio.Reliability.Monitor",
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/visualstudio-server.linux-x64/Microsoft.VisualStudio.Code.Server"
|
||||
]
|
||||
},
|
||||
"linux-arm64": {
|
||||
"hash": "sha256-yhzozbnTsAddbx0Hior/DnN+vjRFWtIW8Z4zu1xfrhY=",
|
||||
"binaries": [
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/servicehub-controller-net60.linux-arm64/Microsoft.ServiceHub.Controller",
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/visualstudio-code-servicehost.linux-arm64/Microsoft.VisualStudio.Code.ServiceHost",
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/visualstudio-reliability-monitor.linux-arm64/Microsoft.VisualStudio.Reliability.Monitor",
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/visualstudio-server.linux-arm64/Microsoft.VisualStudio.Code.Server"
|
||||
]
|
||||
},
|
||||
"darwin-x64": {
|
||||
"hash": "sha256-PZwhzd9yVAJiVz5g7ogICUIgwJvS2MyGQMZbNN+7QRM=",
|
||||
"binaries": [
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/servicehub-controller-net60.darwin-x64/Microsoft.ServiceHub.Controller",
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/visualstudio-code-servicehost.darwin-x64/Microsoft.VisualStudio.Code.ServiceHost",
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/visualstudio-reliability-monitor.darwin-x64/Microsoft.VisualStudio.Reliability.Monitor",
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/visualstudio-server.darwin-x64/Microsoft.VisualStudio.Code.Server"
|
||||
]
|
||||
},
|
||||
"darwin-arm64": {
|
||||
"hash": "sha256-iR0jJnkcA12+CJUI0ECrRSR2+j2emtfmLt2Uz4ke7YY=",
|
||||
"binaries": [
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/servicehub-controller-net60.darwin-arm64/Microsoft.ServiceHub.Controller",
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/visualstudio-code-servicehost.darwin-arm64/Microsoft.VisualStudio.Code.ServiceHost",
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/visualstudio-reliability-monitor.darwin-arm64/Microsoft.VisualStudio.Reliability.Monitor",
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/visualstudio-server.darwin-arm64/Microsoft.VisualStudio.Code.Server"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,12 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -I nixpkgs=./. -i bash -p curl coreutils jq nix unzip
|
||||
#!nix-shell -I nixpkgs=./. -i bash -p curl jq nix common-updater-scripts
|
||||
# shellcheck shell=bash
|
||||
set -euo pipefail
|
||||
shopt -s globstar
|
||||
|
||||
export LC_ALL=C
|
||||
|
||||
PUBLISHER=ms-dotnettools
|
||||
EXTENSION=csdevkit
|
||||
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' \
|
||||
@@ -23,58 +21,12 @@ latest_version=$(jq --raw-output '
|
||||
| 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 \
|
||||
'pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix' \
|
||||
--attr url \
|
||||
--argstr publisher $PUBLISHER \
|
||||
--argstr name $EXTENSION \
|
||||
@@ -82,76 +34,13 @@ getDownloadUrl() {
|
||||
--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"
|
||||
update_hash() {
|
||||
local hash
|
||||
hash=$(nix hash convert --hash-algo sha256 "$(nix-prefetch-url --type sha256 "$(getDownloadUrl "$2")")")
|
||||
update-source-version vscode-extensions.$PUBLISHER.$EXTENSION "$latest_version" "$hash" --system="$1" --ignore-same-version
|
||||
}
|
||||
|
||||
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"
|
||||
update_hash x86_64-linux linux-x64
|
||||
update_hash aarch64-linux linux-arm64
|
||||
update_hash x86_64-darwin darwin-x64
|
||||
update_hash aarch64-darwin darwin-arm64
|
||||
|
||||
Reference in New Issue
Block a user