Skip to content

Commit 32e1c66

Browse files
committed
add context type same throughout
Signed-off-by: Vivek Kumar Sahu <[email protected]>
1 parent 32cc408 commit 32e1c66

20 files changed

+130
-103
lines changed

pkg/engine/transfer.go

+15-15
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func TransferRun(ctx context.Context, cmd *cobra.Command, config types.Config) e
4242
var inputAdapterInstance, outputAdapterInstance adapter.Adapter
4343
var err error
4444

45-
adapters, iAdp, oAdp, err := adapter.NewAdapter(transferCtx, config)
45+
adapters, iAdp, oAdp, err := adapter.NewAdapter(*transferCtx, config)
4646
if err != nil {
4747
return fmt.Errorf("failed to initialize adapters: %v", err)
4848
}
@@ -82,7 +82,7 @@ func TransferRun(ctx context.Context, cmd *cobra.Command, config types.Config) e
8282
return fmt.Errorf("input adapter %s does not support daemon mode", config.SourceAdapter)
8383
}
8484
} else {
85-
sbomIterator, err = inputAdapterInstance.FetchSBOMs(transferCtx)
85+
sbomIterator, err = inputAdapterInstance.FetchSBOMs(*transferCtx)
8686
if err != nil {
8787
return fmt.Errorf("failed to fetch SBOMs: %w", err)
8888
}
@@ -97,10 +97,10 @@ func TransferRun(ctx context.Context, cmd *cobra.Command, config types.Config) e
9797
}
9898

9999
var convertedIterator iterator.SBOMIterator
100-
convertedIterator = sbomProcessing(transferCtx, config, sbomIterator)
100+
convertedIterator = sbomProcessing(*transferCtx, config, sbomIterator)
101101

