2
2
import json
3
3
import urllib .request
4
4
import subprocess
5
- from string import Template
6
5
7
6
def fetch_latest_release (repo ):
8
7
url = f"https://api.github.com/repos/kcl-lang/{ repo } /releases/latest"
@@ -12,6 +11,7 @@ def fetch_latest_release(repo):
12
11
13
12
def calculate_hash (url ):
14
13
try :
14
+ print (f"Calculating hash for { url } " )
15
15
result = subprocess .run (['nix-prefetch-url' , url ], capture_output = True , text = True , check = True )
16
16
return result .stdout .strip ()
17
17
except subprocess .CalledProcessError as e :
@@ -21,35 +21,32 @@ def calculate_hash(url):
21
21
22
22
def generate_flake ():
23
23
with open ('flake.nix.tpl' , 'r' ) as f :
24
- template = Template ( f .read () )
24
+ template = f .read ()
25
25
26
26
kcl_version = fetch_latest_release ("kcl" )
27
27
cli_version = fetch_latest_release ("cli" )
28
28
29
29
substitutions = {
30
30
'kcl_version' : kcl_version ,
31
- 'cli_version' : cli_version
31
+ 'cli_version' : cli_version ,
32
+ 'cli_hash_x86_64_linux' : calculate_hash (f"https://github.com/kcl-lang/cli/releases/download/v{ cli_version } /kcl-v{ cli_version } -linux-amd64.tar.gz" ),
33
+ 'cli_hash_aarch64_linux' : calculate_hash (f"https://github.com/kcl-lang/cli/releases/download/v{ cli_version } /kcl-v{ cli_version } -linux-arm64.tar.gz" ),
34
+ 'cli_hash_x86_64_darwin' : calculate_hash (f"https://github.com/kcl-lang/cli/releases/download/v{ cli_version } /kcl-v{ cli_version } -darwin-amd64.tar.gz" ),
35
+ 'cli_hash_aarch64_darwin' : calculate_hash (f"https://github.com/kcl-lang/cli/releases/download/v{ cli_version } /kcl-v{ cli_version } -darwin-arm64.tar.gz" ),
36
+ 'language_server_hash_x86_64_linux' : calculate_hash (f"https://github.com/kcl-lang/kcl/releases/download/v{ kcl_version } /kclvm-v{ kcl_version } -linux-amd64.tar.gz" ),
37
+ 'language_server_hash_aarch64_linux' : calculate_hash (f"https://github.com/kcl-lang/kcl/releases/download/v{ kcl_version } /kclvm-v{ kcl_version } -linux-arm64.tar.gz" ),
38
+ 'language_server_hash_x86_64_darwin' : calculate_hash (f"https://github.com/kcl-lang/kcl/releases/download/v{ kcl_version } /kclvm-v{ kcl_version } -darwin-amd64.tar.gz" ),
39
+ 'language_server_hash_aarch64_darwin' : calculate_hash (f"https://github.com/kcl-lang/kcl/releases/download/v{ kcl_version } /kclvm-v{ kcl_version } -darwin-arm64.tar.gz" ),
32
40
}
33
41
34
- # CLI hashes
35
- substitutions ['cli_hash_x86_64_linux' ] = calculate_hash (f"https://github.com/kcl-lang/cli/releases/download/v{ cli_version } /kcl-v{ cli_version } -linux-amd64.tar.gz" )
36
- substitutions ['cli_hash_aarch64_linux' ] = calculate_hash (f"https://github.com/kcl-lang/cli/releases/download/v{ cli_version } /kcl-v{ cli_version } -linux-arm64.tar.gz" )
37
- substitutions ['cli_hash_x86_64_darwin' ] = calculate_hash (f"https://github.com/kcl-lang/cli/releases/download/v{ cli_version } /kcl-v{ cli_version } -darwin-amd64.tar.gz" )
38
- substitutions ['cli_hash_aarch64_darwin' ] = calculate_hash (f"https://github.com/kcl-lang/cli/releases/download/v{ cli_version } /kcl-v{ cli_version } -darwin-arm64.tar.gz" )
39
-
40
- # Language server hashes
41
- substitutions ['language_server_hash_x86_64_linux' ] = calculate_hash (f"https://github.com/kcl-lang/kcl/releases/download/v{ kcl_version } /kclvm-v{ kcl_version } -linux-amd64.tar.gz" )
42
- substitutions ['language_server_hash_aarch64_linux' ] = calculate_hash (f"https://github.com/kcl-lang/kcl/releases/download/v{ kcl_version } /kclvm-v{ kcl_version } -linux-arm64.tar.gz" )
43
- substitutions ['language_server_hash_x86_64_darwin' ] = calculate_hash (f"https://github.com/kcl-lang/kcl/releases/download/v{ kcl_version } /kclvm-v{ kcl_version } -darwin-amd64.tar.gz" )
44
- substitutions ['language_server_hash_aarch64_darwin' ] = calculate_hash (f"https://github.com/kcl-lang/kcl/releases/download/v{ kcl_version } /kclvm-v{ kcl_version } -darwin-arm64.tar.gz" )
42
+ for key , value in substitutions .items ():
43
+ template = template .replace (f'{{{{ { key } }}}}' , value )
45
44
46
45
print (f"substitutions: { substitutions } " )
47
- result = template .safe_substitute (substitutions )
48
-
49
46
warning_comment = "# WARNING: This file is automatically generated. Do not edit directly.\n "
50
47
warning_comment += "# Instead, modify the flake.nix.tpl file and run the update script.\n \n "
51
48
52
- new_content = warning_comment + result
49
+ new_content = warning_comment + template
53
50
54
51
content_changed = True
55
52
if os .path .exists ('flake.nix' ):
@@ -74,3 +71,4 @@ def generate_flake():
74
71
75
72
if __name__ == "__main__" :
76
73
generate_flake ()
74
+
0 commit comments