Move configuration into separate package
ci/woodpecker/push/woodpecker Pipeline was successful
Details
ci/woodpecker/push/woodpecker Pipeline was successful
Details
This commit is contained in:
parent
01a9f23a64
commit
9a06894cfa
3
build.go
3
build.go
|
@ -42,6 +42,7 @@ import (
|
||||||
"go.arsenm.dev/logger/log"
|
"go.arsenm.dev/logger/log"
|
||||||
"go.arsenm.dev/lure/distro"
|
"go.arsenm.dev/lure/distro"
|
||||||
"go.arsenm.dev/lure/download"
|
"go.arsenm.dev/lure/download"
|
||||||
|
"go.arsenm.dev/lure/internal/config"
|
||||||
"go.arsenm.dev/lure/internal/cpu"
|
"go.arsenm.dev/lure/internal/cpu"
|
||||||
"go.arsenm.dev/lure/internal/shutils"
|
"go.arsenm.dev/lure/internal/shutils"
|
||||||
"go.arsenm.dev/lure/internal/shutils/decoder"
|
"go.arsenm.dev/lure/internal/shutils/decoder"
|
||||||
|
@ -187,7 +188,7 @@ func buildPackage(ctx context.Context, script string, mgr manager.Manager) ([]st
|
||||||
|
|
||||||
log.Info("Building package").Str("name", vars.Name).Str("version", vars.Version).Send()
|
log.Info("Building package").Str("name", vars.Name).Str("version", vars.Version).Send()
|
||||||
|
|
||||||
baseDir := filepath.Join(cacheDir, "pkgs", vars.Name)
|
baseDir := filepath.Join(config.PkgsDir, vars.Name)
|
||||||
srcdir := filepath.Join(baseDir, "src")
|
srcdir := filepath.Join(baseDir, "src")
|
||||||
pkgdir := filepath.Join(baseDir, "pkg")
|
pkgdir := filepath.Join(baseDir, "pkg")
|
||||||
|
|
||||||
|
|
99
config.go
99
config.go
|
@ -19,108 +19,17 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
|
|
||||||
"github.com/pelletier/go-toml/v2"
|
|
||||||
"go.arsenm.dev/logger/log"
|
"go.arsenm.dev/logger/log"
|
||||||
|
"go.arsenm.dev/lure/internal/config"
|
||||||
"go.arsenm.dev/lure/manager"
|
"go.arsenm.dev/lure/manager"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var cfg config.Config
|
||||||
cacheDir string
|
|
||||||
cfgPath string
|
|
||||||
config Config
|
|
||||||
)
|
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
RootCmd string `toml:"rootCmd"`
|
|
||||||
Repos []Repo `toml:"repo"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Repo struct {
|
|
||||||
Name string `toml:"name"`
|
|
||||||
URL string `toml:"url"`
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultConfig = Config{
|
|
||||||
RootCmd: "sudo",
|
|
||||||
Repos: []Repo{
|
|
||||||
{
|
|
||||||
Name: "default",
|
|
||||||
URL: "https://github.com/Arsen6331/lure-repo.git",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
cfg, cache, err := makeDirs()
|
err := config.Decode(&cfg)
|
||||||
if err != nil {
|
|
||||||
log.Fatal("Error creating directories").Err(err).Send()
|
|
||||||
}
|
|
||||||
cacheDir = cache
|
|
||||||
|
|
||||||
cfgPath = filepath.Join(cfg, "lure.toml")
|
|
||||||
|
|
||||||
cfgFl, err := os.Open(cfgPath)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal("Error opening config file").Err(err).Send()
|
|
||||||
}
|
|
||||||
defer cfgFl.Close()
|
|
||||||
|
|
||||||
err = toml.NewDecoder(cfgFl).Decode(&config)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error decoding config file").Err(err).Send()
|
log.Fatal("Error decoding config file").Err(err).Send()
|
||||||
}
|
}
|
||||||
|
manager.DefaultRootCmd = cfg.RootCmd
|
||||||
manager.DefaultRootCmd = config.RootCmd
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeDirs() (string, string, error) {
|
|
||||||
cfgDir, err := os.UserConfigDir()
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
baseCfgPath := filepath.Join(cfgDir, "lure")
|
|
||||||
|
|
||||||
err = os.MkdirAll(baseCfgPath, 0o755)
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
cfgPath := filepath.Join(baseCfgPath, "lure.toml")
|
|
||||||
|
|
||||||
if _, err := os.Stat(cfgPath); err != nil {
|
|
||||||
cfgFl, err := os.Create(cfgPath)
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = toml.NewEncoder(cfgFl).Encode(&defaultConfig)
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
cfgFl.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
cacheDir, err := os.UserCacheDir()
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
baseCachePath := filepath.Join(cacheDir, "lure")
|
|
||||||
|
|
||||||
err = os.MkdirAll(filepath.Join(baseCachePath, "repo"), 0o755)
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = os.MkdirAll(filepath.Join(baseCachePath, "pkgs"), 0o755)
|
|
||||||
if err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
return baseCfgPath, baseCachePath, nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/pelletier/go-toml/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
RootCmd string `toml:"rootCmd"`
|
||||||
|
Repos []Repo `toml:"repo"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Repo struct {
|
||||||
|
Name string `toml:"name"`
|
||||||
|
URL string `toml:"url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var defaultConfig = Config{
|
||||||
|
RootCmd: "sudo",
|
||||||
|
Repos: []Repo{
|
||||||
|
{
|
||||||
|
Name: "default",
|
||||||
|
URL: "https://github.com/Arsen6331/lure-repo.git",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func Decode(cfg *Config) error {
|
||||||
|
cfgFl, err := os.Open(ConfigPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer cfgFl.Close()
|
||||||
|
|
||||||
|
return toml.NewDecoder(cfgFl).Decode(cfg)
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/pelletier/go-toml/v2"
|
||||||
|
"go.arsenm.dev/logger/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ConfigDir string
|
||||||
|
ConfigPath string
|
||||||
|
CacheDir string
|
||||||
|
RepoDir string
|
||||||
|
PkgsDir string
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
cfgDir, err := os.UserConfigDir()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Unable to detect user config directory").Err(err).Send()
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigDir = filepath.Join(cfgDir, "lure")
|
||||||
|
|
||||||
|
err = os.MkdirAll(ConfigDir, 0o755)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Unable to create LURE config directory").Err(err).Send()
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigPath = filepath.Join(ConfigDir, "lure.toml")
|
||||||
|
|
||||||
|
if _, err := os.Stat(ConfigPath); err != nil {
|
||||||
|
cfgFl, err := os.Create(ConfigPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Unable to create LURE config file").Err(err).Send()
|
||||||
|
}
|
||||||
|
|
||||||
|
err = toml.NewEncoder(cfgFl).Encode(&defaultConfig)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Error encoding default configuration").Err(err).Send()
|
||||||
|
}
|
||||||
|
|
||||||
|
cfgFl.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheDir, err := os.UserCacheDir()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Unable to detect cache directory").Err(err).Send()
|
||||||
|
}
|
||||||
|
|
||||||
|
CacheDir = filepath.Join(cacheDir, "lure")
|
||||||
|
RepoDir = filepath.Join(CacheDir, "repo")
|
||||||
|
PkgsDir = filepath.Join(CacheDir, "pkgs")
|
||||||
|
|
||||||
|
err = os.MkdirAll(RepoDir, 0o755)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Unable to create repo cache directory").Err(err).Send()
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.MkdirAll(PkgsDir, 0o755)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Unable to create package cache directory").Err(err).Send()
|
||||||
|
}
|
||||||
|
}
|
31
repo.go
31
repo.go
|
@ -31,6 +31,7 @@ import (
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
"go.arsenm.dev/logger/log"
|
"go.arsenm.dev/logger/log"
|
||||||
"go.arsenm.dev/lure/download"
|
"go.arsenm.dev/lure/download"
|
||||||
|
"go.arsenm.dev/lure/internal/config"
|
||||||
"golang.org/x/exp/slices"
|
"golang.org/x/exp/slices"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -52,23 +53,23 @@ func addrepoCmd(c *cli.Context) error {
|
||||||
name := c.String("name")
|
name := c.String("name")
|
||||||
repoURL := c.String("url")
|
repoURL := c.String("url")
|
||||||
|
|
||||||
for _, repo := range config.Repos {
|
for _, repo := range cfg.Repos {
|
||||||
if repo.URL == repoURL {
|
if repo.URL == repoURL {
|
||||||
log.Fatal("Repo already exists").Str("name", repo.Name).Send()
|
log.Fatal("Repo already exists").Str("name", repo.Name).Send()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
config.Repos = append(config.Repos, Repo{
|
cfg.Repos = append(cfg.Repos, config.Repo{
|
||||||
Name: name,
|
Name: name,
|
||||||
URL: repoURL,
|
URL: repoURL,
|
||||||
})
|
})
|
||||||
|
|
||||||
cfgFl, err := os.Create(cfgPath)
|
cfgFl, err := os.Create(config.ConfigPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error opening config file").Err(err).Send()
|
log.Fatal("Error opening config file").Err(err).Send()
|
||||||
}
|
}
|
||||||
|
|
||||||
err = toml.NewEncoder(cfgFl).Encode(&config)
|
err = toml.NewEncoder(cfgFl).Encode(&cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error encoding config").Err(err).Send()
|
log.Fatal("Error encoding config").Err(err).Send()
|
||||||
}
|
}
|
||||||
|
@ -81,7 +82,7 @@ func removerepoCmd(c *cli.Context) error {
|
||||||
|
|
||||||
found := false
|
found := false
|
||||||
index := 0
|
index := 0
|
||||||
for i, repo := range config.Repos {
|
for i, repo := range cfg.Repos {
|
||||||
if repo.Name == name {
|
if repo.Name == name {
|
||||||
index = i
|
index = i
|
||||||
found = true
|
found = true
|
||||||
|
@ -91,19 +92,19 @@ func removerepoCmd(c *cli.Context) error {
|
||||||
log.Fatal("Repo does not exist").Str("name", name).Send()
|
log.Fatal("Repo does not exist").Str("name", name).Send()
|
||||||
}
|
}
|
||||||
|
|
||||||
config.Repos = slices.Delete(config.Repos, index, index+1)
|
cfg.Repos = slices.Delete(cfg.Repos, index, index+1)
|
||||||
|
|
||||||
cfgFl, err := os.Create(cfgPath)
|
cfgFl, err := os.Create(config.ConfigPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error opening config file").Err(err).Send()
|
log.Fatal("Error opening config file").Err(err).Send()
|
||||||
}
|
}
|
||||||
|
|
||||||
err = toml.NewEncoder(cfgFl).Encode(&config)
|
err = toml.NewEncoder(cfgFl).Encode(&cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error encoding config").Err(err).Send()
|
log.Fatal("Error encoding config").Err(err).Send()
|
||||||
}
|
}
|
||||||
|
|
||||||
err = os.RemoveAll(filepath.Join(cacheDir, "repo", name))
|
err = os.RemoveAll(filepath.Join(config.RepoDir, name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error removing repo directory").Err(err).Send()
|
log.Fatal("Error removing repo directory").Err(err).Send()
|
||||||
}
|
}
|
||||||
|
@ -120,11 +121,9 @@ func refreshCmd(c *cli.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func findPkg(pkg string) ([]string, error) {
|
func findPkg(pkg string) ([]string, error) {
|
||||||
baseRepoDir := filepath.Join(cacheDir, "repo")
|
|
||||||
|
|
||||||
var out []string
|
var out []string
|
||||||
for _, repo := range config.Repos {
|
for _, repo := range cfg.Repos {
|
||||||
repoDir := filepath.Join(baseRepoDir, repo.Name)
|
repoDir := filepath.Join(config.RepoDir, repo.Name)
|
||||||
err := os.MkdirAll(repoDir, 0o755)
|
err := os.MkdirAll(repoDir, 0o755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -200,16 +199,14 @@ func findPkgs(pkgs []string) (scripts, notFound []string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func pullRepos(ctx context.Context) error {
|
func pullRepos(ctx context.Context) error {
|
||||||
baseRepoDir := filepath.Join(cacheDir, "repo")
|
for _, repo := range cfg.Repos {
|
||||||
|
|
||||||
for _, repo := range config.Repos {
|
|
||||||
repoURL, err := url.Parse(repo.URL)
|
repoURL, err := url.Parse(repo.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Info("Pulling repository").Str("name", repo.Name).Send()
|
log.Info("Pulling repository").Str("name", repo.Name).Send()
|
||||||
repoDir := filepath.Join(baseRepoDir, repo.Name)
|
repoDir := filepath.Join(config.RepoDir, repo.Name)
|
||||||
|
|
||||||
gitDir := filepath.Join(repoDir, ".git")
|
gitDir := filepath.Join(repoDir, ".git")
|
||||||
if fi, err := os.Stat(gitDir); err == nil && fi.IsDir() {
|
if fi, err := os.Stat(gitDir); err == nil && fi.IsDir() {
|
||||||
|
|
Loading…
Reference in New Issue