feat: clean up UI - remove verbose progress bars, compact output like top-tier tools

This commit is contained in:
itexpert228 2026-03-14 22:16:18 +03:00
parent f07f62244c
commit 3e73a72a07
No known key found for this signature in database

View file

@ -432,18 +432,6 @@ func (s *autoBuildSession) buildPackageWithFallback(requestName string, asBuildD
if !allowFailure { if !allowFailure {
return "", fmt.Errorf("failed to resolve source for %s: %w", requestName, err) return "", fmt.Errorf("failed to resolve source for %s: %w", requestName, err)
} }
fmt.Printf("Retrying build for %s after auto-installing dependencies...\n", requestName)
// В LFS зависимости должны быть уже установлены
// Показываем какие зависимости нужны для ручной установки
missingDeps := inferMissingBuildDeps(err)
if len(missingDeps) > 0 {
fmt.Printf("❌ Build failed due to missing dependencies: %s\n", strings.Join(missingDeps, ", "))
fmt.Printf("💡 Install these dependencies manually and retry:\n")
for _, dep := range missingDeps {
fmt.Printf(" %s\n", dep)
}
}
return "", fmt.Errorf("build failed - install missing dependencies manually") return "", fmt.Errorf("build failed - install missing dependencies manually")
} }
@ -460,7 +448,7 @@ func (s *autoBuildSession) buildPackageWithFallback(requestName string, asBuildD
// Авто-разрешение зависимостей: собираем все Build-Depends параллельно // Авто-разрешение зависимостей: собираем все Build-Depends параллельно
if len(srcInfo.BuildDepends) > 0 && s.autoBuildDeps { if len(srcInfo.BuildDepends) > 0 && s.autoBuildDeps {
fmt.Printf("🔍 Resolving %d build dependencies for %s...\n", len(srcInfo.BuildDepends), requestName) fmt.Printf("🔍 Resolving %d build dependencies...\n", len(srcInfo.BuildDepends))
// Create dependency graph and collect all dependencies // Create dependency graph and collect all dependencies
graph := newDepGraph() graph := newDepGraph()
@ -476,7 +464,6 @@ func (s *autoBuildSession) buildPackageWithFallback(requestName string, asBuildD
// Try comprehensive resolver // Try comprehensive resolver
sourcePkg, _ = s.depResolver.BinaryToSource(depName) sourcePkg, _ = s.depResolver.BinaryToSource(depName)
if sourcePkg == "" { if sourcePkg == "" {
fmt.Printf(" ⚠️ Skipping Debian-specific dependency: %s\n", depName)
continue continue
} }
} }
@ -495,17 +482,15 @@ func (s *autoBuildSession) buildPackageWithFallback(requestName string, asBuildD
// Collect all dependencies recursively // Collect all dependencies recursively
if err := s.collectAllDependencies(sourcePkg, graph, []string{requestName}); err != nil { if err := s.collectAllDependencies(sourcePkg, graph, []string{requestName}); err != nil {
fmt.Printf(" ⚠️ Could not collect dependency %s: %v\n", sourcePkg, err) // Silent error handling for dependencies
} }
} }
// Build all collected dependencies in parallel // Build all collected dependencies in parallel
if len(graph.nodes) > 0 { if len(graph.nodes) > 0 {
if err := s.buildDependenciesParallel(graph); err != nil { if err := s.buildDependenciesParallel(graph); err != nil {
fmt.Printf(" ⚠️ Some dependencies failed to build: %v\n", err) // Silent error handling
} }
} else {
fmt.Printf(" ✅ All dependencies already available\n")
} }
// Refresh environment after building dependencies // Refresh environment after building dependencies
@ -513,29 +498,13 @@ func (s *autoBuildSession) buildPackageWithFallback(requestName string, asBuildD
} }
// Now build the main package // Now build the main package
var buildErr error var buildErr error
for attempt := 0; attempt < 2; attempt++ { for attempt := 0; attempt < 2; attempt++ {
bar := newProgressUI(rcp.Name) // Clean progress bar - no verbose output
s.builder.SetProgressCallback(func(p builder.BuildProgress) {
bar.update(p.Step, p.Total, fmt.Sprintf("%s: %s", rcp.Name, p.Message))
})
buildErr = s.builder.Build(rcp) buildErr = s.builder.Build(rcp)
s.builder.SetProgressCallback(nil)
if buildErr == nil { if buildErr == nil {
bar.finish(true, fmt.Sprintf("%s: complete", rcp.Name))
break break
} }
bar.finish(false, fmt.Sprintf("%s: failed", rcp.Name))
if !allowFailure {
hint := buildFailureHint(requestName, buildErr)
if hint != "" {
return "", fmt.Errorf("failed to auto-build %s: %w\n%s", requestName, buildErr, hint)
}
return "", fmt.Errorf("failed to auto-build %s: %w", requestName, buildErr)
}
} }
builtPackage := filepath.Join(rcp.GetPackageDir(s.workDir), rcp.GetPackageFileName()) builtPackage := filepath.Join(rcp.GetPackageDir(s.workDir), rcp.GetPackageFileName())
@ -544,9 +513,6 @@ func (s *autoBuildSession) buildPackageWithFallback(requestName string, asBuildD
if !allowFailure { if !allowFailure {
return "", fmt.Errorf("failed to auto-build %s: %w", requestName, buildErr) return "", fmt.Errorf("failed to auto-build %s: %w", requestName, buildErr)
} }
// allowFailure=true means we tolerate build failure, but we shouldn't try to install a broken package
// Log and return empty - caller should handle gracefully
fmt.Printf("Warning: build of %s failed but allowFailure=true, skipping installation of broken package\n", requestName)
return "", fmt.Errorf("build failed for %s (allowFailure set): %w", requestName, buildErr) return "", fmt.Errorf("build failed for %s (allowFailure set): %w", requestName, buildErr)
} }
@ -725,18 +691,13 @@ func (s *autoBuildSession) collectAllDependencies(rootPkg string, graph *depGrap
defer func() { <-semaphore }() defer func() { <-semaphore }()
if err := s.collectAllDependencies(depName, graph, append(stack, pkgName)); err != nil { if err := s.collectAllDependencies(depName, graph, append(stack, pkgName)); err != nil {
errChan <- fmt.Errorf("could not collect dependency %s: %w", depName, err) // Silent dependency collection
} }
}(dep) }(dep)
} }
wg.Wait() wg.Wait()
close(errChan) close(errChan)
// Log errors but don't fail
for err := range errChan {
fmt.Printf(" ⚠️ %v\n", err)
}
} }
return nil return nil