Skip to content

Commit f5034a9

Browse files
committed
fix: resolve warnings and improve file extraction logic
Signed-off-by: ShigrafS <[email protected]>
1 parent 3e6fe37 commit f5034a9

File tree

7 files changed

+137
-51
lines changed

7 files changed

+137
-51
lines changed

.github/debug-build.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
name: Debug Linter on Push
2+
3+
on:
4+
push:
5+
branches:
6+
- '**' # Run on any branch
7+
8+
jobs:
9+
golangci-lint-check:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Checkout code
14+
uses: actions/checkout@v4
15+
16+
- name: Set up Go
17+
uses: actions/setup-go@v5
18+
with:
19+
go-version: '1.21' # or match your version
20+
21+
- name: Install dependencies
22+
run: go mod download
23+
24+
- name: Run make check with extended timeout
25+
run: make check GOLANGCI_LINT_EXTRA_ARGS="--timeout 30m"

.golangci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
version: 2
2+
13
run:
24
timeout: 5m

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ include build/Makefile.show-help.mk
33

44
## Run suite of Golang lint checks
55
check:
6-
golangci-lint run -c .golangci.yml -v ./...
6+
golangci-lint run -c .golangci.yml -v $(GOLANGCI_LINT_EXTRA_ARGS) ./...
77

88
## Run Golang tests
99
test:

