1
1
import logging
2
+ from pathlib import Path
3
+ import platform
2
4
import re
3
5
import sys
4
6
import nox
@@ -30,11 +32,34 @@ def __init__(self, session: nox.Session):
30
32
self .cargo_bins = cargo_bins
31
33
self .cargo_install_cmd : tuple [str , ...] = ("cargo" , "install" )
32
34
35
+ installed_path = Path ("~/.cargo/bin" )
36
+
33
37
if CARGO_BINSTALL in cargo_bins :
34
38
ci_logger .info (
35
39
"Found %s: %s" % (CARGO_BINSTALL , cargo_bins [CARGO_BINSTALL ])
36
40
)
37
- self .cargo_install_cmd = ("cargo" , "binstall" , "-y" )
41
+ elif (
42
+ installed_path
43
+ / (CARGO_BINSTALL + "" if platform .system () != "Windows" else ".exe" )
44
+ ).exists ():
45
+ ci_logger .info ("Found %s" % CARGO_BINSTALL )
46
+ else :
47
+ ci_logger .info ("Installing %s" % CARGO_BINSTALL )
48
+ match platform .system ():
49
+ case "Windows" :
50
+ one_liner = """Set-ExecutionPolicy Unrestricted -Scope Process; iex (iwr "https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.ps1").Content"""
51
+ session .run (* one_liner .split (), external = True )
52
+ case "Linux" | "Darwin" :
53
+ one_liner = "curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash"
54
+ session .run (* one_liner .split (), external = True )
55
+ case _:
56
+ session .run (
57
+ * self .cargo_install_cmd ,
58
+ CARGO_BINSTALL ,
59
+ "--locked" ,
60
+ external = True ,
61
+ )
62
+ self .cargo_install_cmd = ("cargo" , "binstall" , "-y" )
38
63
39
64
def check_install (self , req : str , session : nox .Session ):
40
65
"""Use cargo to ensure `req` is installed.
@@ -55,10 +80,17 @@ def install():
55
80
dep = req if not ver else f"{ req } @{ ver } "
56
81
session .run (* self .cargo_install_cmd , dep , "--locked" , external = True )
57
82
83
+ installed_path = Path ("~/.cargo/bin" )
84
+
58
85
installed = False
59
86
if req in self .cargo_bins :
60
87
ci_logger .info ("Found %s %s" % (req , self .cargo_bins [req ]))
61
88
installed = True
89
+ elif (
90
+ installed_path / (req + "" if platform .system () != "Windows" else ".exe" )
91
+ ).exists ():
92
+ ci_logger .info ("Found %s" % req )
93
+ installed = True
62
94
if ver or not installed :
63
95
install ()
64
96
0 commit comments