This commit updates the 'wdcli' command to show a warning when using the wrong executable.
92 lines
2.1 KiB
Go
92 lines
2.1 KiB
Go
package env
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"os/user"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/tkw1536/goprogram/exit"
|
|
)
|
|
|
|
// Params are parameters used for initialization of the environment
|
|
type Params struct {
|
|
BaseDirectory string
|
|
}
|
|
|
|
// ConfigFilePath returns the path to the configuration file
|
|
func (params Params) ConfigFilePath() string {
|
|
if params.BaseDirectory == "" {
|
|
return ""
|
|
}
|
|
return filepath.Join(params.BaseDirectory, ConfigFile)
|
|
}
|
|
|
|
var errUnableToLoadParams = exit.Error{
|
|
ExitCode: exit.ExitGeneralArguments,
|
|
Message: "Unable to configure wdcli environment: %s",
|
|
}
|
|
|
|
const BaseDirectoryDefault = "/var/www/deploy"
|
|
|
|
// ParamsFromEnv creates a new set of parameters from the environment.
|
|
// There is no guarantee that the parameters are valid.
|
|
func ParamsFromEnv() (params Params, err error) {
|
|
// try to read the base directory
|
|
value, err := ReadBaseDirectory()
|
|
switch {
|
|
case os.IsNotExist(err):
|
|
params.BaseDirectory = BaseDirectoryDefault
|
|
case err == nil:
|
|
params.BaseDirectory = value
|
|
default:
|
|
return params, errUnableToLoadParams.WithMessageF(err)
|
|
}
|
|
|
|
return params, nil
|
|
}
|
|
|
|
var baseConfigFile = ".wdcli"
|
|
|
|
// ReadBaseDirectory reads the base directory from the environment, or an empty string
|
|
func ReadBaseDirectory() (value string, err error) {
|
|
// find the current user
|
|
usr, err := user.Current()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
// read the base config file!
|
|
contents, err := os.ReadFile(filepath.Join(usr.HomeDir, baseConfigFile))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
// and trim the spaces!
|
|
value = strings.TrimSpace(string(contents))
|
|
|
|
// check that it is actually set!
|
|
if len(value) == 0 {
|
|
return "", errors.New("ReadBaseDirectory: Directory is empty")
|
|
}
|
|
|
|
// and return it!
|
|
return value, nil
|
|
}
|
|
|
|
// WriteBaseDirectory writes the base directory to the environment, or returns an error
|
|
func WriteBaseDirectory(dir string) error {
|
|
// find the current user
|
|
usr, err := user.Current()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// read the base config file!
|
|
return os.WriteFile(
|
|
filepath.Join(usr.HomeDir, baseConfigFile),
|
|
[]byte(dir),
|
|
os.ModePerm,
|
|
)
|
|
}
|