Skip to content

Commit

Permalink
chore: move entity-like structs into entity package
Browse files Browse the repository at this point in the history
  • Loading branch information
femnad committed Dec 27, 2023
1 parent fb1bc02 commit c3d4df6
Show file tree
Hide file tree
Showing 47 changed files with 261 additions and 262 deletions.
121 changes: 2 additions & 119 deletions base/fup.go
Original file line number Diff line number Diff line change
@@ -1,128 +1,11 @@
package base

import (
"fmt"
"io"
"net/url"
"os"

"gopkg.in/yaml.v3"

"github.com/femnad/fup/base/settings"
"github.com/femnad/fup/entity"
"github.com/femnad/fup/internal"
"github.com/femnad/fup/remote"
)

type PackageSpec []entity.PackageGroup
type RemotePackageSpec []entity.RemotePackageGroup
type UserInGroupSpec map[string][]entity.Group

type Config struct {
file string
isRemote bool
AcceptHostKeys []string `yaml:"host_key"`
AptRepos []entity.AptRepo `yaml:"apt_repo"`
Archives []Archive `yaml:"archive"`
Binaries []entity.Binary `yaml:"binary"`
Cargo []CargoPkg `yaml:"rust"`
DnfRepos []entity.DnfRepo `yaml:"dnf_repo"`
EnsureDirs []entity.Dir `yaml:"dir"`
EnsureLines []LineInFile `yaml:"line"`
Flatpak entity.Flatpak `yaml:"flatpak"`
GithubUserKey UserKey `yaml:"github_key"`
Go []entity.GoPkgGroup `yaml:"go"`
Packages PackageSpec `yaml:"package"`
PostflightTasks []Task `yaml:"postflight"`
PreflightTasks []Task `yaml:"preflight"`
Python []PythonPkg `yaml:"python"`
RemotePackages RemotePackageSpec `yaml:"remote_package"`
RepoGroups []entity.RepoGroup `yaml:"repo"`
Services []Service `yaml:"service"`
Settings settings.Settings `yaml:"settings"`
SnapPackages []entity.Snap `yaml:"snap"`
Tasks []Task `yaml:"task"`
Templates []Template `yaml:"template"`
UserInGroup UserInGroupSpec `yaml:"user_group"`
}

func (c Config) IsRemote() bool {
return c.isRemote
}

func (c Config) File() string {
return c.file
}

type configReader struct {
reader io.Reader
isRemote bool
}

func readLocalConfigFile(config string) (io.Reader, error) {
f, err := os.Open(config)
if err != nil {
return nil, err
}
return f, nil
}

func readRemoteConfigFile(config string) (io.Reader, error) {
response, err := remote.ReadResponseBody(config)
if err != nil {
return nil, err
}

return response.Body, nil
}

func getConfigReader(config string) (configReader, error) {
parsed, err := url.Parse(config)
if err != nil {
return configReader{}, err
}

var readerFn func(string) (io.Reader, error)
var isRemote bool
if parsed.Scheme == "" {
readerFn = readLocalConfigFile
isRemote = false
} else {
readerFn = readRemoteConfigFile
isRemote = true
}

reader, err := readerFn(config)
if err != nil {
return configReader{}, err
}

return configReader{reader: reader, isRemote: isRemote}, nil
}

func decodeConfig(filename string) (Config, error) {
config := Config{}
cfgReader, err := getConfigReader(filename)
if err != nil {
return config, err
}

data, err := io.ReadAll(cfgReader.reader)
if err != nil {
return config, err
}

err = yaml.Unmarshal(data, &config)
if err != nil {
return config, fmt.Errorf("error deserializing config from %s: %v", filename, err)
}

config.isRemote = cfgReader.isRemote
config.file = filename
return config, nil
}

