Blame internal/weldr/json.go

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