1
- use std:: path:: Path ;
1
+ use std:: path:: { Path , PathBuf } ;
2
+ use walkdir:: WalkDir ;
2
3
3
4
fn main ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
4
5
let workspace_dir = Path :: new ( env ! ( "CARGO_WORKSPACE_DIR" ) ) ;
@@ -8,13 +9,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
8
9
let proto_file_descriptor_set_path = Path :: new ( "generated/bin/descriptor.bin" ) ;
9
10
let generated_include_file = Path :: new ( "include.rs" ) ;
10
11
11
- let v1_protos = [
12
- proto_tuxtape_dir. join ( "server/database/v1/database.proto" ) ,
13
- proto_tuxtape_dir. join ( "server/registrar/v1/registrar.proto" ) ,
14
- proto_tuxtape_dir. join ( "server/fleet_client/v1/fleet_client.proto" ) ,
15
- proto_tuxtape_dir. join ( "kernel_builder/v1/kernel_builder.proto" ) ,
16
- proto_tuxtape_dir. join ( "patch_builder/v1/patch_builder.proto" ) ,
17
- ] ;
12
+ let v1_protos = fetch_proto_dirs ( & proto_tuxtape_dir, 1 , & [ "common" ] ) ;
18
13
19
14
let mut config = tonic_build:: Config :: default ( ) ;
20
15
config. out_dir ( proto_src_out_dir) ;
@@ -29,3 +24,32 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
29
24
30
25
Ok ( ( ) )
31
26
}
27
+
28
+ fn fetch_proto_dirs (
29
+ proto_package_dir : & Path ,
30
+ proto_version : usize ,
31
+ ignore_modules : & [ & str ] ,
32
+ ) -> Vec < PathBuf > {
33
+ let version_str = format ! ( "v{proto_version}" ) ;
34
+ WalkDir :: new ( proto_package_dir)
35
+ . into_iter ( )
36
+ // Remove all files that don't have read permission
37
+ . filter_map ( |e| e. ok ( ) )
38
+ . filter ( |entry| entry. path ( ) . extension ( ) . is_some_and ( |ext| ext == "proto" ) )
39
+ . filter ( |entry| {
40
+ entry
41
+ . path ( )
42
+ . components ( )
43
+ . filter_map ( |comp| comp. as_os_str ( ) . to_str ( ) )
44
+ . any ( |comp| comp == version_str)
45
+ } )
46
+ . filter ( |entry| {
47
+ !entry
48
+ . path ( )
49
+ . components ( )
50
+ . filter_map ( |comp| comp. as_os_str ( ) . to_str ( ) )
51
+ . any ( |comp| ignore_modules. contains ( & comp) )
52
+ } )
53
+ . map ( |entry| entry. path ( ) . to_path_buf ( ) )
54
+ . collect ( )
55
+ }
0 commit comments