浏览代码

Refact cscli hub / pkg/cwhub (part 6) (#2524)

* hub.ConfigDir -> hub.InstallDir; hub.DataDir -> hub.InstallDataDir
* cleanup GetInstalledItemsAsString()
* lint: ReferenceMissingError -> ErrMissingReference
* lint: parent_dir -> parentDir
* link: export Walker type
* lint: return error last
* lint: shadow
* move around and group variable definitions
mmetc 1 年之前
父节点
当前提交
3b1563a538
共有 10 个文件被更改,包括 112 次插入125 次删除
  1. 3 3
      cmd/crowdsec-cli/hub.go
  2. 8 8
      pkg/csconfig/hub.go
  3. 4 4
      pkg/csconfig/hub_test.go
  4. 29 27
      pkg/cwhub/cwhub.go
  5. 10 11
      pkg/cwhub/cwhub_test.go
  6. 16 20
      pkg/cwhub/download.go
  7. 10 17
      pkg/cwhub/helpers.go
  8. 10 13
      pkg/cwhub/install.go
  9. 18 18
      pkg/cwhub/loader.go
  10. 4 4
      pkg/hubtest/hubtest_item.go

+ 3 - 3
cmd/crowdsec-cli/hub.go

@@ -57,7 +57,7 @@ func NewHubListCmd() *cobra.Command {
 			}
 
 			// use LocalSync to get warnings about tainted / outdated items
-			_, warn := cwhub.LocalSync(csConfig.Hub)
+			warn, _ := cwhub.LocalSync(csConfig.Hub)
 			for _, v := range warn {
 				log.Info(v)
 			}
@@ -106,8 +106,8 @@ Fetches the [.index.json](https://github.com/crowdsecurity/hub/blob/master/.inde
 					return fmt.Errorf("failed to get Hub index after retry: %w", err)
 				}
 			}
-			//use LocalSync to get warnings about tainted / outdated items
-			_, warn := cwhub.LocalSync(csConfig.Hub)
+			// use LocalSync to get warnings about tainted / outdated items
+			warn, _ := cwhub.LocalSync(csConfig.Hub)
 			for _, v := range warn {
 				log.Info(v)
 			}

+ 8 - 8
pkg/csconfig/hub.go

