@@ -104,29 +104,46 @@ private async Task<bool> PingHost(string host)
104104 }
105105
106106 public async Task < IEnumerable < string > > GetHostsAsync ( )
107- {
108- await Task . CompletedTask ;
109-
110- logger . LogDebug ( "Fetching hosts" ) ;
111-
112- return NetApi32
113- . NetUseEnum < NetApi32 . USE_INFO_0 > ( )
114- . Take ( MaxItemCount )
115- . Select ( useInfo0 =>
116- {
117- var remote = useInfo0 . ui0_remote ;
118- var path = pathFactory . Create ( remote ) ;
119- if ( path is UncPath p ) return p ;
120- logger . LogWarning (
121- "Failed to parse host {@FileSystemPath} {PathInfo} {Remote}" ,
122- path ,
123- useInfo0 ,
124- remote
125- ) ;
126- return null ;
127- }
128- )
129- . OfType < UncPath > ( )
130- . Select ( x => x . OriginalHost ) ;
107+ {
108+ await Task . CompletedTask ;
109+
110+ // Skip Win32 API calls in CI environments - NetUseEnum can cause stack overflow
111+ // on certain systems (e.g., GitHub Actions runners)
112+ if ( Environment . GetEnvironmentVariable ( "CI" ) is "true" )
113+ {
114+ logger . LogDebug ( "Skipping host enumeration in CI environment" ) ;
115+ return [ ] ;
116+ }
117+
118+ logger . LogDebug ( "Fetching hosts" ) ;
119+
120+ try
121+ {
122+ return NetApi32
123+ . NetUseEnum < NetApi32 . USE_INFO_0 > ( )
124+ . Take ( MaxItemCount )
125+ . Select ( useInfo0 =>
126+ {
127+ var remote = useInfo0 . ui0_remote ;
128+ var path = pathFactory . Create ( remote ) ;
129+ if ( path is UncPath p ) return p ;
130+ logger . LogWarning (
131+ "Failed to parse host {@FileSystemPath} {PathInfo} {Remote}" ,
132+ path ,
133+ useInfo0 ,
134+ remote
135+ ) ;
136+ return null ;
137+ }
138+ )
139+ . OfType < UncPath > ( )
140+ . Select ( x => x . OriginalHost ) ;
141+ }
142+ catch ( Exception ex )
143+ {
144+ // NetUseEnum can fail in certain environments
145+ logger . LogWarning ( ex , "Failed to enumerate network hosts" ) ;
146+ return [ ] ;
147+ }
148+ }
131149 }
132- }
0 commit comments