nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at 22.05 118 lines 3.4 kB view raw
1#!/usr/bin/env nix-shell 2#!nix-shell -i bash -p curl jq 3 4set -eu 5 6release () { 7 local content="$1" 8 local version="$2" 9 10 jq -r '.releases[] | select(."release-version" == "'"$version"'")' <<< "$content" 11} 12 13release_files () { 14 local release="$1" 15 local type="$2" 16 17 jq -r '[."'"$type"'".files[] | select(.name | test("^.*.tar.gz$"))]' <<< "$release" 18} 19 20release_platform_attr () { 21 local release_files="$1" 22 local platform="$2" 23 local attr="$3" 24 25 jq -r '.[] | select(.rid == "'"$platform"'") | ."'"$attr"'"' <<< "$release_files" 26} 27 28platform_sources () { 29 local release_files="$1" 30 local platforms=( \ 31 "x86_64-linux linux-x64" \ 32 "aarch64-linux linux-arm64" \ 33 "x86_64-darwin osx-x64" \ 34 "aarch64-darwin osx-arm64" \ 35 ) 36 37 echo "srcs = {" 38 for kv in "${platforms[@]}"; do 39 local nix_platform=${kv%% *} 40 local ms_platform=${kv##* } 41 42 local url=$(release_platform_attr "$release_files" "$ms_platform" url) 43 local hash=$(release_platform_attr "$release_files" "$ms_platform" hash) 44 45 [[ -z "$url" || -z "$hash" ]] && continue 46 echo " $nix_platform = { 47 url = \"$url\"; 48 sha512 = \"$hash\"; 49 }; " 50 done 51 echo " };" 52} 53 54main () { 55 pname=$(basename "$0") 56 if [[ ! "$*" =~ ^.*[0-9]{1,}\.[0-9]{1,}.*$ ]]; then 57 echo "Usage: $pname [sem-versions] 58Get updated dotnet src (platform - url & sha512) expressions for specified versions 59 60Examples: 61 $pname 3.1.21 5.0.12 - specific x.y.z versions 62 $pname 3.1 5.0 6.0 - latest x.y versions 63" >&2 64 exit 1 65 fi 66 67 for sem_version in "$@"; do 68 patch_specified=false 69 if [[ "$sem_version" =~ ^[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}$ ]]; then 70 patch_specified=true 71 elif [[ ! "$sem_version" =~ ^[0-9]{1,}\.[0-9]{1,}$ ]]; then 72 continue 73 fi 74 75 major_minor=$(sed 's/^\([0-9]*\.[0-9]*\).*$/\1/' <<< "$sem_version") 76 content=$(curl -sL https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/"$major_minor"/releases.json) 77 major_minor_patch=$([ "$patch_specified" == true ] && echo "$sem_version" || jq -r '."latest-release"' <<< "$content") 78 79 release_content=$(release "$content" "$major_minor_patch") 80 aspnetcore_version=$(jq -r '."aspnetcore-runtime".version' <<< "$release_content") 81 runtime_version=$(jq -r '.runtime.version' <<< "$release_content") 82 sdk_version=$(jq -r '.sdk.version' <<< "$release_content") 83 84 aspnetcore_files="$(release_files "$release_content" "aspnetcore-runtime")" 85 runtime_files="$(release_files "$release_content" "runtime")" 86 sdk_files="$(release_files "$release_content" "sdk")" 87 if [ $major_minor = "3.1" ]; then 88 icu_attr="icu = icu70;" 89 else 90 icu_attr="inherit icu;" 91 fi 92 93 major_minor_underscore=${major_minor/./_} 94 channel_version=$(jq -r '."channel-version"' <<< "$content") 95 support_phase=$(jq -r '."support-phase"' <<< "$content") 96 echo " 97 # v$channel_version ($support_phase) 98 aspnetcore_$major_minor_underscore = buildAspNetCore { 99 $icu_attr 100 version = \"${aspnetcore_version}\"; 101 $(platform_sources "$aspnetcore_files") 102 }; 103 104 runtime_$major_minor_underscore = buildNetRuntime { 105 $icu_attr 106 version = \"${runtime_version}\"; 107 $(platform_sources "$runtime_files") 108 }; 109 110 sdk_$major_minor_underscore = buildNetSdk { 111 $icu_attr 112 version = \"${sdk_version}\"; 113 $(platform_sources "$sdk_files") 114 }; " 115 done 116} 117 118main "$@"