Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
b49daf0
pkg/rpmmd: Remove `BaseURL` from `Package` struct
thozza Dec 1, 2025
e6a445e
pkg/rpmmd: add Package.NVR() helper
thozza Dec 3, 2025
31134ff
pkg/depsolvednf: unit test for Solver.FetchMetadata()
thozza Dec 3, 2025
9400f18
pkg/depsolvednf: unit test for Solver.SearchMetadata()
thozza Dec 3, 2025
2a7dc44
pkg/depsolvednf: remove unused `ParseError()` function
thozza Dec 1, 2025
bf0251d
pkg/depsolvednf: extract pkgSet validation from makeDepsolveRequest
thozza Dec 1, 2025
d76b960
pkg/depsolvednf: extract RHSM subscription check from reposFromRPMMD()
thozza Dec 2, 2025
376026f
pkg/depsolvednf: decouple parseError() from request wire-format
thozza Dec 2, 2025
8c4b9f4
pkg/depsolvednf: don't return `rhsmMap` from makeDepsolveRequest()
thozza Dec 2, 2025
154dd1a
pkg/depsolvednf: make optionalMetadataForDistro() a standalone func
thozza Dec 2, 2025
25b8429
pkg/depsolvednf: add DumpResult and SearchResult structs
thozza Dec 2, 2025
a9e15be
pkg/depsolvednf: introduce apiHandler interface
thozza Dec 2, 2025
27fee5c
pkg/depsolvednf: add v1 API apiHandler interface implementation
thozza Dec 2, 2025
7c02488
pkg/depsolvednf: set activeHandler to v1Handler on package init
thozza Dec 2, 2025
58d21b9
pkg/depsolvednf: add helper to get solverConfig
thozza Dec 2, 2025
123be27
pkg/depsolvednf: change run() to accept []byte for the request
thozza Dec 2, 2025
1c300ef
pkg/depsolvednf: replace Request.Hash() with hashRequest() helper
thozza Dec 2, 2025
8412938
pkg/depsolvednf: migrate Depsolve() to use activeHandler
thozza Dec 2, 2025
4a09aaf
pkg/depsolvednf: migrate FetchMetadata() to use activeHandler
thozza Dec 2, 2025
1f3a434
pkg/depsolvednf: migrate SearchMetadata() to use activeHandler
thozza Dec 2, 2025
19a79cc
pkg/depsolvednf: remove old v1 types and methods from depsolvednf.go
thozza Dec 3, 2025
b37aa65
pkg/depsolvednf: extract applyRHSMSecrets() and add unit test
thozza Dec 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions pkg/depsolvednf/api.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package depsolvednf

import (
"encoding/json"

"github.com/osbuild/images/pkg/rhsm"
"github.com/osbuild/images/pkg/rpmmd"
"github.com/osbuild/images/pkg/sbom"
)

// depsolveResultRaw is the internal result type returned by handlers.
// It contains packages with mtls secrets set (from response SSLClientKey),
// but NOT rhsm secrets (applied by Solver from rpmmd.RepoConfig.RHSM).
// It also contains raw SBOM data (Solver is responsible for creating
// sbom.Document).
type depsolveResultRaw struct {
Packages rpmmd.PackageList
Modules []rpmmd.ModuleSpec
Repos []rpmmd.RepoConfig
Solver string
SBOMRaw json.RawMessage
}

// apiHandler defines the interface for API version implementations.
// Each API version implements this interface to handle request building
// and response parsing for the osbuild-depsolve-dnf API.
type apiHandler interface {
// makeDepsolveRequest builds the depsolve request as serialized JSON.
makeDepsolveRequest(cfg *solverConfig, pkgSets []rpmmd.PackageSet, sbomType sbom.StandardType) ([]byte, error)

// makeDumpRequest builds the metadata dump request as serialized JSON.
makeDumpRequest(cfg *solverConfig, repos []rpmmd.RepoConfig) ([]byte, error)

// makeSearchRequest builds the package search request as serialized JSON.
makeSearchRequest(cfg *solverConfig, repos []rpmmd.RepoConfig, packages []string) ([]byte, error)

// parseDepsolveResult parses depsolve output into depsolveResultRaw.
parseDepsolveResult(output []byte) (*depsolveResultRaw, error)

// parseDumpResult parses dump output into a DumpResult.
parseDumpResult(output []byte) (*DumpResult, error)

// parseSearchResult parses search output into a SearchResult.
parseSearchResult(output []byte) (*SearchResult, error)
}

// solverConfig contains solver configuration passed to API handlers.
// This provides handlers with necessary context without coupling them
// to the Solver type directly.
type solverConfig struct {
modulePlatformID string
arch string
releaseVer string
cacheDir string
rootDir string
proxy string
subscriptions *rhsm.Subscriptions
}

// activeHandler is the currently active API handler implementation.
var activeHandler apiHandler

func init() {
activeHandler = newV1Handler()
}
Loading
Loading