From df7a0fec22de619ecf62a96a8e1bcfff990b661a Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sat, 9 May 2020 23:23:35 +0200 Subject: [PATCH] store: merge the compose package into the store The types exposed by the compose package are only used in the store API, so move them there where they belong. Making the ownership of the types clear, rather than having them live in a package for themselves, will make it clearer how the types can be modified in follow-up commits. Also remove the JSON annotations, as these types are no longer used for serialization. Signed-off-by: Tom Gundersen --- internal/{compose => store}/compose.go | 29 ++++++++++++-------------- internal/store/fixtures.go | 19 ++++++++--------- internal/store/json.go | 11 +++++----- internal/store/store.go | 17 +++++++-------- internal/weldr/api.go | 3 +-- internal/weldr/api_test.go | 13 ++++++------ internal/weldr/compose.go | 4 ++-- 7 files changed, 44 insertions(+), 52 deletions(-) rename internal/{compose => store}/compose.go (71%) diff --git a/internal/compose/compose.go b/internal/store/compose.go similarity index 71% rename from internal/compose/compose.go rename to internal/store/compose.go index a6811534e..3b26214cd 100644 --- a/internal/compose/compose.go +++ b/internal/store/compose.go @@ -1,6 +1,4 @@ -// Package compose encapsulates the concept of a compose. It is a separate module from common, because it includes -// target which in turn includes common and thus it would create a cyclic dependency, which is forbidden in golang. -package compose +package store import ( "time" @@ -22,20 +20,19 @@ func (ste *StateTransitionError) Error() string { // ImageBuild represents a single image build inside a compose type ImageBuild struct { - Id int `json:"id"` - ImageType common.ImageType `json:"image_type"` - Manifest *osbuild.Manifest `json:"manifest"` - Targets []*target.Target `json:"targets"` - JobCreated time.Time `json:"job_created"` - JobStarted time.Time `json:"job_started"` - JobFinished time.Time `json:"job_finished"` - Size uint64 `json:"size"` - JobId uuid.UUID `json:"jobid,omitempty"` - + Id int + ImageType common.ImageType + Manifest *osbuild.Manifest + Targets []*target.Target + JobCreated time.Time + JobStarted time.Time + JobFinished time.Time + Size uint64 + JobId uuid.UUID // Kept for backwards compatibility. Image builds which were done // before the move to the job queue use this to store whether they // finished successfully. - QueueStatus common.ImageBuildState `json:"queue_status,omitempty"` + QueueStatus common.ImageBuildState } // DeepCopy creates a copy of the ImageBuild structure @@ -80,8 +77,8 @@ func (ib *ImageBuild) GetLocalTargetOptions() *target.LocalTargetOptions { // It contains all the information necessary to generate the inputs for the job, as // well as the job's state. type Compose struct { - Blueprint *blueprint.Blueprint `json:"blueprint"` - ImageBuilds []ImageBuild `json:"image_builds"` + Blueprint *blueprint.Blueprint + ImageBuilds []ImageBuild } // DeepCopy creates a copy of the Compose structure diff --git a/internal/store/fixtures.go b/internal/store/fixtures.go index b6a26b91c..bbcd819da 100644 --- a/internal/store/fixtures.go +++ b/internal/store/fixtures.go @@ -6,7 +6,6 @@ import ( "github.com/google/uuid" "github.com/osbuild/osbuild-composer/internal/blueprint" "github.com/osbuild/osbuild-composer/internal/common" - "github.com/osbuild/osbuild-composer/internal/compose" "github.com/osbuild/osbuild-composer/internal/target" ) @@ -50,10 +49,10 @@ func FixtureBase() *Store { s := New(nil) s.blueprints[bName] = b - s.composes = map[uuid.UUID]compose.Compose{ - uuid.MustParse("30000000-0000-0000-0000-000000000000"): compose.Compose{ + s.composes = map[uuid.UUID]Compose{ + uuid.MustParse("30000000-0000-0000-0000-000000000000"): Compose{ Blueprint: &b, - ImageBuilds: []compose.ImageBuild{ + ImageBuilds: []ImageBuild{ { QueueStatus: common.IBWaiting, ImageType: common.Qcow2Generic, @@ -62,9 +61,9 @@ func FixtureBase() *Store { }, }, }, - uuid.MustParse("30000000-0000-0000-0000-000000000001"): compose.Compose{ + uuid.MustParse("30000000-0000-0000-0000-000000000001"): Compose{ Blueprint: &b, - ImageBuilds: []compose.ImageBuild{ + ImageBuilds: []ImageBuild{ { QueueStatus: common.IBRunning, ImageType: common.Qcow2Generic, @@ -74,9 +73,9 @@ func FixtureBase() *Store { }, }, }, - uuid.MustParse("30000000-0000-0000-0000-000000000002"): compose.Compose{ + uuid.MustParse("30000000-0000-0000-0000-000000000002"): Compose{ Blueprint: &b, - ImageBuilds: []compose.ImageBuild{ + ImageBuilds: []ImageBuild{ { QueueStatus: common.IBFinished, ImageType: common.Qcow2Generic, @@ -87,9 +86,9 @@ func FixtureBase() *Store { }, }, }, - uuid.MustParse("30000000-0000-0000-0000-000000000003"): compose.Compose{ + uuid.MustParse("30000000-0000-0000-0000-000000000003"): Compose{ Blueprint: &b, - ImageBuilds: []compose.ImageBuild{ + ImageBuilds: []ImageBuild{ { QueueStatus: common.IBFailed, ImageType: common.Qcow2Generic, diff --git a/internal/store/json.go b/internal/store/json.go index 464e35fb5..01d64008a 100644 --- a/internal/store/json.go +++ b/internal/store/json.go @@ -8,7 +8,6 @@ import ( "github.com/google/uuid" "github.com/osbuild/osbuild-composer/internal/blueprint" "github.com/osbuild/osbuild-composer/internal/common" - "github.com/osbuild/osbuild-composer/internal/compose" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/target" ) @@ -91,18 +90,18 @@ func newWorkspaceFromV0(workspaceStruct workspaceV0) map[string]blueprint.Bluepr return workspace } -func newComposesFromV0(composesStruct composesV0) map[uuid.UUID]compose.Compose { - composes := make(map[uuid.UUID]compose.Compose) +func newComposesFromV0(composesStruct composesV0) map[uuid.UUID]Compose { + composes := make(map[uuid.UUID]Compose) for composeID, composeStruct := range composesStruct { - c := compose.Compose{ + c := Compose{ Blueprint: composeStruct.Blueprint, } if len(composeStruct.ImageBuilds) == 0 { panic("the was a compose with zero image builds, that is forbidden") } for _, imgBuild := range composeStruct.ImageBuilds { - ib := compose.ImageBuild{ + ib := ImageBuild{ Id: imgBuild.ID, ImageType: imgBuild.ImageType, Manifest: imgBuild.Manifest, @@ -229,7 +228,7 @@ func newStoreFromV0(storeStruct storeV0) *Store { return &store } -func newComposesV0(composes map[uuid.UUID]compose.Compose) composesV0 { +func newComposesV0(composes map[uuid.UUID]Compose) composesV0 { composesStruct := make(composesV0) for composeID, compose := range composes { c := composeV0{ diff --git a/internal/store/store.go b/internal/store/store.go index 67b6885c8..131e93217 100644 --- a/internal/store/store.go +++ b/internal/store/store.go @@ -18,7 +18,6 @@ import ( "sync" "time" - "github.com/osbuild/osbuild-composer/internal/compose" "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/jsondb" "github.com/osbuild/osbuild-composer/internal/osbuild" @@ -39,7 +38,7 @@ const StoreDBName = "state" type Store struct { blueprints map[string]blueprint.Blueprint workspace map[string]blueprint.Blueprint - composes map[uuid.UUID]compose.Compose + composes map[uuid.UUID]Compose sources map[string]SourceConfig blueprintsChanges map[string]map[string]blueprint.Change blueprintsCommits map[string][]string @@ -319,7 +318,7 @@ func (s *Store) TagBlueprint(name string) error { }) } -func (s *Store) GetCompose(id uuid.UUID) (compose.Compose, bool) { +func (s *Store) GetCompose(id uuid.UUID) (Compose, bool) { s.mu.RLock() defer s.mu.RUnlock() @@ -329,11 +328,11 @@ func (s *Store) GetCompose(id uuid.UUID) (compose.Compose, bool) { // GetAllComposes creates a deep copy of all composes present in this store // and returns them as a dictionary with compose UUIDs as keys -func (s *Store) GetAllComposes() map[uuid.UUID]compose.Compose { +func (s *Store) GetAllComposes() map[uuid.UUID]Compose { s.mu.RLock() defer s.mu.RUnlock() - composes := make(map[uuid.UUID]compose.Compose) + composes := make(map[uuid.UUID]Compose) for id, singleCompose := range s.composes { newCompose := singleCompose.DeepCopy() @@ -415,9 +414,9 @@ func (s *Store) PushCompose(composeID uuid.UUID, manifest *osbuild.Manifest, ima // FIXME: handle or comment this possible error _ = s.change(func() error { - s.composes[composeID] = compose.Compose{ + s.composes[composeID] = Compose{ Blueprint: bp, - ImageBuilds: []compose.ImageBuild{ + ImageBuilds: []ImageBuild{ { Manifest: manifest, ImageType: imageTypeCommon, @@ -474,9 +473,9 @@ func (s *Store) PushTestCompose(composeID uuid.UUID, manifest *osbuild.Manifest, // FIXME: handle or comment this possible error _ = s.change(func() error { - s.composes[composeID] = compose.Compose{ + s.composes[composeID] = Compose{ Blueprint: bp, - ImageBuilds: []compose.ImageBuild{ + ImageBuilds: []ImageBuild{ { QueueStatus: status, Manifest: manifest, diff --git a/internal/weldr/api.go b/internal/weldr/api.go index 96dcf779e..5922112e3 100644 --- a/internal/weldr/api.go +++ b/internal/weldr/api.go @@ -23,7 +23,6 @@ import ( "github.com/osbuild/osbuild-composer/internal/blueprint" "github.com/osbuild/osbuild-composer/internal/common" - "github.com/osbuild/osbuild-composer/internal/compose" "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/store" @@ -146,7 +145,7 @@ func (api *API) ServeHTTP(writer http.ResponseWriter, request *http.Request) { // Returns the state of the image in `compose` and the times the job was // queued, started, and finished. Assumes that there's only one image in the // compose. Returns CWaiting on error. -func (api *API) getComposeState(compose compose.Compose) (state common.ComposeState, queued, started, finished time.Time) { +func (api *API) getComposeState(compose store.Compose) (state common.ComposeState, queued, started, finished time.Time) { if len(compose.ImageBuilds) == 0 { return } diff --git a/internal/weldr/api_test.go b/internal/weldr/api_test.go index 876fb3a43..f7f2d6280 100644 --- a/internal/weldr/api_test.go +++ b/internal/weldr/api_test.go @@ -13,7 +13,6 @@ import ( "time" "github.com/osbuild/osbuild-composer/internal/common" - "github.com/osbuild/osbuild-composer/internal/compose" "github.com/osbuild/osbuild-composer/internal/target" "github.com/osbuild/osbuild-composer/internal/blueprint" @@ -434,7 +433,7 @@ func TestBlueprintsDepsolve(t *testing.T) { } func TestCompose(t *testing.T) { - expectedComposeLocal := &compose.Compose{ + expectedComposeLocal := &store.Compose{ Blueprint: &blueprint.Blueprint{ Name: "test", Version: "0.0.0", @@ -443,7 +442,7 @@ func TestCompose(t *testing.T) { Groups: []blueprint.Group{}, Customizations: nil, }, - ImageBuilds: []compose.ImageBuild{ + ImageBuilds: []store.ImageBuild{ { QueueStatus: common.IBWaiting, ImageType: common.Qcow2Generic, @@ -459,7 +458,7 @@ func TestCompose(t *testing.T) { }, }, } - expectedComposeLocalAndAws := &compose.Compose{ + expectedComposeLocalAndAws := &store.Compose{ Blueprint: &blueprint.Blueprint{ Name: "test", Version: "0.0.0", @@ -468,7 +467,7 @@ func TestCompose(t *testing.T) { Groups: []blueprint.Group{}, Customizations: nil, }, - ImageBuilds: []compose.ImageBuild{ + ImageBuilds: []store.ImageBuild{ { QueueStatus: common.IBWaiting, ImageType: common.Qcow2Generic, @@ -505,7 +504,7 @@ func TestCompose(t *testing.T) { Body string ExpectedStatus int ExpectedJSON string - ExpectedCompose *compose.Compose + ExpectedCompose *store.Compose IgnoreFields []string }{ {true, "POST", "/api/v0/compose", `{"blueprint_name": "http-server","compose_type": "qcow2","branch": "master"}`, http.StatusBadRequest, `{"status":false,"errors":[{"id":"UnknownBlueprint","msg":"Unknown blueprint name: http-server"}]}`, nil, []string{"build_id"}}, @@ -526,7 +525,7 @@ func TestCompose(t *testing.T) { require.Equalf(t, 1, len(composes), "%s: bad compose count in store", c.Path) // I have no idea how to get the compose in better way - var composeStruct compose.Compose + var composeStruct store.Compose for _, c := range composes { composeStruct = c break diff --git a/internal/weldr/compose.go b/internal/weldr/compose.go index ca0f7f6a3..678c18b5b 100644 --- a/internal/weldr/compose.go +++ b/internal/weldr/compose.go @@ -6,7 +6,7 @@ import ( "github.com/google/uuid" "github.com/osbuild/osbuild-composer/internal/common" - "github.com/osbuild/osbuild-composer/internal/compose" + "github.com/osbuild/osbuild-composer/internal/store" ) type ComposeEntry struct { @@ -22,7 +22,7 @@ type ComposeEntry struct { Uploads []uploadResponse `json:"uploads,omitempty"` } -func composeToComposeEntry(id uuid.UUID, compose compose.Compose, state common.ComposeState, queued, started, finished time.Time, includeUploads bool) *ComposeEntry { +func composeToComposeEntry(id uuid.UUID, compose store.Compose, state common.ComposeState, queued, started, finished time.Time, includeUploads bool) *ComposeEntry { var composeEntry ComposeEntry composeEntry.ID = id