@@ -113,16 +113,23 @@ impl FromStr for ComputeDriverKind {
113113 }
114114}
115115
116+ /// Result of automatic compute-driver detection.
117+ #[ derive( Debug , Clone , PartialEq , Eq ) ]
118+ pub struct DriverDetection {
119+ /// Driver selected according to automatic selection priority.
120+ pub selected : Option < ComputeDriverKind > ,
121+ /// Every available driver in automatic selection priority order.
122+ pub available : Vec < ComputeDriverKind > ,
123+ }
124+
116125/// Detect available compute drivers based on the runtime environment.
117126///
118127/// Priority order: Kubernetes → Podman → Docker.
119128/// VM is never auto-detected (requires explicit `--drivers vm`).
120129///
121- /// Returns every available driver in selection priority order.
122- ///
123130/// VM is excluded because it requires explicit operator selection.
124131#[ must_use]
125- pub fn detect_drivers ( ) -> Vec < ComputeDriverKind > {
132+ pub fn detect_drivers ( ) -> DriverDetection {
126133 let mut drivers = Vec :: new ( ) ;
127134
128135 // Kubernetes: check for KUBERNETES_SERVICE_HOST env var (set inside pods)
@@ -140,13 +147,16 @@ pub fn detect_drivers() -> Vec<ComputeDriverKind> {
140147 drivers. push ( ComputeDriverKind :: Docker ) ;
141148 }
142149
143- drivers
150+ DriverDetection {
151+ selected : drivers. first ( ) . copied ( ) ,
152+ available : drivers,
153+ }
144154}
145155
146- /// Returns the first available driver in automatic selection priority order.
156+ /// Returns the selected driver in automatic selection priority order.
147157#[ must_use]
148158pub fn detect_driver ( ) -> Option < ComputeDriverKind > {
149- detect_drivers ( ) . into_iter ( ) . next ( )
159+ detect_drivers ( ) . selected
150160}
151161
152162/// Check if a binary is available on the system PATH.
@@ -800,8 +810,8 @@ mod tests {
800810 use super :: is_reachable_unix_socket;
801811 use super :: {
802812 ComputeDriverKind , Config , DEFAULT_SERVICE_ROUTING_DOMAIN , GatewayJwtConfig , detect_driver,
803- docker_host_unix_socket_path , is_unix_socket , normalize_compute_driver_name ,
804- podman_socket_candidates_from_env, podman_socket_responds,
813+ detect_drivers , docker_host_unix_socket_path , is_unix_socket ,
814+ normalize_compute_driver_name , podman_socket_candidates_from_env, podman_socket_responds,
805815 } ;
806816 #[ cfg( unix) ]
807817 use std:: io:: { Read as _, Write as _} ;
@@ -1063,8 +1073,13 @@ mod tests {
10631073 std:: env:: set_var ( "KUBERNETES_SERVICE_HOST" , "127.0.0.1" ) ;
10641074 }
10651075
1066- let result = detect_driver ( ) ;
1067- assert_eq ! ( result, Some ( ComputeDriverKind :: Kubernetes ) ) ;
1076+ let detection = detect_drivers ( ) ;
1077+ assert_eq ! ( detection. selected, Some ( ComputeDriverKind :: Kubernetes ) ) ;
1078+ assert_eq ! (
1079+ detection. available. first( ) . copied( ) ,
1080+ Some ( ComputeDriverKind :: Kubernetes )
1081+ ) ;
1082+ assert_eq ! ( detect_driver( ) , detection. selected) ;
10681083
10691084 // Restore the original env var
10701085 unsafe {
0 commit comments