converter/tests/helm_test.go

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"bytes"
66
"compress/gzip"
77
"io"
8+
"log"
89
"os"
910
"strings"
1011
"testing"
@@ -15,18 +16,18 @@ import (
1516

1617
func TestHelmConverter_Convert(t *testing.T) {
1718
testCases := []struct {
18-
name string
19-
filePath string
20-
expectError bool
21-
expectedErrCode string
22-
checkManifest bool
19+
name string
20+
filePath string
21+
expectError bool
22+
expectedErrCode string
23+
checkManifest bool
2324
wantManifestSubstr string
2425
}{
2526
{
26-
name: "Valid Edge Firewall Relationship Deployment",
27-
filePath: "./samples/edge-firewall-relationship.yml",
28-
expectError: false,
29-
checkManifest: true,
27+
name: "Valid Edge Firewall Relationship Deployment",
28+
filePath: "./samples/edge-firewall-relationship.yml",
29+
expectError: false,
30+
checkManifest: true,
3031
wantManifestSubstr: "apiVersion",
3132
},
3233
{
@@ -60,10 +61,10 @@ func TestHelmConverter_Convert(t *testing.T) {
6061
expectedErrCode: "meshkit-11315",
6162
},
6263
{
63-
name: "No Components",
64-
filePath: "./samples/no-components.yaml",
65-
expectError: false,
66-
checkManifest: true,
64+
name: "No Components",
65+
filePath: "./samples/no-components.yaml",
66+
expectError: false,
67+
checkManifest: true,
6768
wantManifestSubstr: "",
6869
},
6970
{
@@ -79,19 +80,19 @@ func TestHelmConverter_Convert(t *testing.T) {
7980
for _, tc := range testCases {
8081
t.Run(tc.name, func(t *testing.T) {
8182
var data []byte
82-
var err error
83-
if _, err = os.Stat(tc.filePath); err == nil {
84-
data, err = os.ReadFile(tc.filePath)
85-
if err != nil {
86-
t.Fatalf("Failed to read test file: %v", err)
87-
}
88-
} else {
89-
data = nil
90-
}
83+
var err error
84+
if _, err = os.Stat(tc.filePath); err == nil {
85+
data, err = os.ReadFile(tc.filePath)
86+
if err != nil {
87+
t.Fatalf("Failed to read test file: %v", err)
88+
}
89+
} else {
90+
data = nil
91+
}
9192

92-
chartData, err := hc.Convert(string(data))
93+
chartData, err := hc.Convert(string(data))
9394

94-
if tc.expectError {
95+
if tc.expectError {
9596
if err == nil {
9697
t.Fatalf("Expected error, got nil")
9798
}
@@ -127,7 +128,11 @@ func extractManifestFromChart(chartData []byte) (bool, string) {
127128
if err != nil {
128129
return false, ""
129130
}
130-
defer gr.Close()
131+
defer func() {
132+
if err := gr.Close(); err != nil {
133+
log.Printf("error closing gzip reader: %v", err)
134+
}
135+
}()
131136
tr := tar.NewReader(gr)
132137
for {
133138
hdr, err := tr.Next()
@@ -139,7 +144,10 @@ func extractManifestFromChart(chartData []byte) (bool, string) {
139144
}
140145
if strings.HasSuffix(hdr.Name, "templates/manifest.yaml") {
141146
buf := new(bytes.Buffer)
142-
io.Copy(buf, tr)
147+
if _, err := io.Copy(buf, tr); err != nil {
148+
log.Printf("error copying tar contents: %v", err)
149+
return false, ""
150+
}
143151
return true, buf.String()
144152
}
145153
}

files/identification.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"fmt"
77
"io"
8+
"log"
89
"os"
910
"path/filepath"
1011
"strings"
@@ -109,14 +110,22 @@ func ParseCompressedOCIArtifactIntoDesign(artifact []byte) (*pattern.PatternFile
109110
if err != nil {
110111
return nil, utils.ErrCreateDir(err, "OCI")
111112
}
112-
defer os.RemoveAll(tmpDir)
113+
defer func() {
114+
if err := os.RemoveAll(tmpDir); err != nil {
115+
log.Printf("error removing temp dir %s: %v", tmpDir, err)
116+
}
117+
}()
113118

114119
tmpInputDesignFile := filepath.Join(tmpDir, "design.tar")
115120
file, err := os.Create(tmpInputDesignFile)
116121
if err != nil {
117122
return nil, utils.ErrCreateFile(err, tmpInputDesignFile)
118123
}
119-
defer file.Close()
124+
defer func() {
125+
if err := file.Close(); err != nil {
126+
log.Printf("error closing file %s: %v", tmpInputDesignFile, err)
127+
}
128+
}()
120129

121130
reader := bytes.NewReader(artifact)
122131
if _, err := io.Copy(file, reader); err != nil {
@@ -141,7 +150,7 @@ func ParseCompressedOCIArtifactIntoDesign(artifact []byte) (*pattern.PatternFile
141150
}
142151
var design *walker.File
143152

144-
// the extracted layer may contain metadata files like artifact.yml for artifacthub,etc
153+
// the extracted layer may contain metadata files like artifact.yml for artifacthub, etc
145154
for _, file := range files {
146155
if file.Name == "design.yml" {
147156
design = file
@@ -155,7 +164,6 @@ func ParseCompressedOCIArtifactIntoDesign(artifact []byte) (*pattern.PatternFile
155164
var patternFile pattern.PatternFile
156165

157166
err = encoding.Unmarshal([]byte(design.Content), &patternFile)
158-
159167
if err != nil {
160168
return nil, ErrDecodePattern(err)
161169
}

files/sanitization.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"bytes"
77
"compress/gzip"
88
"encoding/json"
9+
"log"
910

1011
"fmt"
1112
"io"
@@ -92,7 +93,11 @@ func ExtractTar(reader io.Reader, archiveFile string, outputDir string) error {
9293
if err != nil {
9394
return err
9495
}
95-
defer gzipReader.Close()
96+
defer func() {
97+
if cerr := gzipReader.Close(); cerr != nil {
98+
log.Printf("error closing gzipReader: %v", cerr)
99+
}
100+
}()
96101
reader = gzipReader
97102
}
98103

@@ -132,7 +137,11 @@ func ExtractTar(reader io.Reader, archiveFile string, outputDir string) error {
132137
if err != nil {
133138
return fmt.Errorf("failed to create file: %v", err)
134139
}
135-
defer file.Close()
140+
defer func(f *os.File) {
141+
if cerr := f.Close(); cerr != nil {
142+
log.Printf("error closing file %s: %v", targetPath, cerr)
143+
}
144+
}(file)
136145

137146
// Copy file contents
138147
if _, err := io.Copy(file, tarReader); err != nil {
@@ -178,16 +187,22 @@ func ExtractZipFromBytes(data []byte, outputDir string) error {
178187
if err != nil {
179188
return fmt.Errorf("failed to open file in zip: %w", err)
180189
}
181-
defer zipFile.Close()
190+
defer func(zf io.Closer, name string) {
191+
if cerr := zf.Close(); cerr != nil {
192+
log.Printf("error closing zip file %s: %v", name, cerr)
193+
}
194+
}(zipFile, file.Name)
182195

183-
// Create the output file
184196
outFile, err := os.Create(filePath)
185197
if err != nil {
186198
return fmt.Errorf("failed to create output file: %w", err)
187199
}
188-
defer outFile.Close()
200+
defer func(f *os.File) {
201+
if cerr := f.Close(); cerr != nil {
202+
log.Printf("error closing output file %s: %v", filePath, cerr)
203+
}
204+
}(outFile)
189205

190-
// Copy the contents of the file from the ZIP archive to the output file
191206
if _, err := io.Copy(outFile, zipFile); err != nil {
192207
return fmt.Errorf("failed to copy file contents: %w", err)
193208
}

utils/utils.go

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,11 @@ func DownloadFile(filepath string, url string) error {
112112
if err != nil {
113113
return err
114114
}
115-
defer resp.Body.Close()
115+
defer func() {
116+
if cerr := resp.Body.Close(); cerr != nil {
117+
log.Printf("error closing response body from %s: %v", url, cerr)
118+
}
119+
}()
116120

117121
if resp.StatusCode != 200 {
118122
return fmt.Errorf("failed to get the file %d status code for %s file", resp.StatusCode, url)
@@ -123,7 +127,11 @@ func DownloadFile(filepath string, url string) error {
123127
if err != nil {
124128
return err
125129
}
126-
defer out.Close()
130+
defer func() {
131+
if cerr := out.Close(); cerr != nil {
132+
log.Printf("error closing file %s: %v", filepath, cerr)
133+
}
134+
}()
127135

128136
// Write the body to file
129137
_, err = io.Copy(out, resp.Body)
@@ -311,16 +319,17 @@ func WriteToFile(path string, content string) error {
311319
if err != nil {
312320
return ErrCreateFile(err, path)
313321
}
322+
defer func() {
323+
if cerr := file.Close(); cerr != nil {
324+
log.Printf("error closing file %s: %v", path, cerr)
325+
}
326+
}()
314327

315328
_, err = file.WriteString(content)
316329
if err != nil {
317330
return ErrWriteFile(err, path)
318331
}
319-
// Close the file to save the changes.
320-
err = file.Close()
321-
if err != nil {
322-
return ErrWriteFile(err, path)
323-
}
332+
324333
return nil
325334
}
326335

@@ -371,12 +380,19 @@ func WriteYamlToFile[K any](outputPath string, data K) error {
371380
if err != nil {
372381
return ErrCreateFile(err, outputPath)
373382
}
374-
defer file.Close()
383+
defer func() {
384+
if cerr := file.Close(); cerr != nil {
385+
log.Printf("error closing YAML file %s: %v", outputPath, cerr)
386+
}
387+
}()
375388

376389
encoder := yaml.NewEncoder(file)
377390
encoder.SetIndent(2)
378-
379-
defer encoder.Close()
391+
defer func() {
392+
if cerr := encoder.Close(); cerr != nil {
393+
log.Printf("error closing YAML encoder for file %s: %v", outputPath, cerr)
394+
}
395+
}()
380396

381397
if err := encoder.Encode(data); err != nil {
382398
return ErrMarshal(err)
@@ -561,9 +577,17 @@ func ReadSVGData(baseDir, path string) (string, error) {
561577
}
562578
func Compress(src string, buf io.Writer) error {
563579
zr := gzip.NewWriter(buf)
564-
defer zr.Close()
580+
defer func() {
581+
if cerr := zr.Close(); cerr != nil {
582+
log.Printf("error closing gzip writer: %v", cerr)
583+
}
584+
}()
565585
tw := tar.NewWriter(zr)
566-
defer tw.Close()
586+
defer func() {
587+
if cerr := tw.Close(); cerr != nil {
588+
log.Printf("error closing tar writer: %v", cerr)
589+
}
590+
}()
567591

568592
return filepath.Walk(src, func(file string, fi os.FileInfo, err error) error {
569593
if err != nil {
@@ -590,7 +614,11 @@ func Compress(src string, buf io.Writer) error {
590614
if err != nil {
591615
return err
592616
}
593-
defer data.Close()
617+
defer func() {
618+
if cerr := data.Close(); cerr != nil {
619+
log.Printf("error closing file %s: %v", file, cerr)
620+
}
621+
}()
594622

595623
_, err = io.Copy(tw, data)
596624
if err != nil {
@@ -893,4 +921,4 @@ func TruncateErrorMessage(err error, wordLimit int) error {
893921
}
894922

895923
return err
896-
}
924+
}

0 commit comments

Comments
 (0)