@@ -2,10 +2,10 @@ package csconfig
 
 /*cscli specific config, such as hub directory*/
 type Hub struct {
-	HubDir       string
-	ConfigDir    string
-	HubIndexFile string
-	DataDir      string
+	HubIndexFile   string
+	HubDir         string
+	InstallDir     string
+	InstallDataDir string
 }
 
 func (c *Config) LoadHub() error {
@@ -14,10 +14,10 @@ func (c *Config) LoadHub() error {
 	}
 
 	c.Hub = &Hub{
-		HubIndexFile: c.ConfigPaths.HubIndexFile,
-		ConfigDir:    c.ConfigPaths.ConfigDir,
-		HubDir:       c.ConfigPaths.HubDir,
-		DataDir:      c.ConfigPaths.DataDir,
+		HubIndexFile:   c.ConfigPaths.HubIndexFile,
+		HubDir:         c.ConfigPaths.HubDir,
+		InstallDir:     c.ConfigPaths.ConfigDir,
+		InstallDataDir: c.ConfigPaths.DataDir,
 	}
 
 	return nil

+ 4 - 4
pkg/csconfig/hub_test.go

@@ -40,10 +40,10 @@ func TestLoadHub(t *testing.T) {
 				},
 			},
 			expected: &Hub{
-				ConfigDir:    configDirFullPath,
-				DataDir:      dataFullPath,
-				HubDir:       hubFullPath,
-				HubIndexFile: hubIndexFileFullPath,
+				HubDir:         hubFullPath,
+				HubIndexFile:   hubIndexFileFullPath,
+				InstallDir:     configDirFullPath,
+				InstallDataDir: dataFullPath,
 			},
 		},
 		{

+ 29 - 27
pkg/cwhub/cwhub.go

@@ -13,23 +13,31 @@ import (
 	"golang.org/x/mod/semver"
 )
 
-// managed item types
-const PARSERS = "parsers"
-const PARSERS_OVFLW = "postoverflows"
-const SCENARIOS = "scenarios"
-const COLLECTIONS = "collections"
-
-var ItemTypes = []string{PARSERS, PARSERS_OVFLW, SCENARIOS, COLLECTIONS}
+const (
+	HubIndexFile = ".index.json"
+
+	// managed item types
+	PARSERS       = "parsers"
+	PARSERS_OVFLW = "postoverflows"
+	SCENARIOS     = "scenarios"
+	COLLECTIONS   = "collections"
+)
 
-var hubIdx map[string]map[string]Item
+var (
+	ItemTypes = []string{PARSERS, PARSERS_OVFLW, SCENARIOS, COLLECTIONS}
 
-var RawFileURLTemplate = "https://hub-cdn.crowdsec.net/%s/%s"
-var HubBranch = "master"
+	ErrMissingReference = errors.New("Reference(s) missing in collection")
 
-const HubIndexFile = ".index.json"
+	// XXX: can we remove these globals?
+	skippedLocal       = 0
+	skippedTainted     = 0
+	RawFileURLTemplate = "https://hub-cdn.crowdsec.net/%s/%s"
+	HubBranch          = "master"
+	hubIdx             map[string]map[string]Item
+)
 
 type ItemVersion struct {
-	Digest     string `json:"digest,omitempty"`	// meow
+	Digest     string `json:"digest,omitempty"` // meow
 	Deprecated bool   `json:"deprecated,omitempty"`
 }
 
@@ -134,12 +142,6 @@ func (i *Item) versionStatus() int {
 	return semver.Compare("v"+i.Version, "v"+i.LocalVersion)
 }
 
-// XXX: can we remove these globals?
-var skippedLocal = 0
-var skippedTainted = 0
-
-var ReferenceMissingError = errors.New("Reference(s) missing in collection")
-
 func GetItemMap(itemType string) map[string]Item {
 	m, ok := hubIdx[itemType]
 	if !ok {
@@ -167,9 +169,9 @@ func itemKey(itemPath string) (string, error) {
 		return "", fmt.Errorf("while reading symlink of %s: %w", itemPath, err)
 	}
 
-	fname := filepath.Base(pathInHub)
 	author := filepath.Base(filepath.Dir(pathInHub))
 
+	fname := filepath.Base(pathInHub)
 	fname = strings.TrimSuffix(fname, ".yaml")
 	fname = strings.TrimSuffix(fname, ".yml")
 
@@ -225,13 +227,13 @@ func DisplaySummary() {
 }
 
 func GetInstalledItems(itemType string) ([]Item, error) {
-	var retItems []Item
-
 	items, ok := hubIdx[itemType]
 	if !ok {
 		return nil, fmt.Errorf("no %s in hubIdx", itemType)
 	}
 
+	retItems := make([]Item, 0)
+
 	for _, item := range items {
 		if item.Installed {
 			retItems = append(retItems, item)
@@ -242,15 +244,15 @@ func GetInstalledItems(itemType string) ([]Item, error) {
 }
 
 func GetInstalledItemsAsString(itemType string) ([]string, error) {
-	var retStr []string
-
 	items, err := GetInstalledItems(itemType)
 	if err != nil {
-		return nil, fmt.Errorf("while fetching %s: %w", itemType, err)
+		return nil, err
 	}
 
-	for _, it := range items {
-		retStr = append(retStr, it.Name)
+	retStr := make([]string, len(items))
+
+	for i, it := range items {
+		retStr[i] = it.Name
 	}
 
 	return retStr, nil
@@ -264,7 +266,7 @@ func GetHubStatusForItemType(itemType string, name string, all bool) []ItemHubSt
 		return nil
 	}
 
-	var ret = make([]ItemHubStatus, 0)
+	ret := make([]ItemHubStatus, 0)
 
 	// remember, you do it for the user :)
 	for _, item := range hubIdx[itemType] {

+ 10 - 11
pkg/cwhub/cwhub_test.go

@@ -122,7 +122,7 @@ func TestIndexDownload(t *testing.T) {
 
 func getTestCfg() *csconfig.Config {
 	cfg := &csconfig.Config{Hub: &csconfig.Hub{}}
-	cfg.Hub.ConfigDir, _ = filepath.Abs("./install")
+	cfg.Hub.InstallDir, _ = filepath.Abs("./install")
 	cfg.Hub.HubDir, _ = filepath.Abs("./hubdir")
 	cfg.Hub.HubIndexFile = filepath.Clean("./hubdir/.index.json")
 
@@ -144,7 +144,7 @@ func envSetup(t *testing.T) *csconfig.Config {
 	// Mock the http client
 	http.DefaultClient.Transport = newMockTransport()
 
-	err := os.MkdirAll(cfg.Hub.ConfigDir, 0700)
+	err := os.MkdirAll(cfg.Hub.InstallDir, 0700)
 	require.NoError(t, err)
 
 	err = os.MkdirAll(cfg.Hub.HubDir, 0700)
@@ -163,8 +163,8 @@ func envSetup(t *testing.T) *csconfig.Config {
 }
 
 func envTearDown(cfg *csconfig.Config) {
-	if err := os.RemoveAll(cfg.Hub.ConfigDir); err != nil {
-		log.Fatalf("failed to remove %s : %s", cfg.Hub.ConfigDir, err)
+	if err := os.RemoveAll(cfg.Hub.InstallDir); err != nil {
+		log.Fatalf("failed to remove %s : %s", cfg.Hub.InstallDir, err)
 	}
 
 	if err := os.RemoveAll(cfg.Hub.HubDir); err != nil {
@@ -177,7 +177,7 @@ func testInstallItem(cfg *csconfig.Hub, t *testing.T, item Item) {
 	err := DownloadLatest(cfg, &item, false, false)
 	require.NoError(t, err, "failed to download %s", item.Name)
 
-	err, _ = LocalSync(cfg)
+	_, err = LocalSync(cfg)
 	require.NoError(t, err, "failed to run localSync")
 
 	assert.True(t, hubIdx[item.Type][item.Name].UpToDate, "%s should be up-to-date", item.Name)
@@ -187,7 +187,7 @@ func testInstallItem(cfg *csconfig.Hub, t *testing.T, item Item) {
 	err = EnableItem(cfg, &item)
 	require.NoError(t, err, "failed to enable %s", item.Name)
 
-	err, _ = LocalSync(cfg)
+	_, err = LocalSync(cfg)
 	require.NoError(t, err, "failed to run localSync")
 
 	assert.True(t, hubIdx[item.Type][item.Name].Installed, "%s should be installed", item.Name)
@@ -205,7 +205,7 @@ func testTaintItem(cfg *csconfig.Hub, t *testing.T, item Item) {
 	require.NoError(t, err, "failed to write to %s (%s)", item.LocalPath, item.Name)
 
 	// Local sync and check status
-	err, _ = LocalSync(cfg)
+	_, err = LocalSync(cfg)
 	require.NoError(t, err, "failed to run localSync")
 
 	assert.True(t, hubIdx[item.Type][item.Name].Tainted, "%s should be tainted", item.Name)
@@ -219,7 +219,7 @@ func testUpdateItem(cfg *csconfig.Hub, t *testing.T, item Item) {
 	require.NoError(t, err, "failed to update %s", item.Name)
 
 	// Local sync and check status
-	err, _ = LocalSync(cfg)
+	_, err = LocalSync(cfg)
 	require.NoError(t, err, "failed to run localSync")
 
 	assert.True(t, hubIdx[item.Type][item.Name].UpToDate, "%s should be up-to-date", item.Name)
@@ -234,7 +234,7 @@ func testDisableItem(cfg *csconfig.Hub, t *testing.T, item Item) {
 	require.NoError(t, err, "failed to disable %s", item.Name)
 
 	// Local sync and check status
-	err, warns := LocalSync(cfg)
+	warns, err := LocalSync(cfg)
 	require.NoError(t, err, "failed to run localSync")
 	require.Empty(t, warns, "unexpected warnings : %+v", warns)
 
@@ -247,11 +247,10 @@ func testDisableItem(cfg *csconfig.Hub, t *testing.T, item Item) {
 	require.NoError(t, err, "failed to purge %s", item.Name)
 
 	// Local sync and check status
-	err, warns = LocalSync(cfg)
+	warns, err = LocalSync(cfg)
 	require.NoError(t, err, "failed to run localSync")
 	require.Empty(t, warns, "unexpected warnings : %+v", warns)
 
-
 	assert.False(t, hubIdx[item.Type][item.Name].Installed, "%s should not be installed anymore", item.Name)
 	assert.False(t, hubIdx[item.Type][item.Name].Downloaded, "%s should not be downloaded", item.Name)
 }

+ 16 - 20
pkg/cwhub/download.go

@@ -27,14 +27,14 @@ func UpdateHubIdx(hub *csconfig.Hub) error {
 
 	ret, err := LoadPkgIndex(bidx)
 	if err != nil {
-		if !errors.Is(err, ReferenceMissingError) {
+		if !errors.Is(err, ErrMissingReference) {
 			return fmt.Errorf("failed to read index: %w", err)
 		}
 	}
 
 	hubIdx = ret
 
-	if err, _ := LocalSync(hub); err != nil {
+	if _, err := LocalSync(hub); err != nil {
 		return fmt.Errorf("failed to sync: %w", err)
 	}
 
@@ -135,8 +135,10 @@ func DownloadLatest(hub *csconfig.Hub, target *Item, overwrite bool, updateOnly
 					return fmt.Errorf("while downloading %s: %w", val.Name, err)
 				}
 			}
+
 			downloaded := val.Downloaded
-			err := DownloadItem(hub, &val, overwrite)
+
+			err = DownloadItem(hub, &val, overwrite)
 			if err != nil {
 				return fmt.Errorf("while downloading %s: %w", val.Name, err)
 			}
@@ -163,7 +165,6 @@ func DownloadLatest(hub *csconfig.Hub, target *Item, overwrite bool, updateOnly
 
 func DownloadItem(hub *csconfig.Hub, target *Item, overwrite bool) error {
 	tdir := hub.HubDir
-	dataFolder := hub.DataDir
 
 	// if user didn't --force, don't overwrite local, tainted, up-to-date files
 	if !overwrite {
@@ -200,7 +201,7 @@ func DownloadItem(hub *csconfig.Hub, target *Item, overwrite bool) error {
 	}
 
 	h := sha256.New()
-	if _, err := h.Write(body); err != nil {
+	if _, err = h.Write(body); err != nil {
 		return fmt.Errorf("while hashing %s: %w", target.Name, err)
 	}
 
@@ -215,7 +216,7 @@ func DownloadItem(hub *csconfig.Hub, target *Item, overwrite bool) error {
 	//all good, install
 	//check if parent dir exists
 	tmpdirs := strings.Split(tdir+"/"+target.RemotePath, "/")
-	parent_dir := strings.Join(tmpdirs[:len(tmpdirs)-1], "/")
+	parentDir := strings.Join(tmpdirs[:len(tmpdirs)-1], "/")
 
 	// ensure that target file is within target dir
 	finalPath, err := filepath.Abs(tdir + "/" + target.RemotePath)
@@ -228,10 +229,10 @@ func DownloadItem(hub *csconfig.Hub, target *Item, overwrite bool) error {
 	}
 
 	// check dir
-	if _, err = os.Stat(parent_dir); os.IsNotExist(err) {
-		log.Debugf("%s doesn't exist, create", parent_dir)
+	if _, err = os.Stat(parentDir); os.IsNotExist(err) {
+		log.Debugf("%s doesn't exist, create", parentDir)
 
-		if err := os.MkdirAll(parent_dir, os.ModePerm); err != nil {
+		if err = os.MkdirAll(parentDir, os.ModePerm); err != nil {
 			return fmt.Errorf("while creating parent directories: %w", err)
 		}
 	}
@@ -260,7 +261,7 @@ func DownloadItem(hub *csconfig.Hub, target *Item, overwrite bool) error {
 	target.Tainted = false
 	target.UpToDate = true
 
-	if err = downloadData(dataFolder, overwrite, bytes.NewReader(body)); err != nil {
+	if err = downloadData(hub.InstallDataDir, overwrite, bytes.NewReader(body)); err != nil {
 		return fmt.Errorf("while downloading data for %s: %w", target.FileName, err)
 	}
 
@@ -270,21 +271,16 @@ func DownloadItem(hub *csconfig.Hub, target *Item, overwrite bool) error {
 }
 
 func DownloadDataIfNeeded(hub *csconfig.Hub, target Item, force bool) error {
-	var (
-		dataFolder = hub.DataDir
-		itemFile   *os.File
-		err        error
-	)
+	itemFilePath := fmt.Sprintf("%s/%s/%s/%s", hub.InstallDir, target.Type, target.Stage, target.FileName)
 
-	itemFilePath := fmt.Sprintf("%s/%s/%s/%s", hub.ConfigDir, target.Type, target.Stage, target.FileName)
-
-	if itemFile, err = os.Open(itemFilePath); err != nil {
+	itemFile, err := os.Open(itemFilePath)
+	if err != nil {
 		return fmt.Errorf("while opening %s: %w", itemFilePath, err)
 	}
 
 	defer itemFile.Close()
 
-	if err = downloadData(dataFolder, force, itemFile); err != nil {
+	if err = downloadData(hub.InstallDataDir, force, itemFile); err != nil {
 		return fmt.Errorf("while downloading data for %s: %w", itemFilePath, err)
 	}
 
@@ -311,7 +307,7 @@ func downloadData(dataFolder string, force bool, reader io.Reader) error {
 		download := false
 
 		for _, dataS := range data.Data {
-			if _, err := os.Stat(filepath.Join(dataFolder, dataS.DestPath)); os.IsNotExist(err) {
+			if _, err = os.Stat(filepath.Join(dataFolder, dataS.DestPath)); os.IsNotExist(err) {
 				download = true
 			}
 		}

+ 10 - 17
pkg/cwhub/helpers.go

@@ -80,7 +80,7 @@ func InstallItem(csConfig *csconfig.Config, name string, obtype string, force bo
 		return fmt.Errorf("while downloading %s: %w", item.Name, err)
 	}
 
-	if err := AddItem(obtype, *item); err != nil {
+	if err = AddItem(obtype, *item); err != nil {
 		return fmt.Errorf("while adding %s: %w", item.Name, err)
 	}
 
@@ -105,24 +105,19 @@ func InstallItem(csConfig *csconfig.Config, name string, obtype string, force bo
 
 // XXX this must return errors instead of log.Fatal
 func RemoveMany(csConfig *csconfig.Config, itemType string, name string, all bool, purge bool, forceAction bool) {
-	var (
-		err      error
-		disabled int
-	)
-
 	if name != "" {
 		item := GetItem(itemType, name)
 		if item == nil {
 			log.Fatalf("unable to retrieve: %s", name)
 		}
 
-		err = DisableItem(csConfig.Hub, item, purge, forceAction)
+		err := DisableItem(csConfig.Hub, item, purge, forceAction)
 
 		if err != nil {
 			log.Fatalf("unable to disable %s : %v", item.Name, err)
 		}
 
-		if err := AddItem(itemType, *item); err != nil {
+		if err = AddItem(itemType, *item); err != nil {
 			log.Fatalf("unable to add %s: %v", item.Name, err)
 		}
 
@@ -133,13 +128,15 @@ func RemoveMany(csConfig *csconfig.Config, itemType string, name string, all boo
 		log.Fatal("removing item: no item specified")
 	}
 
+	disabled := 0
+
 	// remove all
 	for _, v := range GetItemMap(itemType) {
 		if !v.Installed {
 			continue
 		}
 
-		err = DisableItem(csConfig.Hub, &v, purge, forceAction)
+		err := DisableItem(csConfig.Hub, &v, purge, forceAction)
 		if err != nil {
 			log.Fatalf("unable to disable %s : %v", v.Name, err)
 		}
@@ -154,11 +151,8 @@ func RemoveMany(csConfig *csconfig.Config, itemType string, name string, all boo
 }
 
 func UpgradeConfig(csConfig *csconfig.Config, itemType string, name string, force bool) {
-	var (
-		err     error
-		updated int
-		found   bool
-	)
+	updated := 0
+	found := false
 
 	for _, v := range GetItemMap(itemType) {
 		if name != "" && name != v.Name {
@@ -180,7 +174,7 @@ func UpgradeConfig(csConfig *csconfig.Config, itemType string, name string, forc
 		if v.UpToDate {
 			log.Infof("%s : up-to-date", v.Name)
 
-			if err = DownloadDataIfNeeded(csConfig.Hub, v, force); err != nil {
+			if err := DownloadDataIfNeeded(csConfig.Hub, v, force); err != nil {
 				log.Fatalf("%s : download failed : %v", v.Name, err)
 			}
 
@@ -189,8 +183,7 @@ func UpgradeConfig(csConfig *csconfig.Config, itemType string, name string, forc
 			}
 		}
 
-		err = DownloadLatest(csConfig.Hub, &v, force, true)
-		if err != nil {
+		if err := DownloadLatest(csConfig.Hub, &v, force, true); err != nil {
 			log.Fatalf("%s : download failed : %v", v.Name, err)
 		}
 

+ 10 - 13
pkg/cwhub/install.go

@@ -41,7 +41,6 @@ func DisableItem(hub *csconfig.Hub, target *Item, purge bool, force bool) error
 		return nil
 	}
 
-
 	if target.Local {
 		return fmt.Errorf("%s isn't managed by hub. Please delete manually", target.Name)
 	}
@@ -52,8 +51,7 @@ func DisableItem(hub *csconfig.Hub, target *Item, purge bool, force bool) error
 
 	// for a COLLECTIONS, disable sub-items
 	if target.Type == COLLECTIONS {
-		var tmp = [][]string{target.Parsers, target.PostOverflows, target.Scenarios, target.Collections}
-		for idx, ptr := range tmp {
+		for idx, ptr := range [][]string{target.Parsers, target.PostOverflows, target.Scenarios, target.Collections} {
 			ptrtype := ItemTypes[idx]
 			for _, p := range ptr {
 				if val, ok := hubIdx[ptrtype][p]; ok {
@@ -82,7 +80,7 @@ func DisableItem(hub *csconfig.Hub, target *Item, purge bool, force bool) error
 		}
 	}
 
-	syml, err := filepath.Abs(hub.ConfigDir + "/" + target.Type + "/" + target.Stage + "/" + target.FileName)
+	syml, err := filepath.Abs(hub.InstallDir + "/" + target.Type + "/" + target.Stage + "/" + target.FileName)
 	if err != nil {
 		return err
 	}
@@ -142,7 +140,7 @@ func DisableItem(hub *csconfig.Hub, target *Item, purge bool, force bool) error
 func EnableItem(hub *csconfig.Hub, target *Item) error {
 	var err error
 
-	parent_dir := filepath.Clean(hub.ConfigDir + "/" + target.Type + "/" + target.Stage + "/")
+	parentDir := filepath.Clean(hub.InstallDir + "/" + target.Type + "/" + target.Stage + "/")
 
 	// create directories if needed
 	if target.Installed {
@@ -161,18 +159,17 @@ func EnableItem(hub *csconfig.Hub, target *Item) error {
 		}
 	}
 
-	if _, err := os.Stat(parent_dir); os.IsNotExist(err) {
-		log.Infof("%s doesn't exist, create", parent_dir)
+	if _, err = os.Stat(parentDir); os.IsNotExist(err) {
+		log.Infof("%s doesn't exist, create", parentDir)
 
-		if err := os.MkdirAll(parent_dir, os.ModePerm); err != nil {
+		if err = os.MkdirAll(parentDir, os.ModePerm); err != nil {
 			return fmt.Errorf("while creating directory: %w", err)
 		}
 	}
 
 	// install sub-items if it's a collection
 	if target.Type == COLLECTIONS {
-		var tmp = [][]string{target.Parsers, target.PostOverflows, target.Scenarios, target.Collections}
-		for idx, ptr := range tmp {
+		for idx, ptr := range [][]string{target.Parsers, target.PostOverflows, target.Scenarios, target.Collections} {
 			ptrtype := ItemTypes[idx]
 			for _, p := range ptr {
 				val, ok := hubIdx[ptrtype][p]
@@ -189,8 +186,8 @@ func EnableItem(hub *csconfig.Hub, target *Item) error {
 	}
 
 	// check if file already exists where it should in configdir (eg /etc/crowdsec/collections/)
-	if _, err := os.Lstat(parent_dir + "/" + target.FileName); !os.IsNotExist(err) {
-		log.Infof("%s already exists.", parent_dir+"/"+target.FileName)
+	if _, err = os.Lstat(parentDir + "/" + target.FileName); !os.IsNotExist(err) {
+		log.Infof("%s already exists.", parentDir+"/"+target.FileName)
 		return nil
 	}
 
@@ -200,7 +197,7 @@ func EnableItem(hub *csconfig.Hub, target *Item) error {
 		return fmt.Errorf("while getting source path: %w", err)
 	}
 
-	dstPath, err := filepath.Abs(parent_dir + "/" + target.FileName)
+	dstPath, err := filepath.Abs(parentDir + "/" + target.FileName)
 	if err != nil {
 		return fmt.Errorf("while getting destination path: %w", err)
 	}

+ 18 - 18
pkg/cwhub/loader.go

@@ -61,16 +61,16 @@ func getSHA256(filepath string) (string, error) {
 	return fmt.Sprintf("%x", h.Sum(nil)), nil
 }
 
-type walker struct {
+type Walker struct {
 	// the walk/parserVisit function can't receive extra args
 	hubdir     string
 	installdir string
 }
 
-func NewWalker(hub *csconfig.Hub) walker {
-	return walker{
+func NewWalker(hub *csconfig.Hub) Walker {
+	return Walker{
 		hubdir:     hub.HubDir,
-		installdir: hub.ConfigDir,
+		installdir: hub.InstallDir,
 	}
 }
 
@@ -81,7 +81,7 @@ type itemFileInfo struct {
 	fauthor string
 }
 
-func (w walker) getItemInfo(path string) (itemFileInfo, bool, error) {
+func (w Walker) getItemInfo(path string) (itemFileInfo, bool, error) {
 	ret := itemFileInfo{}
 	inhub := false
 
@@ -141,7 +141,7 @@ func (w walker) getItemInfo(path string) (itemFileInfo, bool, error) {
 	return ret, inhub, nil
 }
 
-func (w walker) parserVisit(path string, f os.DirEntry, err error) error {
+func (w Walker) parserVisit(path string, f os.DirEntry, err error) error {
 	var (
 		local   bool
 		hubpath string
@@ -412,7 +412,7 @@ func CollecDepsCheck(v *Item) error {
 	return nil
 }
 
-func SyncDir(hub *csconfig.Hub, dir string) (error, []string) {
+func SyncDir(hub *csconfig.Hub, dir string) ([]string, error) {
 	warnings := []string{}
 
 	// For each, scan PARSERS, PARSERS_OVFLW, SCENARIOS and COLLECTIONS last
@@ -424,7 +424,7 @@ func SyncDir(hub *csconfig.Hub, dir string) (error, []string) {
 
 		err = filepath.WalkDir(cpath, NewWalker(hub).parserVisit)
 		if err != nil {
-			return err, warnings
+			return warnings, err
 		}
 	}
 
@@ -449,25 +449,25 @@ func SyncDir(hub *csconfig.Hub, dir string) (error, []string) {
 		log.Debugf("installed (%s) - status:%d | installed:%s | latest : %s | full : %+v", item.Name, vs, item.LocalVersion, item.Version, item.Versions)
 	}
 
-	return nil, warnings
+	return warnings, nil
 }
 
 // Updates the info from HubInit() with the local state
-func LocalSync(hub *csconfig.Hub) (error, []string) {
+func LocalSync(hub *csconfig.Hub) ([]string, error) {
 	skippedLocal = 0
 	skippedTainted = 0
 
-	err, warnings := SyncDir(hub, hub.ConfigDir)
+	warnings, err := SyncDir(hub, hub.InstallDir)
 	if err != nil {
-		return fmt.Errorf("failed to scan %s: %w", hub.ConfigDir, err), warnings
+		return warnings, fmt.Errorf("failed to scan %s: %w", hub.InstallDir, err)
 	}
 
-	err, _ = SyncDir(hub, hub.HubDir)
+	_, err = SyncDir(hub, hub.HubDir)
 	if err != nil {
-		return fmt.Errorf("failed to scan %s: %w", hub.HubDir, err), warnings
+		return warnings, fmt.Errorf("failed to scan %s: %w", hub.HubDir, err)
 	}
 
-	return nil, warnings
+	return warnings, nil
 }
 
 func GetHubIdx(hub *csconfig.Hub) error {
@@ -484,7 +484,7 @@ func GetHubIdx(hub *csconfig.Hub) error {
 
 	ret, err := LoadPkgIndex(bidx)
 	if err != nil {
-		if !errors.Is(err, ReferenceMissingError) {
+		if !errors.Is(err, ErrMissingReference) {
 			return fmt.Errorf("unable to load existing index: %w", err)
 		}
 
@@ -494,7 +494,7 @@ func GetHubIdx(hub *csconfig.Hub) error {
 
 	hubIdx = ret
 
-	err, _ = LocalSync(hub)
+	_, err = LocalSync(hub)
 	if err != nil {
 		return fmt.Errorf("failed to sync Hub index with local deployment : %w", err)
 	}
@@ -545,7 +545,7 @@ func LoadPkgIndex(buff []byte) (map[string]map[string]Item, error) {
 	}
 
 	if len(missingItems) > 0 {
-		return RawIndex, fmt.Errorf("%q: %w", missingItems, ReferenceMissingError)
+		return RawIndex, fmt.Errorf("%q: %w", missingItems, ErrMissingReference)
 	}
 
 	return RawIndex, nil

+ 4 - 4
pkg/hubtest/hubtest_item.go

@@ -122,10 +122,10 @@ func NewTest(name string, hubTest *HubTest) (*HubTestItem, error) {
 		ScenarioResultFile:        filepath.Join(resultPath, ScenarioResultFileName),
 		BucketPourResultFile:      filepath.Join(resultPath, BucketPourResultFileName),
 		RuntimeHubConfig: &csconfig.Hub{
-			HubDir:       runtimeHubFolder,
-			ConfigDir:    runtimeFolder,
-			HubIndexFile: hubTest.HubIndexFile,
-			DataDir:      filepath.Join(runtimeFolder, "data"),
+			HubDir:         runtimeHubFolder,
+			HubIndexFile:   hubTest.HubIndexFile,
+			InstallDir:     runtimeFolder,
+			InstallDataDir: filepath.Join(runtimeFolder, "data"),
 		},
 		Config:                 configFileData,
 		HubPath:                hubTest.HubPath,