github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/analyzer/os/alpine/alpine.go (about) 1 package alpine 2 3 import ( 4 "bufio" 5 "context" 6 "os" 7 8 "golang.org/x/exp/slices" 9 "golang.org/x/xerrors" 10 11 "github.com/devseccon/trivy/pkg/fanal/analyzer" 12 fos "github.com/devseccon/trivy/pkg/fanal/analyzer/os" 13 "github.com/devseccon/trivy/pkg/fanal/types" 14 ) 15 16 func init() { 17 analyzer.RegisterAnalyzer(&alpineOSAnalyzer{}) 18 } 19 20 const version = 1 21 22 var requiredFiles = []string{"etc/alpine-release"} 23 24 type alpineOSAnalyzer struct{} 25 26 func (a alpineOSAnalyzer) Analyze(_ context.Context, input analyzer.AnalysisInput) (*analyzer.AnalysisResult, error) { 27 scanner := bufio.NewScanner(input.Content) 28 for scanner.Scan() { 29 line := scanner.Text() 30 return &analyzer.AnalysisResult{ 31 OS: types.OS{ 32 Family: types.Alpine, 33 Name: line, 34 }, 35 }, nil 36 } 37 return nil, xerrors.Errorf("alpine: %w", fos.AnalyzeOSError) 38 } 39 40 func (a alpineOSAnalyzer) Required(filePath string, _ os.FileInfo) bool { 41 return slices.Contains(requiredFiles, filePath) 42 } 43 44 func (a alpineOSAnalyzer) Type() analyzer.Type { 45 return analyzer.TypeAlpine 46 } 47 48 func (a alpineOSAnalyzer) Version() int { 49 return version 50 }