1+ use std:: { fs, path:: PathBuf } ;
2+
3+ use reqwest:: blocking:: ClientBuilder ;
4+
15const URL : & str = "https://github.com/cpp-linter/clang-tools-static-binaries/releases/latest/download/versions.json" ;
26
37#[ derive( Debug , serde:: Deserialize ) ]
48struct VersionInfo {
59 release_tag : String ,
610 llvm_versions : std:: collections:: HashMap < u8 , String > ,
711}
8-
912fn main ( ) {
10- let mut response = ureq:: get ( URL )
11- . call ( )
12- . unwrap ( ) ;
13- let body = response. body_mut ( ) ;
14- let body_str = body
15- . read_to_string ( )
16- . unwrap ( ) ;
17- let version_info: VersionInfo = serde_json:: from_str ( & body_str) . unwrap ( ) ;
13+ let pre_seed = PathBuf :: from ( "versions.json" ) ;
14+ let version_info_str = if pre_seed. exists ( ) {
15+ println ! ( "cargo:warning=Using pre-seeded version info from {pre_seed:?}" ) ;
16+ fs:: read_to_string ( & pre_seed) . unwrap ( )
17+ } else {
18+ ClientBuilder :: new ( )
19+ . user_agent ( "cpp-linter-rs/clang-installer" )
20+ . build ( )
21+ . unwrap ( )
22+ . get ( URL )
23+ . send ( )
24+ . unwrap ( )
25+ . text ( )
26+ . unwrap ( )
27+ } ;
28+ let version_info: VersionInfo = serde_json:: from_str ( & version_info_str) . unwrap ( ) ;
1829 let ( min_ver, max_ver) = {
1930 let ( mut min_v, mut max_v) = ( None , None ) ;
2031 for ver in version_info. llvm_versions . keys ( ) {
@@ -27,7 +38,10 @@ fn main() {
2738 }
2839 ( min_v. unwrap ( ) , max_v. unwrap ( ) )
2940 } ;
30- println ! ( "cargo:rustc-env=CLANG_TOOLS_TAG={}" , version_info. release_tag) ;
41+ println ! (
42+ "cargo:rustc-env=CLANG_TOOLS_TAG={}" ,
43+ version_info. release_tag
44+ ) ;
3145 println ! ( "cargo:rustc-env=MIN_CLANG_TOOLS_VERSION={min_ver}" ) ;
3246 println ! ( "cargo:rustc-env=MAX_CLANG_TOOLS_VERSION={max_ver}" ) ;
3347}
0 commit comments