Blame internal/weldr/json.go

Packit 63bb0d
// Package weldr - json contains Exported API request/response structures
Packit 63bb0d
// Copyright (C) 2020 by Red Hat, Inc.
Packit 63bb0d
package weldr
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"github.com/google/uuid"
Packit 63bb0d
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/blueprint"
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/common"
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/rpmmd"
Packit 63bb0d
	"github.com/osbuild/osbuild-composer/internal/store"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
// StatusV0 is the response to /api/status from a v0+ server
Packit 63bb0d
type StatusV0 struct {
Packit 63bb0d
	API           string   `json:"api"`
Packit 63bb0d
	DBSupported   bool     `json:"db_supported"`
Packit 63bb0d
	DBVersion     string   `json:"db_version"`
Packit 63bb0d
	SchemaVersion string   `json:"schema_version"`
Packit 63bb0d
	Backend       string   `json:"backend"`
Packit 63bb0d
	Build         string   `json:"build"`
Packit 63bb0d
	Messages      []string `json:"messages"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// BlueprintsListV0 is the response to /blueprints/list request
Packit 63bb0d
type BlueprintsListV0 struct {
Packit 63bb0d
	Total      uint     `json:"total"`
Packit 63bb0d
	Offset     uint     `json:"offset"`
Packit 63bb0d
	Limit      uint     `json:"limit"`
Packit 63bb0d
	Blueprints []string `json:"blueprints"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// ResponseError holds the API response error details
Packit 63bb0d
type ResponseError struct {
Packit 63bb0d
	Code int    `json:"code,omitempty"`
Packit 63bb0d
	ID   string `json:"id"`
Packit 63bb0d
	Msg  string `json:"msg"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// BlueprintsInfoV0 is the response to /blueprints/info?format=json request
Packit 63bb0d
type BlueprintsInfoV0 struct {
Packit 63bb0d
	Blueprints []blueprint.Blueprint `json:"blueprints"`
Packit 63bb0d
	Changes    []infoChange          `json:"changes"`
Packit 63bb0d
	Errors     []ResponseError       `json:"errors"`
Packit 63bb0d
}
Packit 63bb0d
type infoChange struct {
Packit 63bb0d
	Changed bool   `json:"changed"`
Packit 63bb0d
	Name    string `json:"name"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// BlueprintsChangesV0 is the response to /blueprints/changes/ request
Packit 63bb0d
type BlueprintsChangesV0 struct {
Packit 63bb0d
	BlueprintsChanges []bpChange      `json:"blueprints"`
Packit 63bb0d
	Errors            []ResponseError `json:"errors"`
Packit 63bb0d
	Limit             uint            `json:"limit"`
Packit 63bb0d
	Offset            uint            `json:"offset"`
Packit 63bb0d
}
Packit 63bb0d
type bpChange struct {
Packit 63bb0d
	Changes []blueprint.Change `json:"changes"`
Packit 63bb0d
	Name    string             `json:"name"`
Packit 63bb0d
	Total   int                `json:"total"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// BlueprintsDepsolveV0 is the response to /blueprints/depsolve/ request
Packit 63bb0d
type BlueprintsDepsolveV0 struct {
Packit 63bb0d
	Blueprints []depsolveEntry `json:"blueprints"`
Packit 63bb0d
	Errors     []ResponseError `json:"errors"`
Packit 63bb0d
}
Packit 63bb0d
type depsolveEntry struct {
Packit 63bb0d
	Blueprint    blueprint.Blueprint `json:"blueprint"`
Packit 63bb0d
	Dependencies []rpmmd.PackageSpec `json:"dependencies"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// BlueprintsFreezeV0 is the response to /blueprints/freeze/ request
Packit 63bb0d
type BlueprintsFreezeV0 struct {
Packit 63bb0d
	Blueprints []blueprintFrozen `json:"blueprints"`
Packit 63bb0d
	Errors     []ResponseError   `json:"errors"`
Packit 63bb0d
}
Packit 63bb0d
type blueprintFrozen struct {
Packit 63bb0d
	Blueprint blueprint.Blueprint `json:"blueprint"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceListV0 is the response to /source/list request
Packit 63bb0d
type SourceListV0 struct {
Packit 63bb0d
	Sources []string `json:"sources"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceListV1 is the response to /source/list request
Packit 63bb0d
type SourceListV1 struct {
Packit 63bb0d
	Sources []string `json:"sources"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceInfoV0 is the response to a /source/info request
Packit 63bb0d
type SourceInfoV0 struct {
Packit 63bb0d
	Sources map[string]SourceConfigV0 `json:"sources"`
Packit 63bb0d
	Errors  []ResponseError           `json:"errors"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceConfig returns a SourceConfig struct populated with the supported variables
Packit 63bb0d
func (s *SourceInfoV0) SourceConfig(sourceName string) (ssc store.SourceConfig, ok bool) {
Packit 63bb0d
	si, ok := s.Sources[sourceName]
Packit 63bb0d
	if !ok {
Packit 63bb0d
		return ssc, false
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	return si.SourceConfig(), true
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceConfig interface defines the common functions needed to query the SourceConfigV0/V1 structs
Packit 63bb0d
type SourceConfig interface {
Packit 63bb0d
	GetKey() string
Packit 63bb0d
	GetName() string
Packit 63bb0d
	GetType() string
Packit 63bb0d
	SourceConfig() store.SourceConfig
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// NewSourceConfigV0 converts a store.SourceConfig to a SourceConfigV0
Packit 63bb0d
// The store does not support proxy and gpgkey_urls
Packit 63bb0d
func NewSourceConfigV0(s store.SourceConfig) SourceConfigV0 {
Packit 63bb0d
	var sc SourceConfigV0
Packit 63bb0d
Packit 63bb0d
	sc.Name = s.Name
Packit 63bb0d
	sc.Type = s.Type
Packit 63bb0d
	sc.URL = s.URL
Packit 63bb0d
	sc.CheckGPG = s.CheckGPG
Packit 63bb0d
	sc.CheckSSL = s.CheckSSL
Packit 63bb0d
	sc.System = s.System
Packit 63bb0d
Packit 63bb0d
	return sc
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceConfigV0 holds the source repository information
Packit 63bb0d
type SourceConfigV0 struct {
Packit 63bb0d
	Name     string   `json:"name" toml:"name"`
Packit 63bb0d
	Type     string   `json:"type" toml:"type"`
Packit 63bb0d
	URL      string   `json:"url" toml:"url"`
Packit 63bb0d
	CheckGPG bool     `json:"check_gpg" toml:"check_gpg"`
Packit 63bb0d
	CheckSSL bool     `json:"check_ssl" toml:"check_ssl"`
Packit 63bb0d
	System   bool     `json:"system" toml:"system"`
Packit 63bb0d
	Proxy    string   `json:"proxy,omitempty" toml:"proxy,omitempty"`
Packit 63bb0d
	GPGUrls  []string `json:"gpgkey_urls,omitempty" toml:"gpgkey_urls,omitempty"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Key return the key, .Name in this case
Packit 63bb0d
func (s SourceConfigV0) GetKey() string {
Packit 63bb0d
	return s.Name
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Name return the .Name field
Packit 63bb0d
func (s SourceConfigV0) GetName() string {
Packit 63bb0d
	return s.Name
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Type return the .Type field
Packit 63bb0d
func (s SourceConfigV0) GetType() string {
Packit 63bb0d
	return s.Type
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceConfig returns a SourceConfig struct populated with the supported variables
Packit 63bb0d
// The store does not support proxy and gpgkey_urls
Packit 63bb0d
func (s SourceConfigV0) SourceConfig() (ssc store.SourceConfig) {
Packit 63bb0d
	ssc.Name = s.Name
Packit 63bb0d
	ssc.Type = s.Type
Packit 63bb0d
	ssc.URL = s.URL
Packit 63bb0d
	ssc.CheckGPG = s.CheckGPG
Packit 63bb0d
	ssc.CheckSSL = s.CheckSSL
Packit 63bb0d
Packit 63bb0d
	return ssc
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceInfoResponseV0
Packit 63bb0d
type SourceInfoResponseV0 struct {
Packit 63bb0d
	Sources map[string]SourceConfigV0 `json:"sources"`
Packit 63bb0d
	Errors  []responseError           `json:"errors"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// NewSourceConfigV1 converts a store.SourceConfig to a SourceConfigV1
Packit 63bb0d
// The store does not support proxy and gpgkey_urls
Packit 63bb0d
func NewSourceConfigV1(id string, s store.SourceConfig) SourceConfigV1 {
Packit 63bb0d
	var sc SourceConfigV1
Packit 63bb0d
Packit 63bb0d
	sc.ID = id
Packit 63bb0d
	sc.Name = s.Name
Packit 63bb0d
	sc.Type = s.Type
Packit 63bb0d
	sc.URL = s.URL
Packit 63bb0d
	sc.CheckGPG = s.CheckGPG
Packit 63bb0d
	sc.CheckSSL = s.CheckSSL
Packit 63bb0d
	sc.System = s.System
Packit 63bb0d
Packit 63bb0d
	return sc
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceConfigV1 holds the source repository information
Packit 63bb0d
type SourceConfigV1 struct {
Packit 63bb0d
	ID       string   `json:"id" toml:"id"`
Packit 63bb0d
	Name     string   `json:"name" toml:"name"`
Packit 63bb0d
	Type     string   `json:"type" toml:"type"`
Packit 63bb0d
	URL      string   `json:"url" toml:"url"`
Packit 63bb0d
	CheckGPG bool     `json:"check_gpg" toml:"check_gpg"`
Packit 63bb0d
	CheckSSL bool     `json:"check_ssl" toml:"check_ssl"`
Packit 63bb0d
	System   bool     `json:"system" toml:"system"`
Packit 63bb0d
	Proxy    string   `json:"proxy,omitempty" toml:"proxy,omitempty"`
Packit 63bb0d
	GPGUrls  []string `json:"gpgkey_urls,omitempty" toml:"gpgkey_urls,omitempty"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Key returns the key, .ID in this case
Packit 63bb0d
func (s SourceConfigV1) GetKey() string {
Packit 63bb0d
	return s.ID
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Name return the .Name field
Packit 63bb0d
func (s SourceConfigV1) GetName() string {
Packit 63bb0d
	return s.Name
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Type return the .Type field
Packit 63bb0d
func (s SourceConfigV1) GetType() string {
Packit 63bb0d
	return s.Type
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceConfig returns a SourceConfig struct populated with the supported variables
Packit 63bb0d
// The store does not support proxy and gpgkey_urls
Packit 63bb0d
func (s SourceConfigV1) SourceConfig() (ssc store.SourceConfig) {
Packit 63bb0d
	ssc.Name = s.Name
Packit 63bb0d
	ssc.Type = s.Type
Packit 63bb0d
	ssc.URL = s.URL
Packit 63bb0d
	ssc.CheckGPG = s.CheckGPG
Packit 63bb0d
	ssc.CheckSSL = s.CheckSSL
Packit 63bb0d
Packit 63bb0d
	return ssc
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// SourceInfoResponseV1
Packit 63bb0d
type SourceInfoResponseV1 struct {
Packit 63bb0d
	Sources map[string]SourceConfigV1 `json:"sources"`
Packit 63bb0d
	Errors  []responseError           `json:"errors"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// ProjectsListV0 is the response to /projects/list request
Packit 63bb0d
type ProjectsListV0 struct {
Packit 63bb0d
	Total    uint                `json:"total"`
Packit 63bb0d
	Offset   uint                `json:"offset"`
Packit 63bb0d
	Limit    uint                `json:"limit"`
Packit 63bb0d
	Projects []rpmmd.PackageInfo `json:"projects"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// ProjectsInfoV0 is the response to /projects/info request
Packit 63bb0d
type ProjectsInfoV0 struct {
Packit 63bb0d
	Projects []rpmmd.PackageInfo `json:"projects"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// ProjectsDependenciesV0 is the response to /projects/depsolve request
Packit 63bb0d
type ProjectsDependenciesV0 struct {
Packit 63bb0d
	Projects []rpmmd.PackageSpec `json:"projects"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type ModuleName struct {
Packit 63bb0d
	Name      string `json:"name"`
Packit 63bb0d
	GroupType string `json:"group_type"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type ModulesListV0 struct {
Packit 63bb0d
	Total   uint         `json:"total"`
Packit 63bb0d
	Offset  uint         `json:"offset"`
Packit 63bb0d
	Limit   uint         `json:"limit"`
Packit 63bb0d
	Modules []ModuleName `json:"modules"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// ModulesInfoV0 is the response to /modules/info request
Packit 63bb0d
type ModulesInfoV0 struct {
Packit 63bb0d
	Modules []rpmmd.PackageInfo `json:"modules"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type ComposeRequestV0 struct {
Packit 63bb0d
	BlueprintName string `json:"blueprint_name"`
Packit 63bb0d
	ComposeType   string `json:"compose_type"`
Packit 63bb0d
	Branch        string `json:"branch"`
Packit 63bb0d
}
Packit 63bb0d
type ComposeResponseV0 struct {
Packit 63bb0d
	BuildID uuid.UUID `json:"build_id"`
Packit 63bb0d
	Status  bool      `json:"status"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// This is similar to weldr.ComposeEntry but different because internally the image types are capitalized
Packit 63bb0d
type ComposeEntryV0 struct {
Packit 63bb0d
	ID          uuid.UUID              `json:"id"`
Packit 63bb0d
	Blueprint   string                 `json:"blueprint"`
Packit 63bb0d
	Version     string                 `json:"version"`
Packit 63bb0d
	ComposeType string                 `json:"compose_type"`
Packit 63bb0d
	ImageSize   uint64                 `json:"image_size"` // This is user-provided image size, not actual file size
Packit 63bb0d
	QueueStatus common.ImageBuildState `json:"queue_status"`
Packit 63bb0d
	JobCreated  float64                `json:"job_created"`
Packit 63bb0d
	JobStarted  float64                `json:"job_started,omitempty"`
Packit 63bb0d
	JobFinished float64                `json:"job_finished,omitempty"`
Packit 63bb0d
	Uploads     []uploadResponse       `json:"uploads,omitempty"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type ComposeFinishedResponseV0 struct {
Packit 63bb0d
	Finished []ComposeEntryV0 `json:"finished"`
Packit 63bb0d
}
Packit 63bb0d
type ComposeFailedResponseV0 struct {
Packit 63bb0d
	Failed []ComposeEntryV0 `json:"failed"`
Packit 63bb0d
}
Packit 63bb0d
type ComposeStatusResponseV0 struct {
Packit 63bb0d
	UUIDs []ComposeEntryV0 `json:"uuids"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type ComposeTypeV0 struct {
Packit 63bb0d
	Name    string `json:"name"`
Packit 63bb0d
	Enabled bool   `json:"enabled"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type ComposeTypesResponseV0 struct {
Packit 63bb0d
	Types []ComposeTypeV0 `json:"types"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type DeleteComposeStatusV0 struct {
Packit 63bb0d
	UUID   uuid.UUID `json:"uuid"`
Packit 63bb0d
	Status bool      `json:"status"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type DeleteComposeResponseV0 struct {
Packit 63bb0d
	UUIDs  []DeleteComposeStatusV0 `json:"uuids"`
Packit 63bb0d
	Errors []ResponseError         `json:"errors"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type CancelComposeStatusV0 struct {
Packit 63bb0d
	UUID   uuid.UUID `json:"uuid"`
Packit 63bb0d
	Status bool      `json:"status"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// NOTE: This does not include the lorax-composer specific 'config' field
Packit 63bb0d
type ComposeInfoResponseV0 struct {
Packit 63bb0d
	ID        uuid.UUID            `json:"id"`
Packit 63bb0d
	Blueprint *blueprint.Blueprint `json:"blueprint"` // blueprint not frozen!
Packit 63bb0d
	Commit    string               `json:"commit"`    // empty for now
Packit 63bb0d
	Deps      struct {
Packit 63bb0d
		Packages []rpmmd.Package `json:"packages"`
Packit 63bb0d
	} `json:"deps"`
Packit 63bb0d
	ComposeType string           `json:"compose_type"`
Packit 63bb0d
	QueueStatus string           `json:"queue_status"`
Packit 63bb0d
	ImageSize   uint64           `json:"image_size"`
Packit 63bb0d
	Uploads     []uploadResponse `json:"uploads,omitempty"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
type ComposeQueueResponseV0 struct {
Packit 63bb0d
	New []ComposeEntryV0 `json:"new"`
Packit 63bb0d
	Run []ComposeEntryV0 `json:"run"`
Packit 63bb0d
}