Extend build command

Allow to build all packages and revdeps
This commit is contained in:
Ettore Di Giacinto 2019-11-15 18:12:50 +01:00
parent c95e0ed91d
commit 821020be47
No known key found for this signature in database
GPG Key ID: 965A712536341999

View File

@ -15,14 +15,15 @@
package cmd package cmd
import ( import (
"os"
"regexp"
"runtime"
"github.com/mudler/luet/pkg/compiler" "github.com/mudler/luet/pkg/compiler"
"github.com/mudler/luet/pkg/compiler/backend" "github.com/mudler/luet/pkg/compiler/backend"
. "github.com/mudler/luet/pkg/logger" . "github.com/mudler/luet/pkg/logger"
pkg "github.com/mudler/luet/pkg/package" pkg "github.com/mudler/luet/pkg/package"
tree "github.com/mudler/luet/pkg/tree" tree "github.com/mudler/luet/pkg/tree"
"os"
"regexp"
"runtime"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/viper" "github.com/spf13/viper"
@ -39,8 +40,10 @@ var buildCmd = &cobra.Command{
concurrency := viper.GetInt("concurrency") concurrency := viper.GetInt("concurrency")
backendType := viper.GetString("backend") backendType := viper.GetString("backend")
privileged := viper.GetBool("privileged") privileged := viper.GetBool("privileged")
revdeps := viper.GetBool("revdeps")
all := viper.GetBool("all")
var compilerSpecs []compiler.CompilationSpec var compilerSpecs compiler.CompilationSpecs
var compilerBackend compiler.CompilerBackend var compilerBackend compiler.CompilerBackend
switch backendType { switch backendType {
@ -57,28 +60,50 @@ var buildCmd = &cobra.Command{
if err != nil { if err != nil {
Fatal("Error: " + err.Error()) Fatal("Error: " + err.Error())
} }
compiler := compiler.NewLuetCompiler(compilerBackend, generalRecipe.Tree()) luetCompiler := compiler.NewLuetCompiler(compilerBackend, generalRecipe.Tree())
if !all {
for _, a := range args {
decodepackage, err := regexp.Compile(`^([<>]?\~?=?)((([^\/]+)\/)?(?U)(\S+))(-(\d+(\.\d+)*[a-z]?(_(alpha|beta|pre|rc|p)\d*)*(-r\d+)?))?$`)
if err != nil {
Fatal("Error: " + err.Error())
}
packageInfo := decodepackage.FindAllStringSubmatch(a, -1)
for _, a := range args { category := packageInfo[0][4]
decodepackage, err := regexp.Compile(`^([<>]?\~?=?)((([^\/]+)\/)?(?U)(\S+))(-(\d+(\.\d+)*[a-z]?(_(alpha|beta|pre|rc|p)\d*)*(-r\d+)?))?$`) name := packageInfo[0][5]
if err != nil { version := packageInfo[0][7]
spec, err := luetCompiler.FromPackage(&pkg.DefaultPackage{Name: name, Category: category, Version: version})
if err != nil {
Fatal("Error: " + err.Error())
}
spec.SetOutputPath(dst)
compilerSpecs.Add(spec)
}
} else {
w, e := generalRecipe.Tree().World()
if e != nil {
Fatal("Error: " + err.Error()) Fatal("Error: " + err.Error())
} }
packageInfo := decodepackage.FindAllStringSubmatch(a, -1) for _, p := range w {
spec, err := luetCompiler.FromPackage(p)
category := packageInfo[0][4] if err != nil {
name := packageInfo[0][5] Fatal("Error: " + err.Error())
version := packageInfo[0][7] }
spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: name, Category: category, Version: version}) Info("📦 Selecting ", p.GetName(), p.GetVersion())
if err != nil { compilerSpecs.Add(spec)
Fatal("Error: " + err.Error())
} }
spec.SetOutputPath(dst)
compilerSpecs = append(compilerSpecs, spec)
} }
artifact, errs := compiler.CompileParallel(concurrency, privileged, compilerSpecs) var artifact []compiler.Artifact
var errs []error
if revdeps {
artifact, errs = luetCompiler.CompileWithReverseDeps(concurrency, privileged, compilerSpecs)
} else {
artifact, errs = luetCompiler.CompileParallel(concurrency, privileged, compilerSpecs)
}
if len(errs) != 0 { if len(errs) != 0 {
for _, e := range errs { for _, e := range errs {
Error("Error: " + e.Error()) Error("Error: " + e.Error())
@ -106,5 +131,11 @@ func init() {
viper.BindPFlag("concurrency", buildCmd.Flags().Lookup("concurrency")) viper.BindPFlag("concurrency", buildCmd.Flags().Lookup("concurrency"))
buildCmd.Flags().Bool("privileged", false, "Privileged (Keep permissions)") buildCmd.Flags().Bool("privileged", false, "Privileged (Keep permissions)")
viper.BindPFlag("privileged", buildCmd.Flags().Lookup("privileged")) viper.BindPFlag("privileged", buildCmd.Flags().Lookup("privileged"))
buildCmd.Flags().Bool("revdeps", false, "Build with revdeps")
viper.BindPFlag("revdeps", buildCmd.Flags().Lookup("revdeps"))
buildCmd.Flags().Bool("all", false, "Build all packages in the tree")
viper.BindPFlag("all", buildCmd.Flags().Lookup("all"))
RootCmd.AddCommand(buildCmd) RootCmd.AddCommand(buildCmd)
} }