From 2c97763dc5598a65a16428365199f9490c0194ce Mon Sep 17 00:00:00 2001 From: argonui <92067588+argonui@users.noreply.github.com> Date: Mon, 3 Aug 2026 22:32:28 -0500 Subject: [PATCH] ci: enforce gofmt/vet/race and format existing files The Go workflow only ran build+test, so unformatted code, vet issues, and data races could land unnoticed. Add a gofmt check, 'go vet', and run tests with -race. Also gofmt five files that were not format-clean (file/textops_test.go, mod/generate.go, mod/generate_test.go, mod/reverse.go, objects/objects_test.go) so the new check passes. Co-Authored-By: Claude Opus 5 --- .github/workflows/go.yml | 12 +++++++++++- file/textops_test.go | 1 - mod/generate.go | 18 +++++++++--------- mod/generate_test.go | 8 ++++---- mod/reverse.go | 4 ++-- objects/objects_test.go | 4 ++-- 6 files changed, 28 insertions(+), 19 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 0d89a6f..27bcdea 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -23,8 +23,18 @@ jobs: with: go-version: 1.18 + - name: Format check + run: | + unformatted=$(gofmt -l .) + if [ -n "$unformatted" ]; then + echo "These files are not gofmt-clean:"; echo "$unformatted"; exit 1 + fi + + - name: Vet + run: go vet ./... + - name: Build run: go build -v ./... - name: Test - run: go test -v ./... + run: go test -race -v ./... diff --git a/file/textops_test.go b/file/textops_test.go index f6e8de4..c7b7c12 100644 --- a/file/textops_test.go +++ b/file/textops_test.go @@ -6,7 +6,6 @@ import ( "testing" "github.com/google/go-cmp/cmp" - ) type fakeFiles struct { diff --git a/mod/generate.go b/mod/generate.go index fc7136c..d6a097f 100644 --- a/mod/generate.go +++ b/mod/generate.go @@ -29,15 +29,15 @@ var ( // Mod is used as the accurate representation of what gets printed when // module creation is done type Mod struct { - Data types.J - RootRead file.JSONReader - RootWrite file.JSONWriter - Lua file.TextReader - XML file.TextReader - Modsettings file.JSONReader - Objs file.JSONReader - Objdirs file.DirExplorer - SavedObj bool + Data types.J + RootRead file.JSONReader + RootWrite file.JSONWriter + Lua file.TextReader + XML file.TextReader + Modsettings file.JSONReader + Objs file.JSONReader + Objdirs file.DirExplorer + SavedObj bool // If not-empty: this holds the root filename for the object state json object OnlyObjStates string diff --git a/mod/generate_test.go b/mod/generate_test.go index e309458..1dbd184 100644 --- a/mod/generate_test.go +++ b/mod/generate_test.go @@ -200,14 +200,14 @@ func TestGenerate(t *testing.T) { { name: "Saved Object (Simple)", inputObjs: map[string]types.J{ - "test123.json": map[string]interface{}{ + "test123.json": map[string]interface{}{ "GUID": "test123", "Description": "A test object", - }, - }, + }, + }, flags: map[string]interface{}{ "OnlyObjStates": true, - "SavedObj": true, + "SavedObj": true, }, want: map[string]interface{}{ "SaveName": "", diff --git a/mod/reverse.go b/mod/reverse.go index 2437bba..6cf2566 100644 --- a/mod/reverse.go +++ b/mod/reverse.go @@ -21,7 +21,7 @@ type Reverser struct { RootWrite file.JSONWriter // If not empty: holds the entire filename (C:...) of the json to read - OnlyObjState string + OnlyObjState string } func (r *Reverser) writeOnlyObjStates(raw map[string]interface{}) error { @@ -68,7 +68,7 @@ func (r *Reverser) Write(raw map[string]interface{}) error { } createdFile := strKey + ext - + var jsonInterface map[string]interface{} err := json.Unmarshal([]byte(strVal), &jsonInterface) if err == nil { diff --git a/objects/objects_test.go b/objects/objects_test.go index 067aca0..535315c 100644 --- a/objects/objects_test.go +++ b/objects/objects_test.go @@ -323,7 +323,7 @@ func TestObjPrintingToFile(t *testing.T) { content: types.J{ "acknowledgedUpgradeVersions": []any{}, "optionPanel": map[string]any{ - "cardLanguage": string("en"), + "cardLanguage": string("en"), "changePlayAreaImage": bool(false), "playAreaConnectionColor": map[string]any{ "a": float64(1), @@ -406,7 +406,7 @@ func TestName(t *testing.T) { guid: "010509", want: "OccultInvocation!!!!.010509", }, { - data: types.J{ + data: types.J{ "Nickname": "Verschwörung der Äxte!", "Name": "Card", },