Check provides field when filtering build dependencies
ci/woodpecker/push/woodpecker Pipeline was successful
Details
ci/woodpecker/push/woodpecker Pipeline was successful
Details
This commit is contained in:
parent
fa4604c26c
commit
192e3e8a4f
53
build.go
53
build.go
|
@ -44,6 +44,7 @@ import (
|
||||||
"go.arsenm.dev/lure/internal/cliutils"
|
"go.arsenm.dev/lure/internal/cliutils"
|
||||||
"go.arsenm.dev/lure/internal/config"
|
"go.arsenm.dev/lure/internal/config"
|
||||||
"go.arsenm.dev/lure/internal/cpu"
|
"go.arsenm.dev/lure/internal/cpu"
|
||||||
|
"go.arsenm.dev/lure/internal/db"
|
||||||
"go.arsenm.dev/lure/internal/dl"
|
"go.arsenm.dev/lure/internal/dl"
|
||||||
"go.arsenm.dev/lure/internal/repos"
|
"go.arsenm.dev/lure/internal/repos"
|
||||||
"go.arsenm.dev/lure/internal/shutils"
|
"go.arsenm.dev/lure/internal/shutils"
|
||||||
|
@ -263,20 +264,19 @@ func buildPackage(ctx context.Context, script string, mgr manager.Manager) ([]st
|
||||||
}
|
}
|
||||||
|
|
||||||
var buildDeps []string
|
var buildDeps []string
|
||||||
for _, pkgName := range vars.BuildDepends {
|
if len(vars.BuildDepends) > 0 {
|
||||||
if _, ok := installed[pkgName]; !ok {
|
found, notFound, err := repos.FindPkgs(gdb, vars.BuildDepends)
|
||||||
buildDeps = append(buildDeps, pkgName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(buildDeps) > 0 {
|
|
||||||
found, notFound, err := repos.FindPkgs(gdb, buildDeps)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
found = filterBuildDeps(found, installed)
|
||||||
|
|
||||||
log.Info("Installing build dependencies").Send()
|
log.Info("Installing build dependencies").Send()
|
||||||
installPkgs(ctx, cliutils.FlattenPkgs(found, "install", translator), notFound, mgr)
|
|
||||||
|
flattened := cliutils.FlattenPkgs(found, "install", translator)
|
||||||
|
buildDeps = packageNames(flattened)
|
||||||
|
installPkgs(ctx, flattened, notFound, mgr)
|
||||||
}
|
}
|
||||||
|
|
||||||
var builtDeps, builtNames, repoDeps []string
|
var builtDeps, builtNames, repoDeps []string
|
||||||
|
@ -642,6 +642,41 @@ func setVersion(ctx context.Context, r *interp.Runner, to string) error {
|
||||||
return r.Run(ctx, fl)
|
return r.Run(ctx, fl)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func filterBuildDeps(found map[string][]db.Package, installed map[string]string) map[string][]db.Package {
|
||||||
|
out := map[string][]db.Package{}
|
||||||
|
for name, pkgs := range found {
|
||||||
|
var inner []db.Package
|
||||||
|
for _, pkg := range pkgs {
|
||||||
|
if _, ok := installed[pkg.Name]; !ok {
|
||||||
|
addToFiltered := true
|
||||||
|
for _, provides := range pkg.Provides.Val {
|
||||||
|
if _, ok := installed[provides]; ok {
|
||||||
|
addToFiltered = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if addToFiltered {
|
||||||
|
inner = append(inner, pkg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(inner) > 0 {
|
||||||
|
out[name] = inner
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func packageNames(pkgs []db.Package) []string {
|
||||||
|
names := make([]string, len(pkgs))
|
||||||
|
for i, p := range pkgs {
|
||||||
|
names[i] = p.Name
|
||||||
|
}
|
||||||
|
return names
|
||||||
|
}
|
||||||
|
|
||||||
// uniq removes all duplicates from string slices
|
// uniq removes all duplicates from string slices
|
||||||
func uniq(ss ...*[]string) {
|
func uniq(ss ...*[]string) {
|
||||||
for _, s := range ss {
|
for _, s := range ss {
|
||||||
|
|
Loading…
Reference in New Issue