nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
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 "$@"