func ReadConfig(filename string) (Config, error) {
func ReadConfig(filename string) (entity.Config, error) {
filename = internal.ExpandUser(filename)
return decodeConfig(filename)
return entity.UnmarshalConfig(filename)
}
5 changes: 3 additions & 2 deletions cmd/verify.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package main

import (
"github.com/alexflint/go-arg"
"github.com/femnad/fup/base"
"log"

"github.com/alexflint/go-arg"

"github.com/femnad/fup/base"
"github.com/femnad/fup/cmd/verify"
)

Expand Down
10 changes: 5 additions & 5 deletions cmd/verify/verify.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import (

"gopkg.in/yaml.v3"

"github.com/femnad/fup/base"
"github.com/femnad/fup/base/settings"
"github.com/femnad/fup/common"
"github.com/femnad/fup/entity"
"github.com/femnad/fup/internal"
"github.com/femnad/fup/settings"
)

func isDir(info os.FileInfo) bool {
Expand Down Expand Up @@ -52,7 +52,7 @@ func determineType(info os.FileInfo) string {
return "file"
}

func ensureCorrectDirEntry(entry DirEntry, fupConfig base.Config) error {
func ensureCorrectDirEntry(entry DirEntry, fupConfig entity.Config) error {
path := internal.ExpandUser(entry.Path)
info, err := os.Lstat(path)
if err != nil {
Expand Down Expand Up @@ -112,7 +112,7 @@ func ensureExecutables(execs []string) []error {
return errs
}

func ensureEntries(entries []DirEntry, config base.Config) []error {
func ensureEntries(entries []DirEntry, config entity.Config) []error {
var errs []error
for _, entry := range entries {
err := ensureCorrectDirEntry(entry, config)
Expand Down Expand Up @@ -146,7 +146,7 @@ func ensureFiles(files []FileContent) []error {
return errs
}

func Verify(config string, fupConfig base.Config) error {
func Verify(config string, fupConfig entity.Config) error {
e, err := readConfig(config)
if err != nil {
return err
Expand Down
2 changes: 1 addition & 1 deletion entity/aptrepo.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ import (
"path"
"strings"

"github.com/femnad/fup/base/settings"
"github.com/femnad/fup/internal"
"github.com/femnad/fup/precheck"
"github.com/femnad/fup/precheck/unless"
"github.com/femnad/fup/remote"
"github.com/femnad/fup/settings"
marecmd "github.com/femnad/mare/cmd"
)

Expand Down
4 changes: 2 additions & 2 deletions base/archive.go → entity/archive.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package base
package entity

import (
"fmt"
"os"

"github.com/antchfx/htmlquery"

"github.com/femnad/fup/base/settings"
"github.com/femnad/fup/internal"
"github.com/femnad/fup/precheck/unless"
"github.com/femnad/fup/remote"
"github.com/femnad/fup/settings"
)

type NamedLink struct {
Expand Down
2 changes: 1 addition & 1 deletion entity/binary.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package entity
import (
"fmt"

"github.com/femnad/fup/base/settings"
"github.com/femnad/fup/precheck/unless"
"github.com/femnad/fup/settings"
)

type Binary struct {
Expand Down
4 changes: 2 additions & 2 deletions base/cargo.go → entity/cargo.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package base
package entity

import (
"fmt"

"github.com/femnad/fup/base/settings"
"github.com/femnad/fup/precheck/unless"
"github.com/femnad/fup/settings"
)

type CargoPkg struct {
Expand Down
122 changes: 122 additions & 0 deletions entity/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package entity

import (
"fmt"
"io"
"net/url"
"os"

"gopkg.in/yaml.v3"

"github.com/femnad/fup/remote"
"github.com/femnad/fup/settings"
)

type Config struct {
file string
isRemote bool
AcceptHostKeys []string `yaml:"host_key"`
AptRepos []AptRepo `yaml:"apt_repo"`
Archives []Archive `yaml:"archive"`
Binaries []Binary `yaml:"binary"`
Cargo []CargoPkg `yaml:"rust"`
DnfRepos []DnfRepo `yaml:"dnf_repo"`
EnsureDirs []Dir `yaml:"dir"`
EnsureLines []LineInFile `yaml:"line"`
Flatpak Flatpak `yaml:"flatpak"`
GithubUserKey UserKey `yaml:"github_key"`
Go []GoPkgGroup `yaml:"go"`
Packages PackageSpec `yaml:"package"`
PostflightTasks []Task `yaml:"postflight"`
PreflightTasks []Task `yaml:"preflight"`
Python []PythonPkg `yaml:"python"`
RemotePackages RemotePackageSpec `yaml:"remote_package"`
RepoGroups []RepoGroup `yaml:"repo"`
Services []Service `yaml:"service"`
Settings settings.Settings `yaml:"settings"`
SnapPackages []Snap `yaml:"snap"`
Tasks []Task `yaml:"task"`
TaskGroups []TaskGroup `yaml:"task_group"`
Templates []Template `yaml:"template"`
UserInGroup UserInGroupSpec `yaml:"user_group"`
}

type PackageSpec []PackageGroup
type RemotePackageSpec []RemotePackageGroup
type UserInGroupSpec map[string][]Group

func (c Config) IsRemote() bool {
return c.isRemote
}

func (c Config) File() string {
return c.file
}

type configReader struct {
reader io.Reader
isRemote bool
}

func readLocalConfigFile(config string) (io.Reader, error) {
f, err := os.Open(config)
if err != nil {
return nil, err
}
return f, nil
}

func readRemoteConfigFile(config string) (io.Reader, error) {
response, err := remote.ReadResponseBody(config)
if err != nil {
return nil, err
}

return response.Body, nil
}

func getConfigReader(config string) (configReader, error) {
parsed, err := url.Parse(config)
if err != nil {
return configReader{}, err
}

var readerFn func(string) (io.Reader, error)
var isRemote bool
if parsed.Scheme == "" {
readerFn = readLocalConfigFile
isRemote = false
} else {
readerFn = readRemoteConfigFile
isRemote = true
}

reader, err := readerFn(config)
if err != nil {
return configReader{}, err
}

return configReader{reader: reader, isRemote: isRemote}, nil
}

func UnmarshalConfig(filename string) (Config, error) {
config := Config{}
cfgReader, err := getConfigReader(filename)
if err != nil {
return config, err
}

data, err := io.ReadAll(cfgReader.reader)
if err != nil {
return config, err
}

err = yaml.Unmarshal(data, &config)
if err != nil {
return config, fmt.Errorf("error deserializing config from %s: %v", filename, err)
}

config.isRemote = cfgReader.isRemote
config.file = filename
return config, nil
}
2 changes: 1 addition & 1 deletion entity/dnfrepo.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import (
"fmt"
"strings"

"github.com/femnad/fup/base/settings"
"github.com/femnad/fup/internal"
"github.com/femnad/fup/precheck"
"github.com/femnad/fup/precheck/unless"
"github.com/femnad/fup/settings"
marecmd "github.com/femnad/mare/cmd"
)

Expand Down
2 changes: 1 addition & 1 deletion base/ensurelines.go → entity/ensurelines.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package base
package entity

type Replacement struct {
Old string `yaml:"old"`
Expand Down
4 changes: 2 additions & 2 deletions base/expand.go → entity/expand.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package base
package entity

import (
"github.com/femnad/fup/base/settings"
"github.com/femnad/fup/internal"
"github.com/femnad/fup/settings"
)

var (
Expand Down
Loading

0 comments on commit c3d4df6

Please sign in to comment.