/
source_gomod.go
57 lines (44 loc) · 1.11 KB
/
source_gomod.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package licensei
import (
"github.com/goph/licensei/pkg/pkgmgr/gomod"
"golang.org/x/exp/slog"
"github.com/pkg/errors"
)
type gomodDependencySource struct {
logger *slog.Logger
}
func NewGoModDependencySource(logger *slog.Logger) *gomodDependencySource {
return &gomodDependencySource{
logger: logger,
}
}
func (s *gomodDependencySource) Dependencies() ([]Dependency, error) {
logger := s.logger.WithGroup("gomod")
logger.Debug("listing go modules")
deps, err := gomod.ListDeps("")
if err != nil {
return nil, errors.Wrap(err, "failed to list dependencies")
}
var dependencies []Dependency // nolint: prealloc
moduleMap := map[string]bool{}
for _, dep := range deps {
// Skip the main module and non-module dependencies
if dep.Module == nil || dep.Module.Main {
continue
}
// Skip already processed modules
if _, ok := moduleMap[dep.Module.Path]; ok {
continue
}
moduleMap[dep.Module.Path] = true
dependencies = append(
dependencies,
Dependency{
Name: dep.Module.Path,
Revision: dep.Module.Version,
Type: "gomod",
},
)
}
return dependencies, nil
}