mirror of
https://github.com/aquasecurity/trivy.git
synced 2026-01-31 13:53:14 +08:00
49 lines
1.0 KiB
Go
49 lines
1.0 KiB
Go
package alpine
|
|
|
|
import (
|
|
"bufio"
|
|
"context"
|
|
"os"
|
|
|
|
"golang.org/x/exp/slices"
|
|
|
|
"golang.org/x/xerrors"
|
|
|
|
"github.com/aquasecurity/trivy/pkg/fanal/analyzer"
|
|
aos "github.com/aquasecurity/trivy/pkg/fanal/analyzer/os"
|
|
"github.com/aquasecurity/trivy/pkg/fanal/types"
|
|
)
|
|
|
|
func init() {
|
|
analyzer.RegisterAnalyzer(&alpineOSAnalyzer{})
|
|
}
|
|
|
|
const version = 1
|
|
|
|
var requiredFiles = []string{"etc/alpine-release"}
|
|
|
|
type alpineOSAnalyzer struct{}
|
|
|
|
func (a alpineOSAnalyzer) Analyze(_ context.Context, input analyzer.AnalysisInput) (*analyzer.AnalysisResult, error) {
|
|
scanner := bufio.NewScanner(input.Content)
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
return &analyzer.AnalysisResult{
|
|
OS: &types.OS{Family: aos.Alpine, Name: line},
|
|
}, nil
|
|
}
|
|
return nil, xerrors.Errorf("alpine: %w", aos.AnalyzeOSError)
|
|
}
|
|
|
|
func (a alpineOSAnalyzer) Required(filePath string, _ os.FileInfo) bool {
|
|
return slices.Contains(requiredFiles, filePath)
|
|
}
|
|
|
|
func (a alpineOSAnalyzer) Type() analyzer.Type {
|
|
return analyzer.TypeAlpine
|
|
}
|
|
|
|
func (a alpineOSAnalyzer) Version() int {
|
|
return version
|
|
}
|