From d8a2cec950c77d4df18edc2b2ebdac0b42c69892 Mon Sep 17 00:00:00 2001 From: docktermj Date: Tue, 3 Jun 2025 15:04:11 -0400 Subject: [PATCH 1/3] #182 Improve error wrapping --- .github/linters/bearer.yml | 2 + .github/workflows/bearer.yaml | 2 + .github/workflows/go-test-linux.yaml | 13 ++++-- .github/workflows/go-test-windows.yaml | 2 - .vscode/cspell.json | 1 + Dockerfile | 2 +- Makefile | 3 +- checkself/break.go | 2 +- checkself/checklicense.go | 34 ++++++++-------- checkself/checkself.go | 14 +++---- checkself/checkself_linux_test.go | 4 +- checkself/checkself_test.go | 4 +- cmd/cmd_test.go | 34 ++++++++-------- cmd/completion.go | 6 +-- cmd/docs.go | 9 +++-- cmd/root.go | 2 +- go.mod | 28 ++++++------- go.sum | 56 +++++++++++++------------- package.Dockerfile | 2 +- 19 files changed, 114 insertions(+), 106 deletions(-) create mode 100644 .github/linters/bearer.yml diff --git a/.github/linters/bearer.yml b/.github/linters/bearer.yml new file mode 100644 index 0000000..ba2f57c --- /dev/null +++ b/.github/linters/bearer.yml @@ -0,0 +1,2 @@ +rule: + skip-rule: [] diff --git a/.github/workflows/bearer.yaml b/.github/workflows/bearer.yaml index 6a2bedd..96814ee 100644 --- a/.github/workflows/bearer.yaml +++ b/.github/workflows/bearer.yaml @@ -18,3 +18,5 @@ jobs: - name: Bearer uses: bearer/bearer-action@v2 + with: + config-file: .github/linters/bearer.yml diff --git a/.github/workflows/go-test-linux.yaml b/.github/workflows/go-test-linux.yaml index e2dcca3..a1a94d3 100644 --- a/.github/workflows/go-test-linux.yaml +++ b/.github/workflows/go-test-linux.yaml @@ -1,6 +1,11 @@ name: Go test linux -on: [push, workflow_dispatch] +on: + push: + pull_request: + branches: [main] + schedule: + - cron: "15 7 * * *" env: SENZING_LOG_LEVEL: TRACE @@ -85,10 +90,10 @@ jobs: coverage-config: ./.github/coverage/testcoverage.yaml slack-notification: - needs: [go-test-linux, coverage] - if: ${{ always() && contains(fromJSON('["failure", "cancelled"]'), needs.go-test-linux.outputs.status ) && contains(fromJSON('["failure", "cancelled"]'), needs.coverage.outputs.job-status ) && github.ref_name == github.event.repository.default_branch }} + needs: [go-test-linux] + if: ${{ always() && contains(fromJSON('["failure", "cancelled"]'), needs.go-test-linux.outputs.status ) && (github.ref_name == github.event.repository.default_branch || github.event_name == 'schedule') }} secrets: SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} uses: senzing-factory/build-resources/.github/workflows/build-failure-slack-notification.yaml@v2 with: - job-status: ${{ needs.go-test-linux.outputs.status && needs.coverage.outputs.job-status }} + job-status: ${{ needs.go-test-linux.outputs.status }} diff --git a/.github/workflows/go-test-windows.yaml b/.github/workflows/go-test-windows.yaml index 31ca9fe..0a2aece 100644 --- a/.github/workflows/go-test-windows.yaml +++ b/.github/workflows/go-test-windows.yaml @@ -21,8 +21,6 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - with: - fetch-depth: 0 - name: Setup go ${{ matrix.go }} uses: actions/setup-go@v5 diff --git a/.vscode/cspell.json b/.vscode/cspell.json index 578aae4..9d06896 100644 --- a/.vscode/cspell.json +++ b/.vscode/cspell.json @@ -82,6 +82,7 @@ "**/*.go", "**/*.mod", "**/*.sum", + "bearer.ignore", "Makefile" ] } diff --git a/Dockerfile b/Dockerfile index 16af064..c3991f0 100755 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ # ----------------------------------------------------------------------------- ARG IMAGE_BUILDER=golang:1.24.1-bookworm -ARG IMAGE_FINAL=senzing/senzingsdk-runtime-beta:latest +ARG IMAGE_FINAL=senzing/senzingsdk-runtime:latest # ----------------------------------------------------------------------------- # Stage: senzingsdk_runtime diff --git a/Makefile b/Makefile index 7f4f791..5435a5a 100644 --- a/Makefile +++ b/Makefile @@ -76,6 +76,7 @@ dependencies-for-development: dependencies-for-development-osarch-specific @go install github.com/vladopajic/go-test-coverage/v2@latest @go install golang.org/x/tools/cmd/godoc@latest @go install golang.org/x/vuln/cmd/govulncheck@latest + @go install mvdan.cc/gofumpt@latest @sudo npm install -g cspell@latest @@ -237,7 +238,7 @@ update-pkg-cache: .PHONY: bearer bearer: - @bearer scan . + @bearer scan --config-file .github/linters/bearer.yml . .PHONY: cspell diff --git a/checkself/break.go b/checkself/break.go index ff06f39..e11498d 100644 --- a/checkself/break.go +++ b/checkself/break.go @@ -19,7 +19,7 @@ func (checkself *BasicCheckSelf) Break( _ = ctx if len(reportErrors) > 0 { - return reportChecks, reportInfo, reportErrors, wraperror.Errorf(errForPackage, "") + return reportChecks, reportInfo, reportErrors, wraperror.Errorf(errForPackage, wraperror.NoMessage) } return reportChecks, reportInfo, reportErrors, nil diff --git a/checkself/checklicense.go b/checkself/checklicense.go index 9c92ec9..5bf99f3 100644 --- a/checkself/checklicense.go +++ b/checkself/checklicense.go @@ -96,9 +96,8 @@ func (checkself *BasicCheckSelf) checkExpiry(expireInDays int) ([]string, error) if err != nil { return result, wraperror.Errorf( err, - "Could not parse SENZING_TOOLS_LICENSE_DAYS_LEFT information: %s. error: %w", + "Could not parse SENZING_TOOLS_LICENSE_DAYS_LEFT information: %s", checkself.ErrorLicenseDaysLeft, - err, ) } @@ -112,7 +111,7 @@ func (checkself *BasicCheckSelf) checkExpiry(expireInDays int) ([]string, error) ) } - return result, wraperror.Errorf(err, "checkself.checkExpiry error: %w", err) + return result, wraperror.Errorf(err, wraperror.NoMessage) } func (checkself *BasicCheckSelf) getLicense(ctx context.Context) (string, error) { @@ -123,15 +122,15 @@ func (checkself *BasicCheckSelf) getLicense(ctx context.Context) (string, error) szProduct, err := checkself.getSzProduct(ctx) if err != nil { - return result, wraperror.Errorf(err, "Could not create szProduct. error: %w", err) + return result, wraperror.Errorf(err, "Could not create szProduct") } result, err = szProduct.GetLicense(ctx) if err != nil { - return result, wraperror.Errorf(err, "Could not get license information. error: %w", err) + return result, wraperror.Errorf(err, "Could not get license information") } - return result, wraperror.Errorf(err, "checkself.getLicense error: %w", err) + return result, wraperror.Errorf(err, wraperror.NoMessage) } func (checkself *BasicCheckSelf) checkRecordPercent( @@ -148,9 +147,8 @@ func (checkself *BasicCheckSelf) checkRecordPercent( if err != nil { return result, wraperror.Errorf( err, - "Could not parse SENZING_TOOLS_LICENSE_RECORDS_PERCENT information: %s. error: %w", + "Could not parse SENZING_TOOLS_LICENSE_RECORDS_PERCENT information: %s.", checkself.ErrorLicenseRecordsPercent, - err, ) } @@ -164,7 +162,7 @@ func (checkself *BasicCheckSelf) checkRecordPercent( ) } - return result, wraperror.Errorf(err, "checkself.checkRecordPercent error: %w", err) + return result, wraperror.Errorf(err, wraperror.NoMessage) } func (checkself *BasicCheckSelf) getRecordCount( @@ -177,7 +175,7 @@ func (checkself *BasicCheckSelf) getRecordCount( databaseConnector, err := checkself.getDatabaseConnector(ctx) if err != nil { - return result, wraperror.Errorf(err, "Could not connect to database. Error %w", err) + return result, wraperror.Errorf(err, "Could not connect to database.") } checker := &checker.BasicChecker{ @@ -186,10 +184,10 @@ func (checkself *BasicCheckSelf) getRecordCount( result, err = checker.RecordCount(ctx) if err != nil { - return result, wraperror.Errorf(err, "Could not get count of records. Error %w", err) + return result, wraperror.Errorf(err, "Could not get count of records.") } - return result, wraperror.Errorf(err, "checkself.getRecordCount error: %w", err) + return result, wraperror.Errorf(err, wraperror.NoMessage) } // ---------------------------------------------------------------------------- @@ -221,13 +219,13 @@ func getExpireInDays(productLicenseResponse *ProductLicenseResponse) (int, error licenseExpireDate, err := time.Parse(time.DateOnly, productLicenseResponse.ExpireDate) if err != nil { - return result, wraperror.Errorf(err, "Could not parse expireDate information. error %w", err) + return result, wraperror.Errorf(err, "Could not parse expireDate information.") } duration := time.Until(licenseExpireDate) result = int(duration.Hours() / hoursPerDay) - return result, wraperror.Errorf(err, "checkself.getExpireInDays error: %w", err) + return result, wraperror.Errorf(err, wraperror.NoMessage) } func getPrettyJSON(license string) (bytes.Buffer, error) { @@ -235,10 +233,10 @@ func getPrettyJSON(license string) (bytes.Buffer, error) { err := json.Indent(&result, []byte(license), "", "\t") if err != nil { - return result, wraperror.Errorf(err, "Could not parse license information. Error %w", err) + return result, wraperror.Errorf(err, "Could not parse license information.") } - return result, wraperror.Errorf(err, "checkself.getPrettyJSON error: %w", err) + return result, wraperror.Errorf(err, wraperror.NoMessage) } func getProductLicenseResponse(license string) (*ProductLicenseResponse, error) { @@ -246,10 +244,10 @@ func getProductLicenseResponse(license string) (*ProductLicenseResponse, error) err := json.Unmarshal([]byte(license), result) if err != nil { - return result, wraperror.Errorf(err, "Could not parse license information into structure. Error %w", err) + return result, wraperror.Errorf(err, "Could not parse license information into structure.") } - return result, wraperror.Errorf(err, "checkself.getProductLicenseResponse error: %w", err) + return result, wraperror.Errorf(err, wraperror.NoMessage) } func returnValues( diff --git a/checkself/checkself.go b/checkself/checkself.go index 703b177..3814cb0 100644 --- a/checkself/checkself.go +++ b/checkself/checkself.go @@ -142,7 +142,7 @@ func (checkself *BasicCheckSelf) CheckSelf(ctx context.Context) error { outputf("%s\n\n\n\n\n", strings.Repeat("-", horizontalRuleLength)) - return err + return wraperror.Errorf(err, wraperror.NoMessage) } // ---------------------------------------------------------------------------- @@ -188,8 +188,7 @@ func (checkself *BasicCheckSelf) getDatabaseConnector(ctx context.Context) (driv if err != nil { return result, wraperror.Errorf( err, - "Unable to locate Database URL For more information, visit https://hub.senzing.com/... Error: %w", - err, + "Unable to locate Database URL For more information, visit https://hub.senzing.com/...", ) } @@ -197,13 +196,12 @@ func (checkself *BasicCheckSelf) getDatabaseConnector(ctx context.Context) (driv if err != nil { return result, wraperror.Errorf( err, - "Database URL '%s' is misconfigured. Could not create a database connector. For more information, visit https://hub.senzing.com/... Error: %w", + "Database URL '%s' is misconfigured. Could not create a database connector. For more information, visit https://hub.senzing.com/...", databaseURL, - err, ) } - return result, wraperror.Errorf(err, "checkself.getDatabaseURL error: %w", err) + return result, wraperror.Errorf(err, wraperror.NoMessage) } func (checkself *BasicCheckSelf) getInstanceName(ctx context.Context) string { @@ -241,7 +239,7 @@ func (checkself *BasicCheckSelf) getSzConfigManager(ctx context.Context) (senzin checkself.szConfigManagerSingleton, err = checkself.getSzFactory(ctx).CreateConfigManager(ctx) }) - return checkself.szConfigManagerSingleton, wraperror.Errorf(err, "checkself.getSzConfigManager error: %w", err) + return checkself.szConfigManagerSingleton, wraperror.Errorf(err, wraperror.NoMessage) } func (checkself *BasicCheckSelf) getSzFactory(ctx context.Context) senzing.SzAbstractFactory { @@ -271,7 +269,7 @@ func (checkself *BasicCheckSelf) getSzProduct(ctx context.Context) (senzing.SzPr checkself.szProductSingleton, err = checkself.getSzFactory(ctx).CreateProduct(ctx) }) - return checkself.szProductSingleton, wraperror.Errorf(err, "checkself.getSzProduct error: %w", err) + return checkself.szProductSingleton, wraperror.Errorf(err, wraperror.NoMessage) } func (checkself *BasicCheckSelf) getTestFunctions() []func(ctx context.Context, reportChecks []string, reportInfo []string, reportErrors []string) ([]string, []string, []string, error) { diff --git a/checkself/checkself_linux_test.go b/checkself/checkself_linux_test.go index ccaa757..adeb714 100644 --- a/checkself/checkself_linux_test.go +++ b/checkself/checkself_linux_test.go @@ -32,7 +32,7 @@ func TestBasicCheckSelf_CheckSelf_Paths(test *testing.T) { func TestBasicCheckSelf_CheckDatabaseSchema_noSchemaInstalled(test *testing.T) { test.Parallel() ctx := test.Context() - expected := "Senzing database schema has not been installed in sqlite3://na:na@/tmp/sqlite/G2C-empty.db. For more information, visit https://hub.senzing.com/... Error: checker.IsSchemaInstalled.row.Scan error: no such table: DSRC_RECORD" + expected := `Senzing database schema has not been installed in sqlite3://na:na@/tmp/sqlite/G2C-empty.db. For more information, visit https://hub.senzing.com/... Error: {"function": "checker.(*BasicChecker).IsSchemaInstalled", "text": "row.Scan", "error": "no such table: DSRC_RECORD"}` testObject := getTestObject(ctx, test) badReportErrors := []string{} testObject.DatabaseURL = "sqlite3://na:na@/tmp/sqlite/G2C-empty.db" @@ -52,7 +52,7 @@ func TestBasicCheckSelf_CheckDatabaseSchema_noSchemaInstalled(test *testing.T) { func TestBasicCheckSelf_CheckLicense_badGetLicense(test *testing.T) { test.Parallel() ctx := test.Context() - expected := "Could not get count of records. Error checker.RecordCount.row.Scan error: no such table: DSRC_RECORD" + expected := `{"function": "checkself.(*BasicCheckSelf).getRecordCount", "text": "Could not get count of records.", "error": {"function": "checker.(*BasicChecker).RecordCount", "text": "row.Scan", "error": "no such table: DSRC_RECORD"}}` testObject := getTestObject(ctx, test) testObject.Settings = ` { diff --git a/checkself/checkself_test.go b/checkself/checkself_test.go index e2f21c9..34e66bf 100644 --- a/checkself/checkself_test.go +++ b/checkself/checkself_test.go @@ -80,7 +80,7 @@ func TestBasicCheckSelf_CheckDatabaseSchema(test *testing.T) { func TestBasicCheckSelf_CheckDatabaseSchema_badDatabaseURL(test *testing.T) { test.Parallel() ctx := test.Context() - expected := "SENZING_TOOLS_DATABASE_URL = bad-database-URL is misconfigured. Could not create a database connector. For more information, visit https://hub.senzing.com/... Error: connector.NewConnector error: unknown database scheme: error: connector" + expected := `SENZING_TOOLS_DATABASE_URL = bad-database-URL is misconfigured. Could not create a database connector. For more information, visit https://hub.senzing.com/... Error: {"function": "connector.NewConnector", "error": {"function": "connector.NewConnector", "text": "unknown database scheme: ", "error": "connector"}}` testObject := getTestObject(ctx, test) badReportErrors := []string{} testObject.DatabaseURL = "bad-database-URL" @@ -210,7 +210,7 @@ func TestBasicCheckSelf_CheckSettings(test *testing.T) { func TestBasicCheckSelf_CheckSettings_badSettings(test *testing.T) { test.Parallel() ctx := test.Context() - expected := "SENZING_TOOLS_ENGINE_SETTINGS - incorrect JSON syntax in }{" + expected := `SENZING_TOOLS_ENGINE_SETTINGS - {"function": "settingsparser.New", "text": "incorrect JSON syntax in }{", "error": "settingsparser"}` testObject := getTestObject(ctx, test) testObject.Settings = badJSON newReportChecks, newReportInfo, newReportErrors, err := testObject.CheckSettings( diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go index eb08d30..da12fef 100644 --- a/cmd/cmd_test.go +++ b/cmd/cmd_test.go @@ -12,6 +12,24 @@ import ( // Test public functions // ---------------------------------------------------------------------------- +func Test_CompletionCmd(test *testing.T) { + test.Parallel() + + err := cmd.CompletionCmd.Execute() + require.NoError(test, err) + err = cmd.CompletionCmd.RunE(cmd.CompletionCmd, []string{}) + require.NoError(test, err) +} + +func Test_DocsCmd(test *testing.T) { + test.Parallel() + + err := cmd.DocsCmd.Execute() + require.NoError(test, err) + err = cmd.DocsCmd.RunE(cmd.DocsCmd, []string{}) + require.NoError(test, err) +} + func Test_Execute(test *testing.T) { test.Parallel() @@ -66,19 +84,3 @@ func Test_RootCmd(test *testing.T) { err = cmd.RootCmd.RunE(cmd.RootCmd, []string{}) require.NoError(test, err) } - -func Test_CompletionCmd(test *testing.T) { - test.Parallel() - - err := cmd.CompletionCmd.Execute() - require.NoError(test, err) - err = cmd.CompletionCmd.RunE(cmd.CompletionCmd, []string{}) - require.NoError(test, err) -} - -func Test_docsCmd(test *testing.T) { - err := cmd.DocsCmd.Execute() - require.NoError(test, err) - err = cmd.DocsCmd.RunE(cmd.DocsCmd, []string{}) - require.NoError(test, err) -} diff --git a/cmd/completion.go b/cmd/completion.go index 4ad9a6f..932b3be 100644 --- a/cmd/completion.go +++ b/cmd/completion.go @@ -3,10 +3,10 @@ package cmd import ( - "fmt" "io" "os" + "github.com/senzing-garage/go-helpers/wraperror" "github.com/spf13/cobra" ) @@ -17,7 +17,7 @@ var CompletionCmd = &cobra.Command{ Long: `To load completions, run: source < (check-self completion) -To load completions automaticallon on login, add this line to your .bashrc file: +To load completions automatically on login, add this line to your .bashrc file: source < (check-self completion) `, RunE: func(cmd *cobra.Command, args []string) error { @@ -34,7 +34,7 @@ func init() { func completionAction(out io.Writer) error { if err := RootCmd.GenBashCompletion(out); err != nil { - return fmt.Errorf("completionAction: %w", err) + return wraperror.Errorf(err, wraperror.NoMessage) } return nil diff --git a/cmd/docs.go b/cmd/docs.go index 014a518..3bbca93 100644 --- a/cmd/docs.go +++ b/cmd/docs.go @@ -7,6 +7,7 @@ import ( "io" "os" + "github.com/senzing-garage/go-helpers/wraperror" "github.com/spf13/cobra" "github.com/spf13/cobra/doc" ) @@ -19,11 +20,11 @@ var DocsCmd = &cobra.Command{ _ = args dir, err := cmd.Flags().GetString("dir") if err != nil { - return fmt.Errorf("getting 'dir' value: %w", err) + return wraperror.Errorf(err, "getting 'dir' value") } if dir == "" { if dir, err = os.MkdirTemp("", "check-self"); err != nil { - return fmt.Errorf("constructing cobra.Command: %w", err) + return wraperror.Errorf(err, "constructing cobra.Command") } } @@ -38,11 +39,11 @@ func init() { func DocsAction(out io.Writer, dir string) error { if err := doc.GenMarkdownTree(RootCmd, dir); err != nil { - return fmt.Errorf("DocsAction: %w", err) + return wraperror.Errorf(err, "DocsAction") } if _, err := fmt.Fprintf(out, "Documentation successfully created in %s\n", dir); err != nil { - return fmt.Errorf("printing succsss: %w", err) + return wraperror.Errorf(err, "printing succsss") } return nil diff --git a/cmd/root.go b/cmd/root.go index 55ac905..158ea1a 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -101,7 +101,7 @@ func RunE(_ *cobra.Command, _ []string) error { err := checkSelf.CheckSelf(ctx) - return wraperror.Errorf(err, "RunE error: %w", err) + return wraperror.Errorf(err, wraperror.NoMessage) } // Used in construction of cobra.Command. diff --git a/go.mod b/go.mod index 5b0a589..02e9be1 100644 --- a/go.mod +++ b/go.mod @@ -3,11 +3,11 @@ module github.com/senzing-garage/check-self go 1.24 require ( - github.com/senzing-garage/go-cmdhelping v0.3.4 - github.com/senzing-garage/go-databasing v0.5.7 - github.com/senzing-garage/go-helpers v0.6.11 + github.com/senzing-garage/go-cmdhelping v0.3.5 + github.com/senzing-garage/go-databasing v0.5.8 + github.com/senzing-garage/go-helpers v0.6.13 github.com/senzing-garage/go-sdk-abstract-factory v0.9.9 - github.com/senzing-garage/sz-sdk-go v0.15.3 + github.com/senzing-garage/sz-sdk-go v0.15.4 github.com/spf13/cobra v1.9.1 github.com/spf13/viper v1.20.1 github.com/stretchr/testify v1.10.0 @@ -23,7 +23,7 @@ require ( github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-sql-driver/mysql v1.9.2 // indirect github.com/go-viper/mapstructure/v2 v2.2.1 // indirect - github.com/godror/godror v0.48.2 // indirect + github.com/godror/godror v0.48.3 // indirect github.com/godror/knownpb v0.3.0 // indirect github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect @@ -31,30 +31,30 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/lib/pq v1.10.9 // indirect github.com/mattn/go-sqlite3 v1.14.28 // indirect - github.com/microsoft/go-mssqldb v1.8.1 // indirect + github.com/microsoft/go-mssqldb v1.8.2 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.9.0 // indirect - github.com/senzing-garage/go-logging v1.5.2 // indirect + github.com/senzing-garage/go-logging v1.5.3 // indirect github.com/senzing-garage/go-messaging v1.5.3 // indirect - github.com/senzing-garage/go-observing v0.3.4 // indirect - github.com/senzing-garage/sz-sdk-go-core v0.9.4 // indirect - github.com/senzing-garage/sz-sdk-go-grpc v0.9.5 // indirect - github.com/senzing-garage/sz-sdk-go-mock v0.8.6 // indirect + github.com/senzing-garage/go-observing v0.3.5 // indirect + github.com/senzing-garage/sz-sdk-go-core v0.9.6 // indirect + github.com/senzing-garage/sz-sdk-go-grpc v0.9.6 // indirect + github.com/senzing-garage/sz-sdk-go-mock v0.8.8 // indirect github.com/senzing-garage/sz-sdk-proto v0.8.3 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.14.0 // indirect - github.com/spf13/cast v1.8.0 // indirect + github.com/spf13/cast v1.9.2 // indirect github.com/spf13/pflag v1.0.6 // indirect github.com/subosito/gotenv v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.38.0 // indirect - golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect + golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b // indirect golang.org/x/net v0.40.0 // indirect golang.org/x/sys v0.33.0 // indirect golang.org/x/text v0.25.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect google.golang.org/protobuf v1.36.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 0462ce8..d95db74 100644 --- a/go.sum +++ b/go.sum @@ -37,8 +37,8 @@ github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRj github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/godror/godror v0.48.2 h1:t4xlSUARUBYLnYxlRsKQnb7hTCn2eD/z49Zik5onGPE= -github.com/godror/godror v0.48.2/go.mod h1:7JBa3m6g1s+5cTlZqEvydklDE30Xon3EALNrQm2iwk0= +github.com/godror/godror v0.48.3 h1:D9rzymnm8NFt07waT/gLLTkAZzbibOl4L1rj03hHJjc= +github.com/godror/godror v0.48.3/go.mod h1:D4gKled+sJVcagT1HWibkBsO9PcLn2Nu96FCr1RtnzI= github.com/godror/knownpb v0.3.0 h1:+caUdy8hTtl7X05aPl3tdL540TvCcaQA6woZQroLZMw= github.com/godror/knownpb v0.3.0/go.mod h1:PpTyfJwiOEAzQl7NtVCM8kdPCnp3uhxsZYIzZ5PV4zU= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= @@ -65,8 +65,8 @@ github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A= github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= -github.com/microsoft/go-mssqldb v1.8.1 h1:/LPVjSb992vTa8CMVvliTMT//UAKj/jpe1xb/jJBjIk= -github.com/microsoft/go-mssqldb v1.8.1/go.mod h1:vp38dT33FGfVotRiTmDo3bFyaHq+p3LektQrjTULowo= +github.com/microsoft/go-mssqldb v1.8.2 h1:236sewazvC8FvG6Dr3bszrVhMkAl4KYImryLkRMCd0I= +github.com/microsoft/go-mssqldb v1.8.2/go.mod h1:vp38dT33FGfVotRiTmDo3bFyaHq+p3LektQrjTULowo= github.com/oklog/ulid/v2 v2.0.2 h1:r4fFzBm+bv0wNKNh5eXTwU7i85y5x+uwkxCUTNVQqLc= github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= @@ -83,36 +83,36 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= -github.com/senzing-garage/go-cmdhelping v0.3.4 h1:WamPZ2SqUQycBjGFcwRgkW0MQ4cEr3ZAvaQS3c+giOk= -github.com/senzing-garage/go-cmdhelping v0.3.4/go.mod h1:adNIqAhfSrKfPAm4zRcwQxjIj/Ro6Xu1BGzdmvofFno= -github.com/senzing-garage/go-databasing v0.5.7 h1:/qbjGoTMYI5olGYbfN/uwVW0xRRUyJ20n8uCYVaTdoM= -github.com/senzing-garage/go-databasing v0.5.7/go.mod h1:CGjC2ZycoWLSpeK4Hlc980M4w84fk6fcQDUY/rfa1DU= -github.com/senzing-garage/go-helpers v0.6.11 h1:cwXZLVFKRnriyX+RCaS1Rg9+x7/sJcJjN0TIVZo/vdo= -github.com/senzing-garage/go-helpers v0.6.11/go.mod h1:xjTBckB68M54X5fPyG1ArjXsqfs4rW4CKLNkMDFxAmo= -github.com/senzing-garage/go-logging v1.5.2 h1:9Rhsvxu6jLHfCLIoDxSMXX0sf/w0TY/L7i7fFfSdP64= -github.com/senzing-garage/go-logging v1.5.2/go.mod h1:+QsFSi/qKmCC3YAyuXcRbQlBpvpmhTWLWVH2Miap1Fw= +github.com/senzing-garage/go-cmdhelping v0.3.5 h1:knSHGGeZXalIOvz2TW4TNqC0HluZjAvv9ELZVqMwwWk= +github.com/senzing-garage/go-cmdhelping v0.3.5/go.mod h1:n0TdEBOca7NMMVZEECKdsiopHHNk9Il2Bsc4ITFsHAA= +github.com/senzing-garage/go-databasing v0.5.8 h1:OSgcwO8KwHNoqMDo3i0RjAcaKj720B1oUoI/3AfidFk= +github.com/senzing-garage/go-databasing v0.5.8/go.mod h1:LypxgRI414I04S5lqdrxNIQ9hVuZHOQMrdC0sP34OyI= +github.com/senzing-garage/go-helpers v0.6.13 h1:9RbLEQsq4NiBCRjZb1/+DFgRqPeXUyq9xRoVjX0edRQ= +github.com/senzing-garage/go-helpers v0.6.13/go.mod h1:0hLab0TEvzXW+iWBExnbev+44yLngLURRezbPIl/8yQ= +github.com/senzing-garage/go-logging v1.5.3 h1:RYF5hHL4fAUzOFMQwwotT5/I0YD3ItDF589wKtw73X4= +github.com/senzing-garage/go-logging v1.5.3/go.mod h1:AAZvO6ectkKzD1ZbUl24X1TOd3riCQLYaMKgBnuiZF0= github.com/senzing-garage/go-messaging v1.5.3 h1:bH+LtEgNJj/PRbg1VMK9/Gk457CdfdcjMiubxffbTog= github.com/senzing-garage/go-messaging v1.5.3/go.mod h1:7qvSNAVyWcSIcsnDAm8obCxHItljN295O3fX4bOgfp0= -github.com/senzing-garage/go-observing v0.3.4 h1:SQuRmgXZEzcvHYBxObmRf7GYyPt+olZPZhm46ckYGe0= -github.com/senzing-garage/go-observing v0.3.4/go.mod h1:EC0jh0estTXmrnLQyUtbsVzSBNdSWFjL5O+gCA/RJJc= +github.com/senzing-garage/go-observing v0.3.5 h1:DDb8MzycnbTv4Gu9BVO1Whjmbq51CMdlmzUKYn//bCM= +github.com/senzing-garage/go-observing v0.3.5/go.mod h1:U9WB1nmAZ+BfxuDcfJ3SydwtxhhWS0uXupCkNokbiYU= github.com/senzing-garage/go-sdk-abstract-factory v0.9.9 h1:Hz6bHQmhN88dc/37zea+dxheaYumFXsHeoWos27+mdY= github.com/senzing-garage/go-sdk-abstract-factory v0.9.9/go.mod h1:Okjt+spjNHT04Q3iGXKGocE05z4tobGy58LmdOMdGiY= -github.com/senzing-garage/sz-sdk-go v0.15.3 h1:fq5eZgEooZaQZCv6Knt1zkpo0C9QU1CLS9LCOkRanqo= -github.com/senzing-garage/sz-sdk-go v0.15.3/go.mod h1:RPZG4W1AgWxjpA1ogJ0r4TYX0ITx5YhWSIRqEXkdrrg= -github.com/senzing-garage/sz-sdk-go-core v0.9.4 h1:4oYhA6ogYDlNdCgHod66hCSUL4kqhsqL41zoKqk2EOI= -github.com/senzing-garage/sz-sdk-go-core v0.9.4/go.mod h1:sv1i6youVc23YV2qKw5QgFlzXxWyQckzydmGLIyyB1g= -github.com/senzing-garage/sz-sdk-go-grpc v0.9.5 h1:H5tdKnWAIRD3vumlguYkMg6A0hU41p0KqGVZZYElogg= -github.com/senzing-garage/sz-sdk-go-grpc v0.9.5/go.mod h1:D5hsfbJi5nmXkc2V4DF+qOTZjLxT55x4ZjDyPj6njK8= -github.com/senzing-garage/sz-sdk-go-mock v0.8.6 h1:V0/e+2fZVbx1mDkoO9QXv8tj0h28yi3WhXzqGEtQWPo= -github.com/senzing-garage/sz-sdk-go-mock v0.8.6/go.mod h1:Y2chukFdrIw16da4vYUavD5MRkG0mIBzgsz2yOm+GIc= +github.com/senzing-garage/sz-sdk-go v0.15.4 h1:Q3dquqNBOtr25ICVk8KVj55qjvKib2eW2vGvgKX02Kg= +github.com/senzing-garage/sz-sdk-go v0.15.4/go.mod h1:RPZG4W1AgWxjpA1ogJ0r4TYX0ITx5YhWSIRqEXkdrrg= +github.com/senzing-garage/sz-sdk-go-core v0.9.6 h1:qtXdf4VqcJIj+elfCciulKvW6kK/ckUAKnKo8608H74= +github.com/senzing-garage/sz-sdk-go-core v0.9.6/go.mod h1:Wja8sgYbpZ6pvS/Y6wYqI1Nn6OjCTP2xP8+SqKqiMvM= +github.com/senzing-garage/sz-sdk-go-grpc v0.9.6 h1:c3gD4Yc2GO5oc4yqACGSUlkhZ3nyCsat0DQJlJMo1wU= +github.com/senzing-garage/sz-sdk-go-grpc v0.9.6/go.mod h1:cFVP4MaGePjGS3wqLXe9ycrvqr3lSKgS1FDdwPwCZNg= +github.com/senzing-garage/sz-sdk-go-mock v0.8.8 h1:JF6Hqbl+LKR/l7ogPu15rd2vCVMjMbZARsird/P/2og= +github.com/senzing-garage/sz-sdk-go-mock v0.8.8/go.mod h1:d7RC8/FXEr7SjIfu8AsUQoTGwFLilJGNK0mDQfT0y7c= github.com/senzing-garage/sz-sdk-proto v0.8.3 h1:tXnEA8LEcTvx7+kfS5CrC2UhT/tywqerog807zQvNVc= github.com/senzing-garage/sz-sdk-proto v0.8.3/go.mod h1:142ssyFXWOp6PUjMWUZX2l9HFjVPWFggTR4jqE0a0ro= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= -github.com/spf13/cast v1.8.0 h1:gEN9K4b8Xws4EX0+a0reLmhq8moKn7ntRlQYgjPeCDk= -github.com/spf13/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE= +github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= @@ -139,8 +139,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= -golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 h1:y5zboxd6LQAqYIhHnB48p0ByQ/GnQx2BE33L8BOHQkI= -golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ= +golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b h1:QoALfVG9rhQ/M7vYDScfPdWjGL9dlsVVM5VGh7aKoAA= +golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ= golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= @@ -151,8 +151,8 @@ golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 h1:IkAfh6J/yllPtpYFU0zZN1hUPYdT0ogkBT/9hMxHjvg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8= google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= diff --git a/package.Dockerfile b/package.Dockerfile index d3ec359..1203a3f 100755 --- a/package.Dockerfile +++ b/package.Dockerfile @@ -2,7 +2,7 @@ # Stages # ----------------------------------------------------------------------------- -ARG IMAGE_SENZINGSDK_RUNTIME=senzing/senzingsdk-runtime-beta:latest +ARG IMAGE_SENZINGSDK_RUNTIME=senzing/senzingsdk-runtime:latest ARG IMAGE_BUILDER=golang:1.24.1-bookworm ARG IMAGE_FPM=dockter/fpm:latest ARG IMAGE_FINAL=alpine From add139ce4a15e8c59a010b99f171d2ba5c869963 Mon Sep 17 00:00:00 2001 From: docktermj Date: Tue, 3 Jun 2025 15:09:38 -0400 Subject: [PATCH 2/3] #182 Improve error wrapping --- cmd/cmd_test.go | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go index da12fef..f7a0190 100644 --- a/cmd/cmd_test.go +++ b/cmd/cmd_test.go @@ -12,23 +12,7 @@ import ( // Test public functions // ---------------------------------------------------------------------------- -func Test_CompletionCmd(test *testing.T) { - test.Parallel() - - err := cmd.CompletionCmd.Execute() - require.NoError(test, err) - err = cmd.CompletionCmd.RunE(cmd.CompletionCmd, []string{}) - require.NoError(test, err) -} -func Test_DocsCmd(test *testing.T) { - test.Parallel() - - err := cmd.DocsCmd.Execute() - require.NoError(test, err) - err = cmd.DocsCmd.RunE(cmd.DocsCmd, []string{}) - require.NoError(test, err) -} func Test_Execute(test *testing.T) { test.Parallel() @@ -84,3 +68,21 @@ func Test_RootCmd(test *testing.T) { err = cmd.RootCmd.RunE(cmd.RootCmd, []string{}) require.NoError(test, err) } + +func Test_CompletionCmd(test *testing.T) { + test.Parallel() + + err := cmd.CompletionCmd.Execute() + require.NoError(test, err) + err = cmd.CompletionCmd.RunE(cmd.CompletionCmd, []string{}) + require.NoError(test, err) +} + +func Test_DocsCmd(test *testing.T) { + test.Parallel() + + err := cmd.DocsCmd.Execute() + require.NoError(test, err) + err = cmd.DocsCmd.RunE(cmd.DocsCmd, []string{}) + require.NoError(test, err) +} From 8d1a6283021401c95e74e76c1d3b80b44226edbc Mon Sep 17 00:00:00 2001 From: docktermj Date: Tue, 3 Jun 2025 15:12:20 -0400 Subject: [PATCH 3/3] #182 Improve error wrapping --- cmd/cmd_test.go | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go index f7a0190..a3d54fe 100644 --- a/cmd/cmd_test.go +++ b/cmd/cmd_test.go @@ -12,8 +12,6 @@ import ( // Test public functions // ---------------------------------------------------------------------------- - - func Test_Execute(test *testing.T) { test.Parallel() @@ -70,19 +68,19 @@ func Test_RootCmd(test *testing.T) { } func Test_CompletionCmd(test *testing.T) { - test.Parallel() + test.Parallel() - err := cmd.CompletionCmd.Execute() - require.NoError(test, err) - err = cmd.CompletionCmd.RunE(cmd.CompletionCmd, []string{}) - require.NoError(test, err) + err := cmd.CompletionCmd.Execute() + require.NoError(test, err) + err = cmd.CompletionCmd.RunE(cmd.CompletionCmd, []string{}) + require.NoError(test, err) } func Test_DocsCmd(test *testing.T) { - test.Parallel() + test.Parallel() - err := cmd.DocsCmd.Execute() - require.NoError(test, err) - err = cmd.DocsCmd.RunE(cmd.DocsCmd, []string{}) - require.NoError(test, err) + err := cmd.DocsCmd.Execute() + require.NoError(test, err) + err = cmd.DocsCmd.RunE(cmd.DocsCmd, []string{}) + require.NoError(test, err) }