@@ -3,6 +3,7 @@ package main
33import (
44 "context"
55 "fmt"
6+ "path/filepath"
67 "sync"
78)
89
@@ -21,75 +22,84 @@ type AppCheckerEngine struct {
2122 resultChan chan AppCheckResult
2223 errorChan chan ErrorResult
2324
24- ChartRenderingEngine * ChartRenderingEngine
25+ ChartRenderingEngine * ChartRenderingEngine
2526 ManifestValidationEngine * ManifestValidationEngine
26- ImageExtractionEngine * ImageExtractionEngine
27+ ImageExtractionEngine * ImageExtractionEngine
2728 DockerValidationEngine * DockerImageValidationEngine
2829
29- context context.Context
30- executor CommandExecutor
30+ context context.Context
31+ executor CommandExecutor
3132
3233 workerWaitGroup sync.WaitGroup
3334
3435 name string
3536}
3637
37- func NewAppCheckerEngine (context context.Context , outputDir string ) * AppCheckerEngine {
38+ func NewAppCheckerEngine (context context.Context , outputDir string , apiVersions [] string ) * AppCheckerEngine {
3839
3940 errorChan := make (chan ErrorResult )
4041
4142 cre := ChartRenderingEngine {
42- inputChan : make (chan ChartRenderParams ),
43- resultChan : make (chan RenderResult ),
44- errorChan : errorChan ,
45- outputDir : outputDir ,
46- context : context ,
47- executor : & RealCommandExecutor {},
48- name : "ChartRenderer" ,
43+ inputChan : make (chan ChartRenderParams ),
44+ resultChan : make (chan RenderResult ),
45+ errorChan : errorChan ,
46+ outputDir : outputDir ,
47+ context : context ,
48+ executor : & RealCommandExecutor {},
49+ name : "ChartRenderer" ,
50+ apiVersions : apiVersions ,
51+ }
52+
53+ // Construct absolute path to schemas directory
54+ schemasDir , err := filepath .Abs ("schemas" )
55+ if err != nil {
56+ // If we can't get the absolute path, use relative path as fallback
57+ schemasDir = "schemas"
4958 }
5059
5160 mve := ManifestValidationEngine {
52- inputChan : cre .resultChan ,
53- resultChan : make (chan ManifestValidationResult ),
54- errorChan : errorChan ,
55- context : context ,
56- executor : & RealCommandExecutor {},
57- name : "ManifestValidator" ,
61+ inputChan : cre .resultChan ,
62+ resultChan : make (chan ManifestValidationResult ),
63+ errorChan : errorChan ,
64+ context : context ,
65+ executor : & RealCommandExecutor {},
66+ name : "ManifestValidator" ,
67+ schemasDir : schemasDir ,
5868 workerWaitGroup : sync.WaitGroup {},
5969 }
6070
6171 iee := ImageExtractionEngine {
62- inputChan : mve .resultChan ,
63- outputChan : make (chan ImageExtractionResult ),
64- errorChan : errorChan ,
65- context : context ,
66- name : "ImageExtractor" ,
72+ inputChan : mve .resultChan ,
73+ outputChan : make (chan ImageExtractionResult ),
74+ errorChan : errorChan ,
75+ context : context ,
76+ name : "ImageExtractor" ,
6777 workerWaitGroup : sync.WaitGroup {},
6878 }
6979
7080 dve := DockerImageValidationEngine {
71- inputChan : iee .outputChan ,
72- outputChan : make (chan DockerImageValidationResult ),
73- context : context ,
74- executor : & RealCommandExecutor {},
75- name : "DockerValidator" ,
76- cache : map [string ]DockerImageValidationResult {},
77- pending : map [string ]* sync.WaitGroup {},
78- cacheLock : sync.RWMutex {},
81+ inputChan : iee .outputChan ,
82+ outputChan : make (chan DockerImageValidationResult ),
83+ context : context ,
84+ executor : & RealCommandExecutor {},
85+ name : "DockerValidator" ,
86+ cache : map [string ]DockerImageValidationResult {},
87+ pending : map [string ]* sync.WaitGroup {},
88+ cacheLock : sync.RWMutex {},
7989 workerWaitGroup : sync.WaitGroup {},
8090 }
81-
91+
8292 return & AppCheckerEngine {
8393 inputChan : make (chan AppCheckInstruction ),
8494 resultChan : make (chan AppCheckResult ),
8595 errorChan : make (chan ErrorResult ),
8696
87- context : context ,
88- executor : & RealCommandExecutor {},
97+ context : context ,
98+ executor : & RealCommandExecutor {},
8999
90- ChartRenderingEngine : & cre ,
100+ ChartRenderingEngine : & cre ,
91101 ManifestValidationEngine : & mve ,
92- ImageExtractionEngine : & iee ,
102+ ImageExtractionEngine : & iee ,
93103 DockerValidationEngine : & dve ,
94104
95105 name : "AppChecker" ,
@@ -98,7 +108,7 @@ func NewAppCheckerEngine(context context.Context, outputDir string) *AppCheckerE
98108
99109func (engine * AppCheckerEngine ) allDoneWorker () {
100110 engine .workerWaitGroup .Wait ()
101- logEngineDebug (engine .name ,- 1 ,"all workers done, closing output channel" )
111+ logEngineDebug (engine .name , - 1 , "all workers done, closing output channel" )
102112 close (engine .resultChan )
103113}
104114
@@ -113,7 +123,7 @@ func (engine *AppCheckerEngine) Start(workerCount int) {
113123 // Pour the input instructions into the chart renderer
114124 engine .workerWaitGroup .Add (1 )
115125 go engine .pumpAppCheckInstructionsToChartRenderer ()
116- engine .workerWaitGroup .Add (1 )
126+ engine .workerWaitGroup .Add (1 )
117127 go engine .pumpOutputsToAppCheckResults ()
118128
119129 go engine .allDoneWorker ()
@@ -147,14 +157,7 @@ func (engine *AppCheckerEngine) pumpOutputsToAppCheckResults() {
147157func (engine * AppCheckerEngine ) pumpAppCheckInstructionsToChartRenderer () {
148158 defer engine .workerWaitGroup .Done ()
149159 for instruction := range engine .inputChan {
150- engine .ChartRenderingEngine .inputChan <- ChartRenderParams {
151- Env : instruction .Chart .Env ,
152- ChartName : instruction .Chart .ChartName ,
153- RepoURL : instruction .Chart .RepoURL ,
154- ChartVersion : instruction .Chart .ChartVersion ,
155- BaseValuesFile : instruction .Chart .BaseValuesFile ,
156- ValuesOverride : instruction .Chart .ValuesOverride ,
157- }
160+ engine .ChartRenderingEngine .inputChan <- instruction .Chart
158161 }
159162 close (engine .ChartRenderingEngine .inputChan )
160- }
163+ }
0 commit comments