github.com/KusionStack/kpm@v0.8.4-0.20240326033734-dc72298a30e5/pkg/env/env.go (about)

     1  package env
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  
     7  	"kcl-lang.io/kpm/pkg/reporter"
     8  	"kcl-lang.io/kpm/pkg/utils"
     9  )
    10  
    11  // env name
    12  const PKG_PATH = "KCL_PKG_PATH"
    13  const DEFAULT_PKG_PATH_IN_UER_HOME = ".kcl"
    14  const KPM_SUB_DIR = "kpm"
    15  
    16  // GetEnvPkgPath will return the env $KCL_PKG_PATH.
    17  func GetEnvPkgPath() string {
    18  	return os.Getenv(PKG_PATH)
    19  }
    20  
    21  // GetKpmSubDir will return the subdir for kpm ".kcl/kpm"
    22  func GetKpmSubDir() string {
    23  	return filepath.Join(DEFAULT_PKG_PATH_IN_UER_HOME, KPM_SUB_DIR)
    24  }
    25  
    26  // GetAbsPkgPath will return the absolute path of $KCL_PKG_PATH,
    27  // or the absolute path of the current path if $KCL_PKG_PATH does not exist.
    28  func GetAbsPkgPath() (string, error) {
    29  	kpmHome := GetEnvPkgPath()
    30  	if kpmHome == "" {
    31  		defaultHome, err := utils.CreateSubdirInUserHome(GetKpmSubDir())
    32  		if err != nil {
    33  			return "", reporter.NewErrorEvent(reporter.FailedAccessPkgPath, err, "could not access $KCL_PKG_PATH.")
    34  		}
    35  		kpmHome = defaultHome
    36  	}
    37  
    38  	kpmHome, err := filepath.Abs(kpmHome)
    39  	if err != nil {
    40  		return "", reporter.NewErrorEvent(reporter.FailedAccessPkgPath, err, "could not access $KCL_PKG_PATH.")
    41  	}
    42  
    43  	return kpmHome, nil
    44  }