Skip to content

Commit

Permalink
cmd: remove duplicated loadConfig() and move into buildconfig
Browse files Browse the repository at this point in the history
  • Loading branch information
mvo5 committed May 8, 2024
1 parent 4ee472f commit 0315a97
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 69 deletions.
23 changes: 4 additions & 19 deletions cmd/build/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import (
"path/filepath"
"strings"

"github.com/osbuild/images/internal/buildconfig"
"github.com/osbuild/images/internal/cmdutil"
"github.com/osbuild/images/internal/manifestutil"
"github.com/osbuild/images/pkg/arch"
"github.com/osbuild/images/pkg/blueprint"
"github.com/osbuild/images/pkg/container"
Expand All @@ -36,24 +36,8 @@ func check(err error) {
}
}

func loadConfig(path string) manifestutil.BuildConfig {
fp, err := os.Open(path)
check(err)
defer fp.Close()

dec := json.NewDecoder(fp)
dec.DisallowUnknownFields()
var conf manifestutil.BuildConfig

check(dec.Decode(&conf))
if dec.More() {
fail(fmt.Sprintf("multiple configuration objects or extra data found in %q", path))
}
return conf
}

func makeManifest(
config manifestutil.BuildConfig,
config *buildconfig.BuildConfig,
imgType distro.ImageType,
distribution distro.Distro,
repos []rpmmd.RepoConfig,
Expand Down Expand Up @@ -234,7 +218,8 @@ func main() {
}
distroFac := distrofactory.NewDefault()

config := loadConfig(configFile)
config, err := buildconfig.New(configFile)
check(err)

if err := os.MkdirAll(outputDir, 0777); err != nil {
fail(fmt.Sprintf("failed to create target directory: %s", err.Error()))
Expand Down
60 changes: 23 additions & 37 deletions cmd/gen-manifests/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ import (

"github.com/gobwas/glob"

"github.com/osbuild/images/internal/buildconfig"
"github.com/osbuild/images/internal/cmdutil"
"github.com/osbuild/images/internal/manifestutil"
"github.com/osbuild/images/pkg/blueprint"
"github.com/osbuild/images/pkg/container"
"github.com/osbuild/images/pkg/distro"
Expand All @@ -44,11 +44,11 @@ func (mv *multiValue) Set(v string) error {
}

type buildRequest struct {
Distro string `json:"distro,omitempty"`
Arch string `json:"arch,omitempty"`
ImageType string `json:"image-type,omitempty"`
Repositories []rpmmd.RepoConfig `json:"repositories,omitempty"`
Config *manifestutil.BuildConfig `json:"config"`
Distro string `json:"distro,omitempty"`
Arch string `json:"arch,omitempty"`
ImageType string `json:"image-type,omitempty"`
Repositories []rpmmd.RepoConfig `json:"repositories,omitempty"`
Config *buildconfig.BuildConfig `json:"config"`
}

type BuildDependency struct {
Expand All @@ -58,22 +58,22 @@ type BuildDependency struct {

// BuildConfigs is a nested map representing the configs to use for each
// distro/arch/image-type. If any component is empty, it maps to all values.
type BuildConfigs map[string]map[string]map[string][]manifestutil.BuildConfig
type BuildConfigs map[string]map[string]map[string][]*buildconfig.BuildConfig

func (bc BuildConfigs) Insert(distro, arch, imageType string, cfg manifestutil.BuildConfig) {
func (bc BuildConfigs) Insert(distro, arch, imageType string, cfg *buildconfig.BuildConfig) {
distroCfgs := bc[distro]
if distroCfgs == nil {
distroCfgs = make(map[string]map[string][]manifestutil.BuildConfig)
distroCfgs = make(map[string]map[string][]*buildconfig.BuildConfig)
}

distroArchCfgs := distroCfgs[arch]
if distroArchCfgs == nil {
distroArchCfgs = make(map[string][]manifestutil.BuildConfig)
distroArchCfgs = make(map[string][]*buildconfig.BuildConfig)
}

distroArchItCfgs := distroArchCfgs[imageType]
if distroArchItCfgs == nil {
distroArchItCfgs = make([]manifestutil.BuildConfig, 0)
distroArchItCfgs = make([]*buildconfig.BuildConfig, 0)
}

distroArchItCfgs = append(distroArchItCfgs, cfg)
Expand All @@ -82,8 +82,8 @@ func (bc BuildConfigs) Insert(distro, arch, imageType string, cfg manifestutil.B
bc[distro] = distroCfgs
}

func (bc BuildConfigs) Get(distro, arch, imageType string) []manifestutil.BuildConfig {
configs := make([]manifestutil.BuildConfig, 0)
func (bc BuildConfigs) Get(distro, arch, imageType string) []*buildconfig.BuildConfig {
configs := make([]*buildconfig.BuildConfig, 0)
for distroName, distroCfgs := range bc {
distroGlob := glob.MustCompile(distroName)
if distroGlob.Match(distro) {
Expand All @@ -103,26 +103,6 @@ func (bc BuildConfigs) Get(distro, arch, imageType string) []manifestutil.BuildC
return configs
}

func loadConfig(path string) manifestutil.BuildConfig {
fp, err := os.Open(path)
if err != nil {
panic(fmt.Sprintf("failed to open config %q: %s", path, err.Error()))
}
defer fp.Close()

dec := json.NewDecoder(fp)
dec.DisallowUnknownFields()
var conf manifestutil.BuildConfig

if err := dec.Decode(&conf); err != nil {
panic(fmt.Sprintf("failed to unmarshal config %q: %s", path, err.Error()))
}
if dec.More() {
panic(fmt.Sprintf("multiple configuration objects or extra data found in %q", path))
}
return conf
}

func loadConfigMap(configPath string) BuildConfigs {
type configFilters struct {
ImageTypes []string `json:"image-types"`
Expand Down Expand Up @@ -162,7 +142,10 @@ func loadConfigMap(configPath string) BuildConfigs {
cfgDir := filepath.Dir(configPath)
path = filepath.Join(cfgDir, path)
}
config := loadConfig(path)
config, err := buildconfig.New(path)
if err != nil {
panic(err)
}
for _, d := range emptyFallback(filters.Distros) {
for _, a := range emptyFallback(filters.Arches) {
for _, it := range emptyFallback(filters.ImageTypes) {
Expand All @@ -180,15 +163,18 @@ func loadConfigMap(configPath string) BuildConfigs {
// image types.
func loadImgConfig(configPath string) BuildConfigs {
cm := make(BuildConfigs)
config := loadConfig(configPath)
config, err := buildconfig.New(configPath)
if err != nil {
panic(err)
}
cm.Insert("*", "*", "*", config)
return cm
}

type manifestJob func(chan string) error

func makeManifestJob(
bc manifestutil.BuildConfig,
bc *buildconfig.BuildConfig,
imgType distro.ImageType,
distribution distro.Distro,
repos []rpmmd.RepoConfig,
Expand Down Expand Up @@ -279,7 +265,7 @@ func makeManifestJob(
Arch: archName,
ImageType: imgType.Name(),
Repositories: repos,
Config: &bc,
Config: bc,
}
err = save(mf, packageSpecs, containerSpecs, commitSpecs, request, path, filename, metadata)
return
Expand Down
37 changes: 37 additions & 0 deletions internal/buildconfig/buildconfig.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package buildconfig

import (
"encoding/json"
"fmt"
"os"

"github.com/osbuild/images/pkg/blueprint"
"github.com/osbuild/images/pkg/distro"
)

type BuildConfig struct {
Name string `json:"name"`
Blueprint *blueprint.Blueprint `json:"blueprint,omitempty"`
Options distro.ImageOptions `json:"options"`
Depends interface{} `json:"depends,omitempty"` // ignored
}

func New(path string) (*BuildConfig, error) {
fp, err := os.Open(path)
if err != nil {
return nil, err
}
defer fp.Close()

dec := json.NewDecoder(fp)
dec.DisallowUnknownFields()
var conf BuildConfig

if err := dec.Decode(&conf); err != nil {
return nil, err
}
if dec.More() {
return nil, fmt.Errorf("multiple configuration objects or extra data found in %q", path)
}
return &conf, nil
}
13 changes: 0 additions & 13 deletions internal/manifestutil/manifest.go

This file was deleted.

0 comments on commit 0315a97

Please sign in to comment.