102102
// Process & Upload SBOMs Sequentially
103-
if err := outputAdapterInstance.UploadSBOMs(transferCtx, convertedIterator); err != nil {
103+
if err := outputAdapterInstance.UploadSBOMs(*transferCtx, convertedIterator); err != nil {
104104
return fmt.Errorf("failed to output SBOMs: %w", err)
105105
}
106106

@@ -112,7 +112,7 @@ func dryRun(ctx tcontext.TransferMetadata, sbomIterator iterator.SBOMIterator, i
112112
// Step 1: Store SBOMs in memory (avoid consuming iterator)
113113
var sboms []*iterator.SBOM
114114
for {
115-
sbom, err := sbomIterator.Next(ctx.Context)
115+
sbom, err := sbomIterator.Next(ctx)
116116
if err == io.EOF {
117117
break
118118
}
@@ -126,14 +126,14 @@ func dryRun(ctx tcontext.TransferMetadata, sbomIterator iterator.SBOMIterator, i
126126

127127
fmt.Println("-----------------🌐 INPUT ADAPTER DRY-RUN OUTPUT 🌐-----------------")
128128
// Step 2: Use stored SBOMs for input dry-run
129-
if err := input.DryRun(&ctx, iterator.NewMemoryIterator(sboms)); err != nil {
129+
if err := input.DryRun(ctx, iterator.NewMemoryIterator(sboms)); err != nil {
130130
return fmt.Errorf("failed to execute dry-run mode for input adapter: %v", err)
131131
}
132132
fmt.Println()
133133
fmt.Println("-----------------🌐 OUTPUT ADAPTER DRY-RUN OUTPUT 🌐-----------------")
134134

135135
// Step 3: Use the same stored SBOMs for output dry-run
136-
if err := output.DryRun(&ctx, iterator.NewMemoryIterator(sboms)); err != nil {
136+
if err := output.DryRun(ctx, iterator.NewMemoryIterator(sboms)); err != nil {
137137
return fmt.Errorf("failed to execute dry-run mode for output adapter: %v", err)
138138
}
139139

@@ -147,7 +147,7 @@ func sbomConversion(sbomIterator iterator.SBOMIterator, transferCtx tcontext.Tra
147147
var totalMinifiedSBOM int
148148
var totalSBOM int
149149
for {
150-
sbom, err := sbomIterator.Next(transferCtx.Context)
150+
sbom, err := sbomIterator.Next(transferCtx)
151151
if err == io.EOF {
152152
break
153153
}
@@ -184,20 +184,20 @@ func sbomConversion(sbomIterator iterator.SBOMIterator, transferCtx tcontext.Tra
184184
return convertedSBOMs
185185
}
186186

187-
func sbomProcessing(transferCtx *tcontext.TransferMetadata, config types.Config, sbomIterator iterator.SBOMIterator) iterator.SBOMIterator {
188-
logger.LogDebug(transferCtx.Context, "Checking adapter eligibility for undergoing conversion layer", "adapter type", config.DestinationAdapter)
187+
func sbomProcessing(ctx tcontext.TransferMetadata, config types.Config, sbomIterator iterator.SBOMIterator) iterator.SBOMIterator {
188+
logger.LogDebug(ctx.Context, "Checking adapter eligibility for undergoing conversion layer", "adapter type", config.DestinationAdapter)
189189

190190
// convert sbom to cdx for DTrack adapter only
191191
if types.AdapterType(config.DestinationAdapter) == types.DtrackAdapterType {
192-
logger.LogDebug(transferCtx.Context, "Adapter eligible for conversion layer", "adapter type", config.DestinationAdapter)
192+
logger.LogDebug(ctx.Context, "Adapter eligible for conversion layer", "adapter type", config.DestinationAdapter)
193193

194-
logger.LogDebug(transferCtx.Context, "SBOM conversion will take place")
195-
convertedSBOMs := sbomConversion(sbomIterator, *transferCtx)
194+
logger.LogDebug(ctx.Context, "SBOM conversion will take place")
195+
convertedSBOMs := sbomConversion(sbomIterator, ctx)
196196

197197
return iterator.NewMemoryIterator(convertedSBOMs)
198198
} else {
199-
logger.LogDebug(transferCtx.Context, "Adapter accept both SPDX and CDX SBOM, therefore doesn't require conversion layer", "adapter type", config.DestinationAdapter)
200-
logger.LogDebug(transferCtx.Context, "SBOM conversion will not take place")
199+
logger.LogDebug(ctx.Context, "Adapter accept both SPDX and CDX SBOM, therefore doesn't require conversion layer", "adapter type", config.DestinationAdapter)
200+
logger.LogDebug(ctx.Context, "SBOM conversion will not take place")
201201
return sbomIterator
202202
}
203203
}

pkg/iterator/iterator.go

+32-3
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
package iterator
1717

1818
import (
19-
"context"
2019
"io"
20+
21+
"github.com/interlynk-io/sbommv/pkg/converter"
22+
"github.com/interlynk-io/sbommv/pkg/logger"
23+
"github.com/interlynk-io/sbommv/pkg/tcontext"
2124
)
2225

2326
// SBOM represents a single SBOM file
@@ -31,7 +34,7 @@ type SBOM struct {
3134

3235
// SBOMIterator provides a way to lazily fetch SBOMs one by one
3336
type SBOMIterator interface {
34-
Next(ctx context.Context) (*SBOM, error) // Fetch the next SBOM
37+
Next(ctx tcontext.TransferMetadata) (*SBOM, error) // Fetch the next SBOM
3538
}
3639

3740
// MemoryIterator is an iterator that iterates over a preloaded slice of SBOMs.
@@ -49,7 +52,7 @@ func NewMemoryIterator(sboms []*SBOM) SBOMIterator {
4952
}
5053

5154
// Next retrieves the next SBOM in memory.
52-
func (it *MemoryIterator) Next(ctx context.Context) (*SBOM, error) {
55+
func (it *MemoryIterator) Next(ctx tcontext.TransferMetadata) (*SBOM, error) {
5356
if it.index >= len(it.sboms) {
5457
return nil, io.EOF // No more SBOMs left
5558
}
@@ -58,3 +61,29 @@ func (it *MemoryIterator) Next(ctx context.Context) (*SBOM, error) {
5861
it.index++
5962
return sbom, nil
6063
}
64+
65+
type ConvertedIterator struct {
66+
inner SBOMIterator
67+
targetFormat converter.FormatSpec
68+
}
69+
70+
func NewConvertedIterator(inner SBOMIterator, targetFormat converter.FormatSpec) *ConvertedIterator {
71+
return &ConvertedIterator{
72+
inner: inner,
73+
targetFormat: targetFormat,
74+
}
75+
}
76+
77+
func (ci *ConvertedIterator) Next(ctx tcontext.TransferMetadata) (*SBOM, error) {
78+
sbom, err := ci.inner.Next(ctx)
79+
if err != nil {
80+
return nil, err
81+
}
82+
convertedData, err := converter.ConvertSBOM(ctx, sbom.Data, ci.targetFormat)
83+
if err != nil {
84+
logger.LogInfo(ctx.Context, "Failed to convert SBOM", "file", sbom.Path, "error", err)
85+
return sbom, nil // Fallback to original on error
86+
}
87+
sbom.Data = convertedData
88+
return sbom, nil
89+
}

pkg/source/folder/adapter.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@ func (f *FolderAdapter) ParseAndValidateParams(cmd *cobra.Command) error {
107107
}
108108

109109
// FetchSBOMs initializes the Folder SBOM iterator using the unified method
110-
func (f *FolderAdapter) FetchSBOMs(ctx *tcontext.TransferMetadata) (iterator.SBOMIterator, error) {
110+
func (f *FolderAdapter) FetchSBOMs(ctx tcontext.TransferMetadata) (iterator.SBOMIterator, error) {
111111
logger.LogDebug(ctx.Context, "Initializing SBOM fetching", "mode", f.Config.ProcessingMode)
112112
return f.Fetcher.Fetch(ctx, f.Config)
113113
}
114114

115-
func (f *FolderAdapter) Monitor(ctx *tcontext.TransferMetadata) (iterator.SBOMIterator, error) {
115+
func (f *FolderAdapter) Monitor(ctx tcontext.TransferMetadata) (iterator.SBOMIterator, error) {
116116
if !f.Config.Daemon {
117117
return nil, fmt.Errorf("daemon mode not enabled for folder adapter")
118118
}
@@ -122,12 +122,12 @@ func (f *FolderAdapter) Monitor(ctx *tcontext.TransferMetadata) (iterator.SBOMIt
122122
}
123123

124124
// OutputSBOMs should return an error since Folder does not support SBOM uploads
125-
func (f *FolderAdapter) UploadSBOMs(ctx *tcontext.TransferMetadata, iterator iterator.SBOMIterator) error {
125+
func (f *FolderAdapter) UploadSBOMs(ctx tcontext.TransferMetadata, iterator iterator.SBOMIterator) error {
126126
return fmt.Errorf("Folder adapter does not support SBOM uploading")
127127
}
128128

129129
// DryRun for Folder Adapter: Displays all fetched SBOMs from folder adapter
130-
func (f *FolderAdapter) DryRun(ctx *tcontext.TransferMetadata, iter iterator.SBOMIterator) error {
130+
func (f *FolderAdapter) DryRun(ctx tcontext.TransferMetadata, iter iterator.SBOMIterator) error {
131131
reporter := NewFolderReporter(false, "")
132-
return reporter.DryRun(ctx.Context, iter)
132+
return reporter.DryRun(ctx, iter)
133133
}

pkg/source/folder/fetcher.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import (
3131
)
3232

3333
type SBOMFetcher interface {
34-
Fetch(ctx *tcontext.TransferMetadata, config *FolderConfig) (iterator.SBOMIterator, error)
34+
Fetch(ctx tcontext.TransferMetadata, config *FolderConfig) (iterator.SBOMIterator, error)
3535
}
3636

3737
type SequentialFetcher struct{}
@@ -40,7 +40,7 @@ type SequentialFetcher struct{}
4040
// 1. Walks through the folder file-by-file
4141
// 2. Detects valid SBOMs using source.IsSBOMFile().
4242
// 3. Reads the content & adds it to the iterator along with path.
43-
func (f *SequentialFetcher) Fetch(ctx *tcontext.TransferMetadata, config *FolderConfig) (iterator.SBOMIterator, error) {
43+
func (f *SequentialFetcher) Fetch(ctx tcontext.TransferMetadata, config *FolderConfig) (iterator.SBOMIterator, error) {
4444
logger.LogDebug(ctx.Context, "Fetching SBOMs Sequentially")
4545

4646
var sbomList []*iterator.SBOM
@@ -89,7 +89,7 @@ type ParallelFetcher struct{}
8989
// Fetch scans the folder for SBOMs concurrently.
9090
// It walks through the directory to collect file paths, then spawns a fixed number of worker goroutines
9191
// to read and process those files concurrently.
92-
func (f *ParallelFetcher) Fetch(ctx *tcontext.TransferMetadata, config *FolderConfig) (iterator.SBOMIterator, error) {
92+
func (f *ParallelFetcher) Fetch(ctx tcontext.TransferMetadata, config *FolderConfig) (iterator.SBOMIterator, error) {
9393
logger.LogDebug(ctx.Context, "Fetching SBOMs Parallely")
9494
filePaths := make(chan string, 100)
9595
var wg sync.WaitGroup

pkg/source/folder/iterator.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
package folder
1616

1717
import (
18-
"context"
1918
"fmt"
2019
"io"
2120

2221
"github.com/interlynk-io/sbommv/pkg/iterator"
22+
"github.com/interlynk-io/sbommv/pkg/tcontext"
2323
)
2424

2525
// FolderIterator iterates over SBOMs found in a folder
@@ -37,7 +37,7 @@ func NewFolderIterator(sboms []*iterator.SBOM) *FolderIterator {
3737
}
3838

3939
// Next retrieves the next SBOM in the iteration
40-
func (it *FolderIterator) Next(ctx context.Context) (*iterator.SBOM, error) {
40+
func (it *FolderIterator) Next(ctx tcontext.TransferMetadata) (*iterator.SBOM, error) {
4141
if it.index >= len(it.sboms) {
4242
return nil, io.EOF
4343
}
@@ -52,7 +52,7 @@ type WatcherIterator struct {
5252
sbomChan chan *iterator.SBOM
5353
}
5454

55-
func (it *WatcherIterator) Next(ctx context.Context) (*iterator.SBOM, error) {
55+
func (it *WatcherIterator) Next(ctx tcontext.TransferMetadata) (*iterator.SBOM, error) {
5656
select {
5757
case sbom, ok := <-it.sbomChan:
5858
if !ok {

pkg/source/folder/reporter.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
package folder
1717

1818
import (
19-
"context"
2019
"fmt"
2120
"io"
2221

2322
"github.com/interlynk-io/sbommv/pkg/iterator"
2423
"github.com/interlynk-io/sbommv/pkg/logger"
2524
"github.com/interlynk-io/sbommv/pkg/sbom"
25+
"github.com/interlynk-io/sbommv/pkg/tcontext"
2626
)
2727

2828
type FolderReporter struct {
@@ -34,8 +34,8 @@ func NewFolderReporter(verbose bool, outputDir string) *FolderReporter {
3434
return &FolderReporter{verbose: verbose, outputDir: outputDir}
3535
}
3636

37-
func (r *FolderReporter) DryRun(ctx context.Context, iter iterator.SBOMIterator) error {
38-
logger.LogDebug(ctx, "Dry-run mode: Displaying SBOMs fetched from folder")
37+
func (r *FolderReporter) DryRun(ctx tcontext.TransferMetadata, iter iterator.SBOMIterator) error {
38+
logger.LogDebug(ctx.Context, "Dry-run mode: Displaying SBOMs fetched from folder")
3939
processor := sbom.NewSBOMProcessor(r.outputDir, r.verbose)
4040
sbomCount := 0
4141
fmt.Println("\n📦 Details of all Fetched SBOMs by Folder Input Adapter")
@@ -46,18 +46,18 @@ func (r *FolderReporter) DryRun(ctx context.Context, iter iterator.SBOMIterator)
4646
break
4747
}
4848
if err != nil {
49-
logger.LogError(ctx, err, "Error retrieving SBOM from iterator")
49+
logger.LogError(ctx.Context, err, "Error retrieving SBOM from iterator")
5050
return err
5151
}
5252
processor.Update(sbom.Data, "", sbom.Path)
5353
doc, err := processor.ProcessSBOMs()
5454
if err != nil {
55-
logger.LogError(ctx, err, "Failed to process SBOM")
55+
logger.LogError(ctx.Context, err, "Failed to process SBOM")
5656
return err
5757
}
5858
if r.outputDir != "" {
5959
if err := processor.WriteSBOM(doc, ""); err != nil {
60-
logger.LogError(ctx, err, "Failed to write SBOM")
60+
logger.LogError(ctx.Context, err, "Failed to write SBOM")
6161
return err
6262
}
6363
}

pkg/source/folder/watcher.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func NewWatcherFetcher() *WatcherFetcher {
3535
return &WatcherFetcher{}
3636
}
3737

38-
func (f *WatcherFetcher) Fetch(ctx *tcontext.TransferMetadata, config *FolderConfig) (iterator.SBOMIterator, error) {
38+
func (f *WatcherFetcher) Fetch(ctx tcontext.TransferMetadata, config *FolderConfig) (iterator.SBOMIterator, error) {
3939
logger.LogDebug(ctx.Context, "Starting folder watcher", "path", config.FolderPath, "recurssive", config.ProcessingMode)
4040

4141
// Create new watcher.

pkg/source/github/adapter.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ func (g *GitHubAdapter) ParseAndValidateParams(cmd *cobra.Command) error {
227227
}
228228

229229
// FetchSBOMs initializes the GitHub SBOM iterator using the unified method
230-
func (g *GitHubAdapter) FetchSBOMs(ctx *tcontext.TransferMetadata) (iterator.SBOMIterator, error) {
230+
func (g *GitHubAdapter) FetchSBOMs(ctx tcontext.TransferMetadata) (iterator.SBOMIterator, error) {
231231
logger.LogDebug(ctx.Context, "Intializing SBOM fetching process")
232232

233233
// Org Mode: Fetch all repositories
@@ -268,17 +268,17 @@ func (g *GitHubAdapter) FetchSBOMs(ctx *tcontext.TransferMetadata) (iterator.SBO
268268
return sbomIterator, err
269269
}
270270

271-
func (g *GitHubAdapter) Monitor(ctx *tcontext.TransferMetadata) (iterator.SBOMIterator, *tcontext.TransferMetadata, error) {
271+
func (g *GitHubAdapter) Monitor(ctx tcontext.TransferMetadata) (iterator.SBOMIterator, tcontext.TransferMetadata, error) {
272272
return nil, ctx, fmt.Errorf("Currently gitHub adapter does not support monitoring")
273273
}
274274

275275
// OutputSBOMs should return an error since GitHub does not support SBOM uploads
276-
func (g *GitHubAdapter) UploadSBOMs(ctx *tcontext.TransferMetadata, iterator iterator.SBOMIterator) error {
276+
func (g *GitHubAdapter) UploadSBOMs(ctx tcontext.TransferMetadata, iterator iterator.SBOMIterator) error {
277277
return fmt.Errorf("GitHub adapter does not support SBOM uploading")
278278
}
279279

280280
// DryRun for Input Adapter: Displays all fetched SBOMs from input adapter
281-
func (g *GitHubAdapter) DryRun(ctx *tcontext.TransferMetadata, iterator iterator.SBOMIterator) error {
281+
func (g *GitHubAdapter) DryRun(ctx tcontext.TransferMetadata, iterator iterator.SBOMIterator) error {
282282
logger.LogDebug(ctx.Context, "Dry-run mode: Displaying SBOMs fetched from input adapter")
283283

284284
var outputDir string
@@ -291,7 +291,7 @@ func (g *GitHubAdapter) DryRun(ctx *tcontext.TransferMetadata, iterator iterator
291291

292292
for {
293293

294-
sbom, err := iterator.Next(ctx.Context)
294+
sbom, err := iterator.Next(ctx)
295295
if err == io.EOF {
296296
break // No more SBOMs
297297
}
@@ -374,12 +374,12 @@ func (g *GitHubAdapter) applyRepoFilters(repos []string) []string {
374374
return filteredRepos
375375
}
376376

377-
func (g *GitHubAdapter) fetchWatcher(ctx *tcontext.TransferMetadata, repos []string) (iterator.SBOMIterator, error) {
377+
func (g *GitHubAdapter) fetchWatcher(ctx tcontext.TransferMetadata, repos []string) (iterator.SBOMIterator, error) {
378378
logger.LogInfo(ctx.Context, "Monitoring SBOM via github adapter currently doesn't support")
379379
return nil, nil
380380
}
381381

382-
func (g *GitHubAdapter) fetchSBOMsConcurrently(ctx *tcontext.TransferMetadata, repos []string) (iterator.SBOMIterator, error) {
382+
func (g *GitHubAdapter) fetchSBOMsConcurrently(ctx tcontext.TransferMetadata, repos []string) (iterator.SBOMIterator, error) {
383383
logger.LogDebug(ctx.Context, "Fetching SBOMs concurrently")
384384
const maxWorkers = 5 // Number of concurrent workers (adjustable)
385385
const requestsPerSecond = 5 // Rate limit for GitHub API requests
@@ -484,7 +484,7 @@ func (g *GitHubAdapter) fetchSBOMsConcurrently(ctx *tcontext.TransferMetadata, r
484484
}
485485

486486
// fetchSBOMsSequentially: fetch SBOMs from repositories one at a time
487-
func (g *GitHubAdapter) fetchSBOMsSequentially(ctx *tcontext.TransferMetadata, repos []string) (iterator.SBOMIterator, error) {
487+
func (g *GitHubAdapter) fetchSBOMsSequentially(ctx tcontext.TransferMetadata, repos []string) (iterator.SBOMIterator, error) {
488488
logger.LogDebug(ctx.Context, "Fetching SBOMs sequentially")
489489
fmt.Println("Fetching SBOMs sequentially")
490490

0 commit comments

Comments
 (0)