diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 6f1b82f..477488e 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: "1.23.x" + go-version: "1.25.x" - name: Build run: go build -v ./... - name: Test @@ -25,9 +25,8 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: "1.23.x" + go-version: "1.25.x" - name: golangci-lint - uses: golangci/golangci-lint-action@v6 + uses: golangci/golangci-lint-action@v8 with: version: latest - diff --git a/go.mod b/go.mod index ef525d1..36ff52f 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module github.com/samshadwell/split-ynab -go 1.23.1 - -toolchain go1.24.1 +go 1.25.1 require ( github.com/aws/aws-cdk-go/awscdk/v2 v2.218.0 diff --git a/internal/storage/file_storage_adapter.go b/internal/storage/file_storage_adapter.go index 1067c05..097dd70 100644 --- a/internal/storage/file_storage_adapter.go +++ b/internal/storage/file_storage_adapter.go @@ -39,7 +39,7 @@ func (l *localStorageAdapter) GetLastServerKnowledge(ctx context.Context, budget return 0, fmt.Errorf("no budget found with id %v", budgetId) } -func (l *localStorageAdapter) SetLastServerKnowledge(ctx context.Context, budgetId uuid.UUID, serverKnowledge int64) error { +func (l *localStorageAdapter) SetLastServerKnowledge(ctx context.Context, budgetId uuid.UUID, serverKnowledge int64) (err error) { var data []budgetData if _, err := os.Stat(storageFile); err == nil { @@ -68,25 +68,39 @@ func (l *localStorageAdapter) SetLastServerKnowledge(ctx context.Context, budget if err != nil { return err } - defer f.Close() + defer func() { + if closeErr := f.Close(); err == nil && closeErr != nil { + err = fmt.Errorf("failed to close storage file: %w", closeErr) + } + }() encoder := yaml.NewEncoder(f) - defer encoder.Close() + defer func() { + if closeErr := encoder.Close(); err == nil && closeErr != nil { + err = fmt.Errorf("failed to close YAML encoder: %w", closeErr) + } + }() + + if err = encoder.Encode(data); err != nil { + return fmt.Errorf("failed to encode storage data: %w", err) + } - return encoder.Encode(data) + return nil } -func (l *localStorageAdapter) readData() ([]budgetData, error) { +func (l *localStorageAdapter) readData() (data []budgetData, err error) { f, err := os.Open(storageFile) if err != nil { return nil, err } - defer f.Close() + defer func() { + if closeErr := f.Close(); err == nil && closeErr != nil { + err = fmt.Errorf("failed to close storage file: %w", closeErr) + } + }() - var data []budgetData decoder := yaml.NewDecoder(f) - err = decoder.Decode(&data) - if err != nil { + if err = decoder.Decode(&data); err != nil { return nil, err }