From f510c17bb9a21627f1f115279f7c36001d48b8e8 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 20 Nov 2025 19:43:54 +0000 Subject: [PATCH 1/9] build: Bump golangci-lint to v2.6.0 Signed-off-by: Paulo Gomes --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 4cb55b4..f4cd9b4 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ WASIRUN_WRAPPER := $(CURDIR)/scripts/wasirun-wrapper COVERAGE_REPORT := coverage.out COVERAGE_MODE := count -GOLANGCI_VERSION ?= v2.1.6 +GOLANGCI_VERSION ?= v2.6.0 TOOLS_BIN := $(shell mkdir -p build/tools && realpath build/tools) GOLANGCI = $(TOOLS_BIN)/golangci-lint-$(GOLANGCI_VERSION) From d67ef9340ad984ecbd9778f2cc5c09e69b163f20 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 20 Nov 2025 19:44:35 +0000 Subject: [PATCH 2/9] build: Remove dependabot Dependabot will be replaced by renovate across the org. Signed-off-by: Paulo Gomes --- .github/dependabot.yaml | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 .github/dependabot.yaml diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml deleted file mode 100644 index 956a98f..0000000 --- a/.github/dependabot.yaml +++ /dev/null @@ -1,19 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "monthly" - commit-message: - prefix: "build" - - - package-ecosystem: "gomod" - directory: "/" - schedule: - interval: "daily" - commit-message: - prefix: "build" - groups: - golang.org: - patterns: - - "golang.org/*" From efa5b097df46109f0270d208f14f837fa1edd590 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 20 Nov 2025 19:48:41 +0000 Subject: [PATCH 3/9] govet: Remove deprecated +build build tag Signed-off-by: Paulo Gomes --- osfs/os.go | 1 - osfs/os_bound.go | 1 - osfs/os_bound_test.go | 1 - osfs/os_chroot.go | 1 - osfs/os_chroot_test.go | 1 - osfs/os_js.go | 1 - osfs/os_js_test.go | 1 - osfs/os_plan9.go | 1 - osfs/os_posix.go | 1 - osfs/os_test.go | 1 - osfs/os_wasip1.go | 1 - osfs/os_wasip1_test.go | 1 - osfs/os_windows.go | 1 - test/common_posix.go | 1 - test/common_windows.go | 1 - 15 files changed, 15 deletions(-) diff --git a/osfs/os.go b/osfs/os.go index fad85b8..1d9d702 100644 --- a/osfs/os.go +++ b/osfs/os.go @@ -1,5 +1,4 @@ //go:build !js -// +build !js // Package osfs provides a billy filesystem for the OS. package osfs diff --git a/osfs/os_bound.go b/osfs/os_bound.go index 1ddf42c..eb154e4 100644 --- a/osfs/os_bound.go +++ b/osfs/os_bound.go @@ -1,5 +1,4 @@ //go:build !js -// +build !js /* Copyright 2022 The Flux authors. diff --git a/osfs/os_bound_test.go b/osfs/os_bound_test.go index 7c18dc4..cc26ffa 100644 --- a/osfs/os_bound_test.go +++ b/osfs/os_bound_test.go @@ -1,5 +1,4 @@ //go:build !wasm -// +build !wasm /* Copyright 2022 The Flux authors. diff --git a/osfs/os_chroot.go b/osfs/os_chroot.go index c257e5e..2cde299 100644 --- a/osfs/os_chroot.go +++ b/osfs/os_chroot.go @@ -1,5 +1,4 @@ //go:build !js -// +build !js package osfs diff --git a/osfs/os_chroot_test.go b/osfs/os_chroot_test.go index 977bcba..cb2a96d 100644 --- a/osfs/os_chroot_test.go +++ b/osfs/os_chroot_test.go @@ -1,5 +1,4 @@ //go:build !wasm -// +build !wasm package osfs diff --git a/osfs/os_js.go b/osfs/os_js.go index 170c480..6824081 100644 --- a/osfs/os_js.go +++ b/osfs/os_js.go @@ -1,5 +1,4 @@ //go:build js -// +build js package osfs diff --git a/osfs/os_js_test.go b/osfs/os_js_test.go index 3da49b0..307114a 100644 --- a/osfs/os_js_test.go +++ b/osfs/os_js_test.go @@ -1,5 +1,4 @@ //go:build js -// +build js package osfs diff --git a/osfs/os_plan9.go b/osfs/os_plan9.go index df2edea..720cf2a 100644 --- a/osfs/os_plan9.go +++ b/osfs/os_plan9.go @@ -1,5 +1,4 @@ //go:build plan9 -// +build plan9 package osfs diff --git a/osfs/os_posix.go b/osfs/os_posix.go index ab0aca1..c89509e 100644 --- a/osfs/os_posix.go +++ b/osfs/os_posix.go @@ -1,5 +1,4 @@ //go:build !plan9 && !windows && !wasm -// +build !plan9,!windows,!wasm package osfs diff --git a/osfs/os_test.go b/osfs/os_test.go index b73b1be..1f637db 100644 --- a/osfs/os_test.go +++ b/osfs/os_test.go @@ -1,5 +1,4 @@ //go:build !wasm -// +build !wasm package osfs diff --git a/osfs/os_wasip1.go b/osfs/os_wasip1.go index 79e6e33..ceca15c 100644 --- a/osfs/os_wasip1.go +++ b/osfs/os_wasip1.go @@ -1,5 +1,4 @@ //go:build wasip1 -// +build wasip1 package osfs diff --git a/osfs/os_wasip1_test.go b/osfs/os_wasip1_test.go index 643c271..073f3c1 100644 --- a/osfs/os_wasip1_test.go +++ b/osfs/os_wasip1_test.go @@ -1,5 +1,4 @@ //go:build wasip1 -// +build wasip1 package osfs diff --git a/osfs/os_windows.go b/osfs/os_windows.go index eee689d..af25ce9 100644 --- a/osfs/os_windows.go +++ b/osfs/os_windows.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package osfs diff --git a/test/common_posix.go b/test/common_posix.go index 98056c8..80250d3 100644 --- a/test/common_posix.go +++ b/test/common_posix.go @@ -1,5 +1,4 @@ //go:build !windows && !wasip1 && !js && !wasp -// +build !windows,!wasip1,!js,!wasp package test diff --git a/test/common_windows.go b/test/common_windows.go index 33a58de..cc530c4 100644 --- a/test/common_windows.go +++ b/test/common_windows.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package test From 80d0101521f9b52ead45357338ba77a5373c4aa9 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 20 Nov 2025 19:50:51 +0000 Subject: [PATCH 4/9] build: Remove redundant exclusions Signed-off-by: Paulo Gomes --- .golangci.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index f233aa2..ad76f61 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -60,16 +60,8 @@ linters: - common-false-positives - legacy - std-error-handling - paths: - - third_party$ - - builtin$ - - examples$ formatters: enable: - goimports exclusions: generated: lax - paths: - - third_party$ - - builtin$ - - examples$ From f621c72b64e9e3926835039c9553749d39a123c6 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 20 Nov 2025 19:57:46 +0000 Subject: [PATCH 5/9] build: Format code with gci, gofmt and gofumpt Signed-off-by: Paulo Gomes --- .golangci.yaml | 3 +++ helper/chroot/chroot_test.go | 12 +++++------ helper/iofs/iofs.go | 10 +++++---- helper/mount/mount.go | 3 +-- helper/mount/mount_test.go | 20 ++++++++--------- helper/polyfill/polyfill_test.go | 4 +--- memfs/memory.go | 6 +++--- memfs/memory_option.go | 3 +-- memfs/memory_test.go | 8 +++---- memfs/storage.go | 2 +- osfs/os_bound.go | 4 +--- osfs/os_chroot_test.go | 2 +- osfs/os_js.go | 3 +-- osfs/os_js_test.go | 6 ++---- test/basic_test.go | 37 ++++++++++++++++---------------- test/chroot_test.go | 12 +++++------ test/dir_test.go | 34 ++++++++++++++--------------- test/fs_test.go | 20 ++++++++--------- test/symlink_test.go | 20 ++++++++--------- util/util.go | 6 ++++-- util/util_test.go | 2 +- util/walk_test.go | 1 - 22 files changed, 108 insertions(+), 110 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index ad76f61..4489bd8 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -62,6 +62,9 @@ linters: - std-error-handling formatters: enable: + - gci + - gofmt + - gofumpt - goimports exclusions: generated: lax diff --git a/helper/chroot/chroot_test.go b/helper/chroot/chroot_test.go index cd7bb6b..5bc71c3 100644 --- a/helper/chroot/chroot_test.go +++ b/helper/chroot/chroot_test.go @@ -84,19 +84,19 @@ func TestOpenFile(t *testing.T) { m := &test.BasicMock{} fs := New(m, "/foo") - f, err := fs.OpenFile("bar/qux", 42, 0777) + f, err := fs.OpenFile("bar/qux", 42, 0o777) require.NoError(t, err) assert.Equal(t, f.Name(), filepath.Join("bar", "qux")) assert.Len(t, m.OpenFileArgs, 1) - assert.Equal(t, m.OpenFileArgs[0], [3]interface{}{"/foo/bar/qux", 42, os.FileMode(0777)}) + assert.Equal(t, m.OpenFileArgs[0], [3]interface{}{"/foo/bar/qux", 42, os.FileMode(0o777)}) } func TestOpenFileErrCrossedBoundary(t *testing.T) { m := &test.BasicMock{} fs := New(m, "/foo") - _, err := fs.OpenFile("../foo", 42, 0777) + _, err := fs.OpenFile("../foo", 42, 0o777) assert.ErrorIs(t, err, billy.ErrCrossedBoundary) } @@ -218,18 +218,18 @@ func TestMkDirAll(t *testing.T) { m := &test.DirMock{} fs := New(m, "/foo") - err := fs.MkdirAll("bar", 0777) + err := fs.MkdirAll("bar", 0o777) require.NoError(t, err) assert.Len(t, m.MkdirAllArgs, 1) - assert.Equal(t, m.MkdirAllArgs[0], [2]interface{}{"/foo/bar", os.FileMode(0777)}) + assert.Equal(t, m.MkdirAllArgs[0], [2]interface{}{"/foo/bar", os.FileMode(0o777)}) } func TestMkdirAllErrCrossedBoundary(t *testing.T) { m := &test.DirMock{} fs := New(m, "/foo") - err := fs.MkdirAll("../foo", 0777) + err := fs.MkdirAll("../foo", 0o777) assert.ErrorIs(t, err, billy.ErrCrossedBoundary) } diff --git a/helper/iofs/iofs.go b/helper/iofs/iofs.go index 580797c..c5ced3e 100644 --- a/helper/iofs/iofs.go +++ b/helper/iofs/iofs.go @@ -21,10 +21,12 @@ type adapterFs struct { } // Type assertion that adapterFS implements the following interfaces: -var _ fs.FS = (*adapterFs)(nil) -var _ fs.ReadDirFS = (*adapterFs)(nil) -var _ fs.StatFS = (*adapterFs)(nil) -var _ fs.ReadFileFS = (*adapterFs)(nil) +var ( + _ fs.FS = (*adapterFs)(nil) + _ fs.ReadDirFS = (*adapterFs)(nil) + _ fs.StatFS = (*adapterFs)(nil) + _ fs.ReadFileFS = (*adapterFs)(nil) +) // TODO: implement fs.GlobFS, which will be a fair bit more code. diff --git a/helper/mount/mount.go b/helper/mount/mount.go index 3819ae3..7ee76f8 100644 --- a/helper/mount/mount.go +++ b/helper/mount/mount.go @@ -1,14 +1,13 @@ package mount import ( + "fmt" "io" "io/fs" "os" "path/filepath" "strings" - "fmt" - "github.com/go-git/go-billy/v6" "github.com/go-git/go-billy/v6/helper/polyfill" ) diff --git a/helper/mount/mount_test.go b/helper/mount/mount_test.go index aa6ff41..3f11340 100644 --- a/helper/mount/mount_test.go +++ b/helper/mount/mount_test.go @@ -96,33 +96,33 @@ func TestOpenInMount(t *testing.T) { func TestOpenFile(t *testing.T) { helper, underlying, source := setup() - f, err := helper.OpenFile("bar/qux", 42, 0777) + f, err := helper.OpenFile("bar/qux", 42, 0o777) require.NoError(t, err) assert.Equal(t, filepath.Join("bar", "qux"), f.Name()) assert.Len(t, underlying.OpenFileArgs, 1) assert.Equal(t, underlying.OpenFileArgs[0], - [3]interface{}{filepath.Join("bar", "qux"), 42, os.FileMode(0777)}) + [3]interface{}{filepath.Join("bar", "qux"), 42, os.FileMode(0o777)}) assert.Empty(t, source.OpenFileArgs) } func TestOpenFileMountPoint(t *testing.T) { helper, _, _ := setup() - f, err := helper.OpenFile("foo", 42, 0777) + f, err := helper.OpenFile("foo", 42, 0o777) assert.Nil(t, f) assert.ErrorIs(t, err, os.ErrInvalid) } func TestOpenFileInMount(t *testing.T) { helper, underlying, source := setup() - f, err := helper.OpenFile("foo/bar/qux", 42, 0777) + f, err := helper.OpenFile("foo/bar/qux", 42, 0o777) require.NoError(t, err) assert.Equal(t, filepath.Join("foo", "bar", "qux"), f.Name()) assert.Empty(t, underlying.OpenFileArgs) assert.Len(t, source.OpenFileArgs, 1) assert.Equal(t, source.OpenFileArgs[0], - [3]interface{}{filepath.Join("bar", "qux"), 42, os.FileMode(0777)}) + [3]interface{}{filepath.Join("bar", "qux"), 42, os.FileMode(0o777)}) } func TestStat(t *testing.T) { @@ -170,7 +170,7 @@ func TestRenameCross(t *testing.T) { underlying := memfs.New() source := memfs.New() - err := util.WriteFile(underlying, "file", []byte("foo"), 0777) + err := util.WriteFile(underlying, "file", []byte("foo"), 0o777) require.NoError(t, err) fs := New(underlying, "/foo", source) @@ -250,24 +250,24 @@ func TestReadDirInMount(t *testing.T) { func TestMkdirAll(t *testing.T) { helper, underlying, source := setup() - err := helper.MkdirAll("bar/qux", 0777) + err := helper.MkdirAll("bar/qux", 0o777) require.NoError(t, err) assert.Len(t, underlying.MkdirAllArgs, 1) assert.Equal(t, underlying.MkdirAllArgs[0], - [2]interface{}{filepath.Join("bar", "qux"), os.FileMode(0777)}) + [2]interface{}{filepath.Join("bar", "qux"), os.FileMode(0o777)}) assert.Empty(t, source.MkdirAllArgs) } func TestMkdirAllInMount(t *testing.T) { helper, underlying, source := setup() - err := helper.MkdirAll("foo/bar/qux", 0777) + err := helper.MkdirAll("foo/bar/qux", 0o777) require.NoError(t, err) assert.Empty(t, underlying.MkdirAllArgs) assert.Len(t, source.MkdirAllArgs, 1) assert.Equal(t, source.MkdirAllArgs[0], - [2]interface{}{filepath.Join("bar", "qux"), os.FileMode(0777)}) + [2]interface{}{filepath.Join("bar", "qux"), os.FileMode(0o777)}) } func TestLstat(t *testing.T) { diff --git a/helper/polyfill/polyfill_test.go b/helper/polyfill/polyfill_test.go index 8a00b26..4c5567d 100644 --- a/helper/polyfill/polyfill_test.go +++ b/helper/polyfill/polyfill_test.go @@ -9,9 +9,7 @@ import ( "github.com/stretchr/testify/assert" ) -var ( - helper = New(&test.BasicMock{}) -) +var helper = New(&test.BasicMock{}) func TestTempFile(t *testing.T) { _, err := helper.TempFile("", "") diff --git a/memfs/memory.go b/memfs/memory.go index 6120515..0081db3 100644 --- a/memfs/memory.go +++ b/memfs/memory.go @@ -34,7 +34,7 @@ func New(opts ...Option) billy.Filesystem { fs := &Memory{ s: newStorage(), } - _, err := fs.s.New("/", 0755|os.ModeDir, 0) + _, err := fs.s.New("/", 0o755|os.ModeDir, 0) if err != nil { log.Printf("failed to create root dir: %v", err) } @@ -42,7 +42,7 @@ func New(opts ...Option) billy.Filesystem { } func (fs *Memory) Create(filename string) (billy.File, error) { - return fs.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) + return fs.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o666) } func (fs *Memory) Open(filename string) (billy.File, error) { @@ -193,7 +193,7 @@ func (fs *Memory) Symlink(target, link string) error { return err } - return util.WriteFile(fs, link, []byte(target), 0777|os.ModeSymlink) + return util.WriteFile(fs, link, []byte(target), 0o777|os.ModeSymlink) } func (fs *Memory) Readlink(link string) (string, error) { diff --git a/memfs/memory_option.go b/memfs/memory_option.go index bbdd22d..3790326 100644 --- a/memfs/memory_option.go +++ b/memfs/memory_option.go @@ -2,5 +2,4 @@ package memfs type Option func(*options) -type options struct { -} +type options struct{} diff --git a/memfs/memory_test.go b/memfs/memory_test.go index 1c7d1e9..4b7e4a7 100644 --- a/memfs/memory_test.go +++ b/memfs/memory_test.go @@ -91,7 +91,7 @@ func TestNegativeOffsets(t *testing.T) { func TestExclusive(t *testing.T) { fs := New() - f, err := fs.OpenFile("exclusive", os.O_CREATE|os.O_EXCL|os.O_RDWR, 0666) + f, err := fs.OpenFile("exclusive", os.O_CREATE|os.O_EXCL|os.O_RDWR, 0o666) require.NoError(t, err) fmt.Fprint(f, "mememememe") @@ -99,7 +99,7 @@ func TestExclusive(t *testing.T) { err = f.Close() require.NoError(t, err) - _, err = fs.OpenFile("exclusive", os.O_CREATE|os.O_EXCL|os.O_RDWR, 0666) + _, err = fs.OpenFile("exclusive", os.O_CREATE|os.O_EXCL|os.O_RDWR, 0o666) assert.ErrorContains(t, err, os.ErrExist.Error()) } @@ -137,10 +137,10 @@ func TestNotFound(t *testing.T) { func TestTruncateAppend(t *testing.T) { fs := New() - err := util.WriteFile(fs, "truncate_append", []byte("file-content"), 0666) + err := util.WriteFile(fs, "truncate_append", []byte("file-content"), 0o666) require.NoError(t, err) - f, err := fs.OpenFile("truncate_append", os.O_WRONLY|os.O_TRUNC|os.O_APPEND, 0666) + f, err := fs.OpenFile("truncate_append", os.O_WRONLY|os.O_TRUNC|os.O_APPEND, 0o666) require.NoError(t, err) n, err := f.Write([]byte("replace")) diff --git a/memfs/storage.go b/memfs/storage.go index f7c0d1e..4412980 100644 --- a/memfs/storage.go +++ b/memfs/storage.go @@ -186,7 +186,7 @@ func (s *storage) move(from, to string) error { s.mc.Unlock() }() - return s.createParent(to, 0644, file) + return s.createParent(to, 0o644, file) } func (s *storage) Remove(path string) error { diff --git a/osfs/os_bound.go b/osfs/os_bound.go index eb154e4..6f9b539 100644 --- a/osfs/os_bound.go +++ b/osfs/os_bound.go @@ -29,9 +29,7 @@ import ( "github.com/go-git/go-billy/v6" ) -var ( - dotPrefixes = []string{"./", ".\\"} -) +var dotPrefixes = []string{"./", ".\\"} // BoundOS is a fs implementation based on the OS filesystem which is bound to // a base dir. diff --git a/osfs/os_chroot_test.go b/osfs/os_chroot_test.go index cb2a96d..712c5b3 100644 --- a/osfs/os_chroot_test.go +++ b/osfs/os_chroot_test.go @@ -23,7 +23,7 @@ func setup(t *testing.T) (billy.Filesystem, string) { // the containing directory (see http://man.cat-v.org/plan_9/5/open). // Since TestOpenFileWithModes and TestStat creates files directly // in the temporary directory, we need to make it more permissive. - err := os.Chmod(path, 0777) + err := os.Chmod(path, 0o777) require.NoError(t, err) } return newChrootOS(path), path diff --git a/osfs/os_js.go b/osfs/os_js.go index 6824081..229dc39 100644 --- a/osfs/os_js.go +++ b/osfs/os_js.go @@ -20,5 +20,4 @@ func New(baseDir string, _ ...Option) billy.Filesystem { return chroot.New(Default, Default.Join("/", baseDir)) } -type options struct { -} +type options struct{} diff --git a/osfs/os_js_test.go b/osfs/os_js_test.go index 307114a..4ec1a71 100644 --- a/osfs/os_js_test.go +++ b/osfs/os_js_test.go @@ -41,7 +41,5 @@ func TestDefault(t *testing.T) { } } -var ( - // API call assertions - _ = New("/") -) +// API call assertions +var _ = New("/") diff --git a/test/basic_test.go b/test/basic_test.go index 867ec42..671ee7f 100644 --- a/test/basic_test.go +++ b/test/basic_test.go @@ -138,7 +138,7 @@ func TestOpenNotExists(t *testing.T) { func TestOpenFile(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - defaultMode := os.FileMode(0666) + defaultMode := os.FileMode(0o666) f, err := fs.OpenFile("foo1", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, defaultMode) require.NoError(t, err) @@ -171,7 +171,7 @@ func TestOpenFile(t *testing.T) { func TestOpenFileNoTruncate(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - defaultMode := os.FileMode(0666) + defaultMode := os.FileMode(0o666) // Create when it does not exist f, err := fs.OpenFile("foo1", os.O_CREATE|os.O_WRONLY, defaultMode) @@ -198,7 +198,7 @@ func TestOpenFileNoTruncate(t *testing.T) { func TestOpenFileAppend(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - defaultMode := os.FileMode(0666) + defaultMode := os.FileMode(0o666) f, err := fs.OpenFile("foo1", os.O_CREATE|os.O_WRONLY|os.O_APPEND, defaultMode) require.NoError(t, err) @@ -219,7 +219,7 @@ func TestOpenFileAppend(t *testing.T) { func TestOpenFileReadWrite(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - defaultMode := os.FileMode(0666) + defaultMode := os.FileMode(0o666) f, err := fs.OpenFile("foo1", os.O_CREATE|os.O_TRUNC|os.O_RDWR, defaultMode) require.NoError(t, err) @@ -310,7 +310,7 @@ func TestFileWriteClose(t *testing.T) { func TestFileRead(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", []byte("foo"), 0644) + err := util.WriteFile(fs, "foo", []byte("foo"), 0o644) require.NoError(t, err) f, err := fs.Open("foo") @@ -326,7 +326,7 @@ func TestFileRead(t *testing.T) { func TestFileClosed(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", []byte("foo"), 0644) + err := util.WriteFile(fs, "foo", []byte("foo"), 0o644) require.NoError(t, err) f, err := fs.Open("foo") @@ -341,7 +341,7 @@ func TestFileClosed(t *testing.T) { func TestFileNonRead(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", []byte("foo"), 0644) + err := util.WriteFile(fs, "foo", []byte("foo"), 0o644) require.NoError(t, err) f, err := fs.OpenFile("foo", os.O_WRONLY, 0) @@ -377,7 +377,7 @@ func TestFileSeekEnd(t *testing.T) { func testFileSeek(t *testing.T, fs Basic, offset int64, whence int) { t.Helper() - err := util.WriteFile(fs, "foo", []byte("0123456789abcdefghijklmnopqrstuvwxyz"), 0644) + err := util.WriteFile(fs, "foo", []byte("0123456789abcdefghijklmnopqrstuvwxyz"), 0o644) require.NoError(t, err) f, err := fs.Open("foo") @@ -402,7 +402,7 @@ func testFileSeek(t *testing.T, fs Basic, offset int64, whence int) { func TestSeekToEndAndWrite(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - defaultMode := os.FileMode(0666) + defaultMode := os.FileMode(0o666) f, err := fs.OpenFile("foo1", os.O_CREATE|os.O_TRUNC|os.O_RDWR, defaultMode) require.NoError(t, err) @@ -425,7 +425,7 @@ func TestSeekToEndAndWrite(t *testing.T) { func TestFileSeekClosed(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", []byte("foo"), 0644) + err := util.WriteFile(fs, "foo", []byte("foo"), 0o644) require.NoError(t, err) f, err := fs.Open("foo") @@ -515,7 +515,8 @@ func TestRename(t *testing.T) { to: "bar", wantFiles: []string{ filepath.FromSlash("/bar/bar1"), - filepath.FromSlash("/bar/bar2")}, + filepath.FromSlash("/bar/bar2"), + }, }, } @@ -577,7 +578,7 @@ func fsRoot(fs Filesystem) string { func TestOpenAndWrite(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", nil, 0644) + err := util.WriteFile(fs, "foo", nil, 0o644) require.NoError(t, err) foo, err := fs.Open("foo") @@ -595,7 +596,7 @@ func TestOpenAndWrite(t *testing.T) { func TestOpenAndStat(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", []byte("foo"), 0644) + err := util.WriteFile(fs, "foo", []byte("foo"), 0o644) require.NoError(t, err) foo, err := fs.Open("foo") @@ -636,7 +637,7 @@ func TestRemoveNonExisting(t *testing.T) { func TestRemoveNotEmptyDir(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", nil, 0644) + err := util.WriteFile(fs, "foo", nil, 0o644) require.NoError(t, err) err = fs.Remove("no-exists") @@ -674,7 +675,7 @@ func TestReadAtOnReadWrite(t *testing.T) { func TestReadAtOnReadOnly(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", []byte("abcdefg"), 0644) + err := util.WriteFile(fs, "foo", []byte("abcdefg"), 0o644) require.NoError(t, err) f, err := fs.Open("foo") @@ -695,7 +696,7 @@ func TestReadAtOnReadOnly(t *testing.T) { func TestReadAtEOF(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", []byte("TEST"), 0644) + err := util.WriteFile(fs, "foo", []byte("TEST"), 0o644) require.NoError(t, err) f, err := fs.Open("foo") @@ -715,7 +716,7 @@ func TestReadAtEOF(t *testing.T) { func TestReadAtOffset(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", []byte("TEST"), 0644) + err := util.WriteFile(fs, "foo", []byte("TEST"), 0o644) require.NoError(t, err) f, err := fs.Open("foo") @@ -769,7 +770,7 @@ func TestReadWriteLargeFile(t *testing.T) { func TestWriteFile(t *testing.T) { eachBasicFS(t, func(t *testing.T, fs Basic) { t.Helper() - err := util.WriteFile(fs, "foo", []byte("bar"), 0777) + err := util.WriteFile(fs, "foo", []byte("bar"), 0o777) require.NoError(t, err) f, err := fs.Open("foo") diff --git a/test/chroot_test.go b/test/chroot_test.go index 061cf0e..ed24c17 100644 --- a/test/chroot_test.go +++ b/test/chroot_test.go @@ -60,7 +60,7 @@ func TestOpenWithChroot(t *testing.T) { func TestOpenOutOffBoundary(t *testing.T) { eachChrootFS(t, func(t *testing.T, fs chrootFS) { t.Helper() - err := util.WriteFile(fs, "bar", nil, 0644) + err := util.WriteFile(fs, "bar", nil, 0o644) require.NoError(t, err) chroot, _ := fs.Chroot("foo") @@ -73,7 +73,7 @@ func TestOpenOutOffBoundary(t *testing.T) { func TestStatOutOffBoundary(t *testing.T) { eachChrootFS(t, func(t *testing.T, fs chrootFS) { t.Helper() - err := util.WriteFile(fs, "bar", nil, 0644) + err := util.WriteFile(fs, "bar", nil, 0o644) require.NoError(t, err) chroot, _ := fs.Chroot("foo") @@ -88,7 +88,7 @@ func TestStatWithChroot(t *testing.T) { t.Helper() files := []string{"foo", "bar", "qux/baz", "qux/qux"} for _, name := range files { - err := util.WriteFile(fs, name, nil, 0644) + err := util.WriteFile(fs, name, nil, 0o644) require.NoError(t, err) } @@ -120,10 +120,10 @@ func TestStatWithChroot(t *testing.T) { func TestRenameOutOffBoundary(t *testing.T) { eachChrootFS(t, func(t *testing.T, fs chrootFS) { t.Helper() - err := util.WriteFile(fs, "foo/foo", nil, 0644) + err := util.WriteFile(fs, "foo/foo", nil, 0o644) require.NoError(t, err) - err = util.WriteFile(fs, "bar", nil, 0644) + err = util.WriteFile(fs, "bar", nil, 0o644) require.NoError(t, err) chroot, _ := fs.Chroot("foo") @@ -138,7 +138,7 @@ func TestRenameOutOffBoundary(t *testing.T) { func TestRemoveOutOffBoundary(t *testing.T) { eachChrootFS(t, func(t *testing.T, fs chrootFS) { t.Helper() - err := util.WriteFile(fs, "bar", nil, 0644) + err := util.WriteFile(fs, "bar", nil, 0o644) require.NoError(t, err) chroot, _ := fs.Chroot("foo") diff --git a/test/dir_test.go b/test/dir_test.go index 743942c..1d76724 100644 --- a/test/dir_test.go +++ b/test/dir_test.go @@ -27,7 +27,7 @@ func eachDirFS(t *testing.T, test func(t *testing.T, fs dirFS)) { func TestDir_MkdirAll(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { - err := fs.MkdirAll("empty", os.FileMode(0755)) + err := fs.MkdirAll("empty", os.FileMode(0o755)) require.NoError(t, err) fi, err := fs.Stat("empty") @@ -38,7 +38,7 @@ func TestDir_MkdirAll(t *testing.T) { func TestDir_MkdirAllNested(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { - err := fs.MkdirAll("foo/bar/baz", os.FileMode(0755)) + err := fs.MkdirAll("foo/bar/baz", os.FileMode(0o755)) require.NoError(t, err) fi, err := fs.Stat("foo/bar/baz") @@ -57,14 +57,14 @@ func TestDir_MkdirAllNested(t *testing.T) { func TestDir_MkdirAllIdempotent(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { - err := fs.MkdirAll("empty", 0755) + err := fs.MkdirAll("empty", 0o755) require.NoError(t, err) fi, err := fs.Stat("empty") require.NoError(t, err) assert.True(t, fi.IsDir()) // idempotent - err = fs.MkdirAll("empty", 0755) + err = fs.MkdirAll("empty", 0o755) require.NoError(t, err) fi, err = fs.Stat("empty") require.NoError(t, err) @@ -74,7 +74,7 @@ func TestDir_MkdirAllIdempotent(t *testing.T) { func TestDir_MkdirAllAndCreate(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { - err := fs.MkdirAll("dir", os.FileMode(0755)) + err := fs.MkdirAll("dir", os.FileMode(0o755)) require.NoError(t, err) f, err := fs.Create("dir/bar/foo") @@ -93,7 +93,7 @@ func TestDir_MkdirAllWithExistingFile(t *testing.T) { require.NoError(t, err) require.NoError(t, f.Close()) - err = fs.MkdirAll("dir/foo", os.FileMode(0755)) + err = fs.MkdirAll("dir/foo", os.FileMode(0o755)) assert.Error(t, err) fi, err := fs.Stat("dir/foo") @@ -104,7 +104,7 @@ func TestDir_MkdirAllWithExistingFile(t *testing.T) { func TestDir_StatDir(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { - err := fs.MkdirAll("foo/bar", 0755) + err := fs.MkdirAll("foo/bar", 0o755) require.NoError(t, err) fi, err := fs.Stat("foo/bar") @@ -120,7 +120,7 @@ func TestDir_StatDeep(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { files := []string{"foo", "bar", "qux/baz", "qux/qux"} for _, name := range files { - err := util.WriteFile(fs, name, nil, 0644) + err := util.WriteFile(fs, name, nil, 0o644) require.NoError(t, err) } @@ -146,7 +146,7 @@ func TestDir_ReadDir(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { files := []string{"foo", "bar", "qux/baz", "qux/qux"} for _, name := range files { - err := util.WriteFile(fs, name, nil, 0644) + err := util.WriteFile(fs, name, nil, 0o644) require.NoError(t, err) } @@ -170,7 +170,7 @@ func TestDir_ReadDirNested(t *testing.T) { files := []string{fs.Join(path, "f1"), fs.Join(path, "f2")} for _, name := range files { - err := util.WriteFile(fs, name, nil, 0644) + err := util.WriteFile(fs, name, nil, 0o644) require.NoError(t, err) } @@ -191,12 +191,12 @@ func TestDir_ReadDirNested(t *testing.T) { func TestDir_ReadDirWithMkDirAll(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { - err := fs.MkdirAll("qux", 0755) + err := fs.MkdirAll("qux", 0o755) require.NoError(t, err) files := []string{"qux/baz", "qux/qux"} for _, name := range files { - err := util.WriteFile(fs, name, nil, 0644) + err := util.WriteFile(fs, name, nil, 0o644) require.NoError(t, err) } @@ -213,7 +213,7 @@ func TestDir_ReadDirWithMkDirAll(t *testing.T) { func TestDir_ReadDirFileInfo(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { - err := util.WriteFile(fs, "foo", []byte{'F', 'O', 'O'}, 0644) + err := util.WriteFile(fs, "foo", []byte{'F', 'O', 'O'}, 0o644) require.NoError(t, err) info, err := fs.ReadDir("/") @@ -232,7 +232,7 @@ func TestDir_ReadDirFileInfoDirs(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { files := []string{"qux/baz/foo"} for _, name := range files { - err := util.WriteFile(fs, name, []byte{'F', 'O', 'O'}, 0644) + err := util.WriteFile(fs, name, []byte{'F', 'O', 'O'}, 0o644) require.NoError(t, err) } @@ -257,7 +257,7 @@ func TestDir_ReadDirFileInfoDirs(t *testing.T) { func TestDir_RenameToDir(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { - err := util.WriteFile(fs, "foo", nil, 0644) + err := util.WriteFile(fs, "foo", nil, 0o644) require.NoError(t, err) err = fs.Rename("foo", "bar/qux") @@ -279,10 +279,10 @@ func TestDir_RenameToDir(t *testing.T) { func TestDir_RenameDir(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { - err := fs.MkdirAll("foo", 0755) + err := fs.MkdirAll("foo", 0o755) require.NoError(t, err) - err = util.WriteFile(fs, "foo/bar", nil, 0644) + err = util.WriteFile(fs, "foo/bar", nil, 0o644) require.NoError(t, err) err = fs.Rename("foo", "bar") diff --git a/test/fs_test.go b/test/fs_test.go index 05ea5ce..14f51f5 100644 --- a/test/fs_test.go +++ b/test/fs_test.go @@ -25,7 +25,7 @@ func TestFS_SymlinkToDir(t *testing.T) { t.Skip("skipping on Plan 9; symlinks are not supported") } eachFS(t, func(t *testing.T, fs Filesystem) { - err := fs.MkdirAll("dir", 0755) + err := fs.MkdirAll("dir", 0o755) require.NoError(t, err) err = fs.Symlink("dir", "link") @@ -43,7 +43,7 @@ func TestFS_SymlinkReadDir(t *testing.T) { t.Skip("skipping on Plan 9; symlinks are not supported") } eachFS(t, func(t *testing.T, fs Filesystem) { - err := util.WriteFile(fs, "dir/file", []byte("foo"), 0644) + err := util.WriteFile(fs, "dir/file", []byte("foo"), 0o644) require.NoError(t, err) err = fs.Symlink("dir", "link") @@ -63,7 +63,7 @@ func TestFS_SymlinkReadDir(t *testing.T) { func TestFS_CreateWithExistantDir(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { - err := fs.MkdirAll("foo", 0644) + err := fs.MkdirAll("foo", 0o644) require.NoError(t, err) f, err := fs.Create("foo") @@ -76,7 +76,7 @@ func TestFS_ReadDirWithChroot(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { files := []string{"foo", "bar", "qux/baz", "qux/qux"} for _, name := range files { - err := util.WriteFile(fs, name, nil, 0644) + err := util.WriteFile(fs, name, nil, 0o644) require.NoError(t, err) } @@ -95,7 +95,7 @@ func TestFS_SymlinkWithChrootBasic(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { qux, _ := fs.Chroot("/qux") - err := util.WriteFile(qux, "file", nil, 0644) + err := util.WriteFile(qux, "file", nil, 0o644) require.NoError(t, err) err = qux.Symlink("file", "link") @@ -154,7 +154,7 @@ func TestFS_RemoveAllNonExistent(t *testing.T) { func TestFS_RemoveAllEmptyDir(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { - require.NoError(t, fs.MkdirAll("empty", os.FileMode(0755))) + require.NoError(t, fs.MkdirAll("empty", os.FileMode(0o755))) require.NoError(t, util.RemoveAll(fs, "empty")) _, err := fs.Stat("empty") assert.Error(t, err) @@ -176,7 +176,7 @@ func TestFS_RemoveAll(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { for _, fname := range fnames { - err := util.WriteFile(fs, fname, nil, 0644) + err := util.WriteFile(fs, fname, nil, 0o644) require.NoError(t, err) } @@ -203,7 +203,7 @@ func TestFS_RemoveAllRelative(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { for _, fname := range fnames { - err := util.WriteFile(fs, fname, nil, 0644) + err := util.WriteFile(fs, fname, nil, 0o644) require.NoError(t, err) } @@ -218,12 +218,12 @@ func TestFS_RemoveAllRelative(t *testing.T) { func TestFS_ReadDir(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { - err := fs.MkdirAll("qux", 0755) + err := fs.MkdirAll("qux", 0o755) require.NoError(t, err) files := []string{"foo", "bar", "qux/baz", "qux/qux"} for _, name := range files { - err := util.WriteFile(fs, name, nil, 0644) + err := util.WriteFile(fs, name, nil, 0o644) require.NoError(t, err) } diff --git a/test/symlink_test.go b/test/symlink_test.go index 5ed54d9..d97ab9f 100644 --- a/test/symlink_test.go +++ b/test/symlink_test.go @@ -32,7 +32,7 @@ func TestSymlink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { - err := util.WriteFile(fs, "file", nil, 0644) + err := util.WriteFile(fs, "file", nil, 0o644) require.NoError(t, err) err = fs.Symlink("file", "link") @@ -54,7 +54,7 @@ func TestSymlinkCrossDirs(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { - err := util.WriteFile(fs, "foo/file", nil, 0644) + err := util.WriteFile(fs, "foo/file", nil, 0o644) require.NoError(t, err) err = fs.Symlink("../foo/file", "bar/link") @@ -72,7 +72,7 @@ func TestSymlinkNested(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { - err := util.WriteFile(fs, "file", []byte("hello world!"), 0644) + err := util.WriteFile(fs, "file", []byte("hello world!"), 0o644) require.NoError(t, err) err = fs.Symlink("file", "linkA") @@ -108,7 +108,7 @@ func TestSymlinkWithExistingLink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { - err := util.WriteFile(fs, "link", nil, 0644) + err := util.WriteFile(fs, "link", nil, 0o644) require.NoError(t, err) err = fs.Symlink("file", "link") @@ -122,7 +122,7 @@ func TestOpenWithSymlinkToRelativePath(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { - err := util.WriteFile(fs, "dir/file", []byte("foo"), 0644) + err := util.WriteFile(fs, "dir/file", []byte("foo"), 0o644) require.NoError(t, err) err = fs.Symlink("file", "dir/link") @@ -147,7 +147,7 @@ func TestOpenWithSymlinkToAbsolutePath(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { - err := util.WriteFile(fs, "dir/file", []byte("foo"), 0644) + err := util.WriteFile(fs, "dir/file", []byte("foo"), 0o644) require.NoError(t, err) err = fs.Symlink("/dir/file", "dir/link") @@ -169,7 +169,7 @@ func TestReadlink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { - err := util.WriteFile(fs, "file", nil, 0644) + err := util.WriteFile(fs, "file", nil, 0o644) require.NoError(t, err) _, err = fs.Readlink("file") @@ -183,7 +183,7 @@ func TestReadlinkWithRelativePath(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { - err := util.WriteFile(fs, "dir/file", nil, 0644) + err := util.WriteFile(fs, "dir/file", nil, 0o644) require.NoError(t, err) err = fs.Symlink("file", "dir/link") @@ -204,7 +204,7 @@ func TestReadlinkWithAbsolutePath(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { - err := util.WriteFile(fs, "dir/file", nil, 0644) + err := util.WriteFile(fs, "dir/file", nil, 0o644) require.NoError(t, err) err = fs.Symlink("/dir/file", "dir/link") @@ -322,7 +322,7 @@ func TestRemoveWithSymlink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { - err := util.WriteFile(fs, "file", []byte("foo"), 0644) + err := util.WriteFile(fs, "file", []byte("foo"), 0o644) require.NoError(t, err) err = fs.Symlink("file", "link") diff --git a/util/util.go b/util/util.go index fb5c270..b570309 100644 --- a/util/util.go +++ b/util/util.go @@ -132,8 +132,10 @@ func WriteFile(fs billy.Basic, filename string, data []byte, perm fs.FileMode) ( // We generate random temporary file names so that there's a good // chance the file doesn't exist yet - keeps the number of tries in // TempFile to a minimum. -var rand uint32 -var randmu sync.Mutex +var ( + rand uint32 + randmu sync.Mutex +) func reseed() uint32 { return uint32(time.Now().UnixNano() + int64(os.Getpid())) diff --git a/util/util_test.go b/util/util_test.go index 429fb44..1fe0a08 100644 --- a/util/util_test.go +++ b/util/util_test.go @@ -97,7 +97,7 @@ func TestWriteFile_Sync(t *testing.T) { fs := &test.BasicMock{} filename := "TestWriteFile.txt" data := []byte("hello world") - err := util.WriteFile(fs, filename, data, 0644) + err := util.WriteFile(fs, filename, data, 0o644) require.NoError(t, err) assert.Len(t, fs.CallLogger.Calls, 1) diff --git a/util/walk_test.go b/util/walk_test.go index 5964329..f886825 100644 --- a/util/walk_test.go +++ b/util/walk_test.go @@ -9,7 +9,6 @@ import ( "github.com/go-git/go-billy/v6" "github.com/go-git/go-billy/v6/memfs" "github.com/go-git/go-billy/v6/util" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) From 46837ec2cd87dd3d7b5688194c39559022084845 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 20 Nov 2025 19:58:52 +0000 Subject: [PATCH 6/9] build: Add make lint-autofix Signed-off-by: Paulo Gomes --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index f4cd9b4..a5e72be 100644 --- a/Makefile +++ b/Makefile @@ -50,3 +50,6 @@ ifneq ($(shell git status --porcelain --untracked-files=no),) @git --no-pager diff @exit 1 endif + +lint-autofix: $(GOLANGCI) # Auto fix supported lint issues. + $(GOLANGCI) run --fix From e31bed9bc54212deca304a951fcaa92c54d9c911 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 20 Nov 2025 21:13:40 +0000 Subject: [PATCH 7/9] build: Enable additional linters and fix issues Signed-off-by: Paulo Gomes --- .golangci.yaml | 10 ++++++++ embedfs/embed_test.go | 9 ++++++++ helper/chroot/chroot.go | 39 +++++++++++++++++++++++++++----- helper/chroot/chroot_test.go | 1 + helper/iofs/iofs_test.go | 12 ++++++---- helper/mount/mount.go | 27 ++++++++++++++++++---- helper/mount/mount_test.go | 1 + helper/polyfill/polyfill.go | 1 + helper/polyfill/polyfill_test.go | 1 + memfs/memory.go | 4 +++- osfs/os_bound_test.go | 8 ++++++- test/basic_test.go | 2 ++ test/bench_test.go | 1 + test/dir_test.go | 15 ++++++++++++ test/fs_test.go | 13 +++++++++++ test/symlink_test.go | 18 +++++++++++++++ test/tempfile_test.go | 8 +++++++ 17 files changed, 153 insertions(+), 17 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index 4489bd8..a080aa2 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -27,6 +27,7 @@ linters: - goprintffuncname - gosmopolitan - govet + - forcetypeassert - grouper - importas - ineffassign @@ -47,6 +48,8 @@ linters: - tagalign - tagliatelle - testableexamples + - thelper + - tparallel - unconvert - unused - usestdlibvars @@ -60,6 +63,13 @@ linters: - common-false-positives - legacy - std-error-handling + + settings: + revive: + rules: + - name: var-naming + disabled: true + formatters: enable: - gci diff --git a/embedfs/embed_test.go b/embedfs/embed_test.go index 2501afe..fa57e60 100644 --- a/embedfs/embed_test.go +++ b/embedfs/embed_test.go @@ -44,6 +44,8 @@ func TestOpen(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { + t.Parallel() + fs := New(&testdataDir) var got []byte @@ -115,6 +117,7 @@ func TestOpenFileFlags(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { + t.Parallel() fs := New(&testdataDir) _, err := fs.OpenFile(tc.file, tc.flag, 0o700) @@ -157,6 +160,7 @@ func TestStat(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { + t.Parallel() fs := New(&testdataDir) fi, err := fs.Stat(tc.name) @@ -213,6 +217,7 @@ func TestReadDir(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { + t.Parallel() fs := New(tc.fs) fis, err := fs.ReadDir(tc.path) @@ -296,6 +301,7 @@ func TestFileSeek(t *testing.T) { for i, tc := range tests { t.Run(fmt.Sprintf("#%d", i), func(t *testing.T) { + //nolint:tparallel _, err = f.Seek(tc.seekOff, tc.seekWhence) require.NoError(t, err) @@ -309,6 +315,8 @@ func TestFileSeek(t *testing.T) { } func TestJoin(t *testing.T) { + t.Parallel() + tests := []struct { name string path []string @@ -338,6 +346,7 @@ func TestJoin(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { + t.Parallel() fs := New(&empty) got := fs.Join(tc.path...) diff --git a/helper/chroot/chroot.go b/helper/chroot/chroot.go index c54cd73..b4b5b25 100644 --- a/helper/chroot/chroot.go +++ b/helper/chroot/chroot.go @@ -1,6 +1,7 @@ package chroot import ( + "errors" "io/fs" "os" "path/filepath" @@ -126,7 +127,12 @@ func (fs *ChrootHelper) TempFile(dir, prefix string) (billy.File, error) { return nil, err } - f, err := fs.underlying.(billy.TempFile).TempFile(fullpath, prefix) + tf, ok := fs.underlying.(billy.TempFile) + if !ok { + return nil, errors.New("underlying fs does not implement billy.TempFile") + } + + f, err := tf.TempFile(fullpath, prefix) if err != nil { return nil, err } @@ -140,7 +146,11 @@ func (fs *ChrootHelper) ReadDir(path string) ([]fs.DirEntry, error) { return nil, err } - return fs.underlying.(billy.Dir).ReadDir(fullpath) + d, ok := fs.underlying.(billy.Dir) + if !ok { + return nil, errors.New("underlying fs does not implement billy.Dir") + } + return d.ReadDir(fullpath) } func (fs *ChrootHelper) MkdirAll(filename string, perm fs.FileMode) error { @@ -149,7 +159,11 @@ func (fs *ChrootHelper) MkdirAll(filename string, perm fs.FileMode) error { return err } - return fs.underlying.(billy.Dir).MkdirAll(fullpath, perm) + d, ok := fs.underlying.(billy.Dir) + if !ok { + return errors.New("underlying fs does not implement billy.Dir") + } + return d.MkdirAll(fullpath, perm) } func (fs *ChrootHelper) Lstat(filename string) (os.FileInfo, error) { @@ -158,7 +172,11 @@ func (fs *ChrootHelper) Lstat(filename string) (os.FileInfo, error) { return nil, err } - return fs.underlying.(billy.Symlink).Lstat(fullpath) + sl, ok := fs.underlying.(billy.Symlink) + if !ok { + return nil, errors.New("underlying fs does not implement billy.Symlink") + } + return sl.Lstat(fullpath) } func (fs *ChrootHelper) Symlink(target, link string) error { @@ -175,7 +193,11 @@ func (fs *ChrootHelper) Symlink(target, link string) error { return err } - return fs.underlying.(billy.Symlink).Symlink(target, link) + sl, ok := fs.underlying.(billy.Symlink) + if !ok { + return errors.New("underlying fs does not implement billy.Symlink") + } + return sl.Symlink(target, link) } func (fs *ChrootHelper) Readlink(link string) (string, error) { @@ -184,7 +206,12 @@ func (fs *ChrootHelper) Readlink(link string) (string, error) { return "", err } - target, err := fs.underlying.(billy.Symlink).Readlink(fullpath) + sl, ok := fs.underlying.(billy.Symlink) + if !ok { + return "", errors.New("underlying fs does not implement billy.Symlink") + } + + target, err := sl.Readlink(fullpath) if err != nil { return "", err } diff --git a/helper/chroot/chroot_test.go b/helper/chroot/chroot_test.go index 5bc71c3..53ea64b 100644 --- a/helper/chroot/chroot_test.go +++ b/helper/chroot/chroot_test.go @@ -353,6 +353,7 @@ func TestCapabilities(t *testing.T) { } func testCapabilities(t *testing.T, basic billy.Basic) { + t.Helper() baseCapabilities := billy.Capabilities(basic) fs := New(basic, "/foo") diff --git a/helper/iofs/iofs_test.go b/helper/iofs/iofs_test.go index fe536cb..d5b86f9 100644 --- a/helper/iofs/iofs_test.go +++ b/helper/iofs/iofs_test.go @@ -11,6 +11,7 @@ import ( billyfs "github.com/go-git/go-billy/v6" "github.com/go-git/go-billy/v6/memfs" + "github.com/stretchr/testify/require" ) type errorList interface { @@ -30,7 +31,7 @@ func TestWithFSTest(t *testing.T) { } createdFiles := make([]string, 0, len(files)) for filename, contents := range files { - makeFile(memfs, t, filename, contents) + makeFile(t, memfs, filename, contents) createdFiles = append(createdFiles, filename) } @@ -47,10 +48,11 @@ func TestWithFSTest(t *testing.T) { func TestDeletes(t *testing.T) { t.Parallel() memfs := memfs.New() - iofs := New(memfs).(fs.ReadFileFS) + iofs, ok := New(memfs).(fs.ReadFileFS) + require.True(t, ok) - makeFile(memfs, t, "foo.txt", "hello, world") - makeFile(memfs, t, "deleted", "nothing to see") + makeFile(t, memfs, "foo.txt", "hello, world") + makeFile(t, memfs, "deleted", "nothing to see") if _, err := iofs.ReadFile("nonexistent"); err == nil { t.Errorf("expected error for nonexistent file") @@ -73,7 +75,7 @@ func TestDeletes(t *testing.T) { } } -func makeFile(fs billyfs.Basic, t *testing.T, filename string, contents string) { +func makeFile(t *testing.T, fs billyfs.Basic, filename string, contents string) { t.Helper() file, err := fs.Create(filename) if err != nil { diff --git a/helper/mount/mount.go b/helper/mount/mount.go index 7ee76f8..6ae98c7 100644 --- a/helper/mount/mount.go +++ b/helper/mount/mount.go @@ -1,6 +1,7 @@ package mount import ( + "errors" "fmt" "io" "io/fs" @@ -184,19 +185,37 @@ func (h *Mount) getBasicAndPath(path string) (billy.Basic, string) { func (h *Mount) getDirAndPath(path string) (billy.Dir, string, error) { path = cleanPath(path) if !h.isMountpoint(path) { - return h.underlying.(billy.Dir), path, nil + d, ok := h.underlying.(billy.Dir) + if !ok { + return nil, "", errors.New("underlying fs does not implement billy.Dir") + } + return d, path, nil } - return h.source.(billy.Dir), h.mustRelToMountpoint(path), nil + d, ok := h.source.(billy.Dir) + if !ok { + return nil, "", errors.New("source fs does not implement billy.Dir") + } + return d, h.mustRelToMountpoint(path), nil } func (h *Mount) getSymlinkAndPath(path string) (billy.Symlink, string, error) { path = cleanPath(path) if !h.isMountpoint(path) { - return h.underlying.(billy.Symlink), path, nil + sl, ok := h.underlying.(billy.Symlink) + if !ok { + return nil, "", errors.New("underlying fs does not implement billy.Symlink") + } + + return sl, path, nil + } + + sl, ok := h.source.(billy.Symlink) + if !ok { + return nil, "", errors.New("source fs does not implement billy.Symlink") } - return h.source.(billy.Symlink), h.mustRelToMountpoint(path), nil + return sl, h.mustRelToMountpoint(path), nil } func (h *Mount) mustRelToMountpoint(path string) string { diff --git a/helper/mount/mount_test.go b/helper/mount/mount_test.go index 3f11340..74ae0e9 100644 --- a/helper/mount/mount_test.go +++ b/helper/mount/mount_test.go @@ -377,6 +377,7 @@ func TestCapabilities(t *testing.T) { } func testCapabilities(t *testing.T, a, b billy.Basic) { + t.Helper() aCapabilities := billy.Capabilities(a) bCapabilities := billy.Capabilities(b) diff --git a/helper/polyfill/polyfill.go b/helper/polyfill/polyfill.go index 9f9489a..cac3042 100644 --- a/helper/polyfill/polyfill.go +++ b/helper/polyfill/polyfill.go @@ -1,3 +1,4 @@ +//nolint:forcetypeassert package polyfill import ( diff --git a/helper/polyfill/polyfill_test.go b/helper/polyfill/polyfill_test.go index 4c5567d..281aa6b 100644 --- a/helper/polyfill/polyfill_test.go +++ b/helper/polyfill/polyfill_test.go @@ -57,6 +57,7 @@ func TestCapabilities(t *testing.T) { } func testCapabilities(t *testing.T, basic billy.Basic) { + t.Helper() baseCapabilities := billy.Capabilities(basic) fs := New(basic) diff --git a/memfs/memory.go b/memfs/memory.go index 0081db3..ed45071 100644 --- a/memfs/memory.go +++ b/memfs/memory.go @@ -119,7 +119,9 @@ func (fs *Memory) Stat(filename string) (os.FileInfo, error) { // the name of the file should always the name of the stated file, so we // overwrite the Stat returned from the storage with it, since the // filename may belong to a link. - fi.(*fileInfo).name = filepath.Base(filename) + if ffi, ok := fi.(*fileInfo); ok { + ffi.name = filepath.Base(filename) + } return fi, nil } diff --git a/osfs/os_bound_test.go b/osfs/os_bound_test.go index cc26ffa..d05ac18 100644 --- a/osfs/os_bound_test.go +++ b/osfs/os_bound_test.go @@ -393,7 +393,7 @@ func TestReadLink(t *testing.T) { return newBoundOS(cwd, true) }, filename: "symlink-file", - expected: filepath.Join("cwd-target/file"), + expected: filepath.FromSlash("cwd-target/file"), makeExpectedAbs: true, }, { @@ -881,6 +881,7 @@ func TestRemoveAll(t *testing.T) { { name: "parent with children", before: func(t *testing.T, dir string) billy.Filesystem { + t.Helper() err := os.MkdirAll(filepath.Join(dir, "parent", "children"), 0o700) require.NoError(t, err) return newBoundOS(dir, true) @@ -894,6 +895,7 @@ func TestRemoveAll(t *testing.T) { { name: "same dir file", before: func(t *testing.T, dir string) billy.Filesystem { + t.Helper() err := os.WriteFile(filepath.Join(dir, "test-file"), []byte("anything"), 0o600) require.NoError(t, err) return newBoundOS(dir, true) @@ -903,6 +905,7 @@ func TestRemoveAll(t *testing.T) { { name: "same dir symlink", before: func(t *testing.T, dir string) billy.Filesystem { + t.Helper() target := filepath.Join(dir, "target-file") err := os.WriteFile(target, []byte("anything"), 0o600) require.NoError(t, err) @@ -915,6 +918,7 @@ func TestRemoveAll(t *testing.T) { { name: "rel path to file above cwd", before: func(t *testing.T, dir string) billy.Filesystem { + t.Helper() err := os.WriteFile(filepath.Join(dir, "rel-above-cwd"), []byte("anything"), 0o600) require.NoError(t, err) return newBoundOS(dir, true) @@ -924,6 +928,7 @@ func TestRemoveAll(t *testing.T) { { name: "abs file", before: func(t *testing.T, dir string) billy.Filesystem { + t.Helper() err := os.WriteFile(filepath.Join(dir, "abs-test-file"), []byte("anything"), 0o600) require.NoError(t, err) return newBoundOS(dir, true) @@ -934,6 +939,7 @@ func TestRemoveAll(t *testing.T) { { name: "abs symlink", before: func(t *testing.T, dir string) billy.Filesystem { + t.Helper() err := os.Symlink("/etc/passwd", filepath.Join(dir, "symlink")) require.NoError(t, err) return newBoundOS(dir, true) diff --git a/test/basic_test.go b/test/basic_test.go index 671ee7f..8618628 100644 --- a/test/basic_test.go +++ b/test/basic_test.go @@ -491,6 +491,7 @@ func TestRename(t *testing.T) { { name: "file rename", before: func(t *testing.T, fs Filesystem) { + t.Helper() root := fsRoot(fs) f, err := fs.Create(fs.Join(root, "foo")) require.NoError(t, err) @@ -503,6 +504,7 @@ func TestRename(t *testing.T) { { name: "dir rename", before: func(t *testing.T, fs Filesystem) { + t.Helper() root := fsRoot(fs) f, err := fs.Create(fs.Join(root, "foo", "bar1")) require.NoError(t, err) diff --git a/test/bench_test.go b/test/bench_test.go index 6e33511..81a53a5 100644 --- a/test/bench_test.go +++ b/test/bench_test.go @@ -141,6 +141,7 @@ func read(n string, of func(string) (io.ReadSeekCloser, error)) func(b *testing. } func prepFS(b *testing.B, f io.WriteCloser) { + b.Helper() defer f.Close() content := make([]byte, contentSize) diff --git a/test/dir_test.go b/test/dir_test.go index 1d76724..8961d38 100644 --- a/test/dir_test.go +++ b/test/dir_test.go @@ -18,6 +18,7 @@ type dirFS interface { } func eachDirFS(t *testing.T, test func(t *testing.T, fs dirFS)) { + t.Helper() for _, fs := range allFS(t.TempDir) { t.Run(fmt.Sprintf("%T", fs), func(t *testing.T) { test(t, fs) @@ -27,6 +28,7 @@ func eachDirFS(t *testing.T, test func(t *testing.T, fs dirFS)) { func TestDir_MkdirAll(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() err := fs.MkdirAll("empty", os.FileMode(0o755)) require.NoError(t, err) @@ -38,6 +40,7 @@ func TestDir_MkdirAll(t *testing.T) { func TestDir_MkdirAllNested(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() err := fs.MkdirAll("foo/bar/baz", os.FileMode(0o755)) require.NoError(t, err) @@ -57,6 +60,7 @@ func TestDir_MkdirAllNested(t *testing.T) { func TestDir_MkdirAllIdempotent(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() err := fs.MkdirAll("empty", 0o755) require.NoError(t, err) fi, err := fs.Stat("empty") @@ -74,6 +78,7 @@ func TestDir_MkdirAllIdempotent(t *testing.T) { func TestDir_MkdirAllAndCreate(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() err := fs.MkdirAll("dir", os.FileMode(0o755)) require.NoError(t, err) @@ -89,6 +94,7 @@ func TestDir_MkdirAllAndCreate(t *testing.T) { func TestDir_MkdirAllWithExistingFile(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() f, err := fs.Create("dir/foo") require.NoError(t, err) require.NoError(t, f.Close()) @@ -104,6 +110,7 @@ func TestDir_MkdirAllWithExistingFile(t *testing.T) { func TestDir_StatDir(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() err := fs.MkdirAll("foo/bar", 0o755) require.NoError(t, err) @@ -118,6 +125,7 @@ func TestDir_StatDir(t *testing.T) { func TestDir_StatDeep(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() files := []string{"foo", "bar", "qux/baz", "qux/qux"} for _, name := range files { err := util.WriteFile(fs, name, nil, 0o644) @@ -144,6 +152,7 @@ func TestDir_StatDeep(t *testing.T) { func TestDir_ReadDir(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() files := []string{"foo", "bar", "qux/baz", "qux/qux"} for _, name := range files { err := util.WriteFile(fs, name, nil, 0o644) @@ -162,6 +171,7 @@ func TestDir_ReadDir(t *testing.T) { func TestDir_ReadDirNested(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() maxNestedDirs := 100 path := "/" for i := 0; i <= maxNestedDirs; i++ { @@ -191,6 +201,7 @@ func TestDir_ReadDirNested(t *testing.T) { func TestDir_ReadDirWithMkDirAll(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() err := fs.MkdirAll("qux", 0o755) require.NoError(t, err) @@ -213,6 +224,7 @@ func TestDir_ReadDirWithMkDirAll(t *testing.T) { func TestDir_ReadDirFileInfo(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() err := util.WriteFile(fs, "foo", []byte{'F', 'O', 'O'}, 0o644) require.NoError(t, err) @@ -230,6 +242,7 @@ func TestDir_ReadDirFileInfo(t *testing.T) { func TestDir_ReadDirFileInfoDirs(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() files := []string{"qux/baz/foo"} for _, name := range files { err := util.WriteFile(fs, name, []byte{'F', 'O', 'O'}, 0o644) @@ -257,6 +270,7 @@ func TestDir_ReadDirFileInfoDirs(t *testing.T) { func TestDir_RenameToDir(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() err := util.WriteFile(fs, "foo", nil, 0o644) require.NoError(t, err) @@ -279,6 +293,7 @@ func TestDir_RenameToDir(t *testing.T) { func TestDir_RenameDir(t *testing.T) { eachDirFS(t, func(t *testing.T, fs dirFS) { + t.Helper() err := fs.MkdirAll("foo", 0o755) require.NoError(t, err) diff --git a/test/fs_test.go b/test/fs_test.go index 14f51f5..87df09b 100644 --- a/test/fs_test.go +++ b/test/fs_test.go @@ -13,6 +13,7 @@ import ( ) func eachFS(t *testing.T, test func(t *testing.T, fs Filesystem)) { + t.Helper() for _, fs := range allFS(t.TempDir) { t.Run(fmt.Sprintf("%T", fs), func(t *testing.T) { test(t, fs) @@ -25,6 +26,7 @@ func TestFS_SymlinkToDir(t *testing.T) { t.Skip("skipping on Plan 9; symlinks are not supported") } eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() err := fs.MkdirAll("dir", 0o755) require.NoError(t, err) @@ -43,6 +45,7 @@ func TestFS_SymlinkReadDir(t *testing.T) { t.Skip("skipping on Plan 9; symlinks are not supported") } eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() err := util.WriteFile(fs, "dir/file", []byte("foo"), 0o644) require.NoError(t, err) @@ -63,6 +66,7 @@ func TestFS_SymlinkReadDir(t *testing.T) { func TestFS_CreateWithExistantDir(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() err := fs.MkdirAll("foo", 0o644) require.NoError(t, err) @@ -74,6 +78,7 @@ func TestFS_CreateWithExistantDir(t *testing.T) { func TestFS_ReadDirWithChroot(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() files := []string{"foo", "bar", "qux/baz", "qux/qux"} for _, name := range files { err := util.WriteFile(fs, name, nil, 0o644) @@ -93,6 +98,7 @@ func TestFS_SymlinkWithChrootBasic(t *testing.T) { t.Skip("skipping on Plan 9; symlinks are not supported") } eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() qux, _ := fs.Chroot("/qux") err := util.WriteFile(qux, "file", nil, 0o644) @@ -116,6 +122,7 @@ func TestFS_SymlinkWithChrootCrossBounders(t *testing.T) { t.Skip("skipping on Plan 9; symlinks are not supported") } eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() qux, _ := fs.Chroot("/qux") err := util.WriteFile(fs, "file", []byte("foo"), customMode) require.NoError(t, err) @@ -134,6 +141,7 @@ func TestFS_ReadDirWithLink(t *testing.T) { t.Skip("skipping on Plan 9; symlinks are not supported") } eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() err := util.WriteFile(fs, "foo/bar", []byte("foo"), customMode) require.NoError(t, err) @@ -148,12 +156,14 @@ func TestFS_ReadDirWithLink(t *testing.T) { func TestFS_RemoveAllNonExistent(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() require.NoError(t, util.RemoveAll(fs, "non-existent")) }) } func TestFS_RemoveAllEmptyDir(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() require.NoError(t, fs.MkdirAll("empty", os.FileMode(0o755))) require.NoError(t, util.RemoveAll(fs, "empty")) _, err := fs.Stat("empty") @@ -175,6 +185,7 @@ func TestFS_RemoveAll(t *testing.T) { } eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() for _, fname := range fnames { err := util.WriteFile(fs, fname, nil, 0o644) require.NoError(t, err) @@ -202,6 +213,7 @@ func TestFS_RemoveAllRelative(t *testing.T) { } eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() for _, fname := range fnames { err := util.WriteFile(fs, fname, nil, 0o644) require.NoError(t, err) @@ -218,6 +230,7 @@ func TestFS_RemoveAllRelative(t *testing.T) { func TestFS_ReadDir(t *testing.T) { eachFS(t, func(t *testing.T, fs Filesystem) { + t.Helper() err := fs.MkdirAll("qux", 0o755) require.NoError(t, err) diff --git a/test/symlink_test.go b/test/symlink_test.go index d97ab9f..bb4fd7d 100644 --- a/test/symlink_test.go +++ b/test/symlink_test.go @@ -19,6 +19,7 @@ type symlinkFS interface { } func eachSymlinkFS(t *testing.T, test func(t *testing.T, fs symlinkFS)) { + t.Helper() for _, fs := range allFS(t.TempDir) { t.Run(fmt.Sprintf("%T", fs), func(t *testing.T) { test(t, fs) @@ -32,6 +33,7 @@ func TestSymlink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "file", nil, 0o644) require.NoError(t, err) @@ -54,6 +56,7 @@ func TestSymlinkCrossDirs(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "foo/file", nil, 0o644) require.NoError(t, err) @@ -72,6 +75,7 @@ func TestSymlinkNested(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "file", []byte("hello world!"), 0o644) require.NoError(t, err) @@ -94,6 +98,7 @@ func TestSymlinkWithNonExistentdTarget(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := fs.Symlink("file", "link") require.NoError(t, err) @@ -108,6 +113,7 @@ func TestSymlinkWithExistingLink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "link", nil, 0o644) require.NoError(t, err) @@ -122,6 +128,7 @@ func TestOpenWithSymlinkToRelativePath(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "dir/file", []byte("foo"), 0o644) require.NoError(t, err) @@ -147,6 +154,7 @@ func TestOpenWithSymlinkToAbsolutePath(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "dir/file", []byte("foo"), 0o644) require.NoError(t, err) @@ -169,6 +177,7 @@ func TestReadlink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "file", nil, 0o644) require.NoError(t, err) @@ -183,6 +192,7 @@ func TestReadlinkWithRelativePath(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "dir/file", nil, 0o644) require.NoError(t, err) @@ -204,6 +214,7 @@ func TestReadlinkWithAbsolutePath(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "dir/file", nil, 0o644) require.NoError(t, err) @@ -222,6 +233,7 @@ func TestReadlinkWithNonExistentTarget(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := fs.Symlink("file", "link") require.NoError(t, err) @@ -237,6 +249,7 @@ func TestReadlinkWithNonExistentLink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() _, err := fs.Readlink("link") assert.Equal(t, os.IsNotExist(err), true) }) @@ -248,6 +261,7 @@ func TestStatLink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "foo/bar", []byte("foo"), customMode) require.NoError(t, err) @@ -266,6 +280,7 @@ func TestStatLink(t *testing.T) { func TestLstat(t *testing.T) { eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "foo/bar", []byte("foo"), customMode) require.NoError(t, err) @@ -285,6 +300,7 @@ func TestLstatLink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "foo/bar", []byte("fosddddaaao"), customMode) require.NoError(t, err) err = fs.Symlink("bar", "foo/qux") @@ -305,6 +321,7 @@ func TestRenameWithSymlink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := fs.Symlink("file", "link") require.NoError(t, err) @@ -322,6 +339,7 @@ func TestRemoveWithSymlink(t *testing.T) { } eachSymlinkFS(t, func(t *testing.T, fs symlinkFS) { + t.Helper() err := util.WriteFile(fs, "file", []byte("foo"), 0o644) require.NoError(t, err) diff --git a/test/tempfile_test.go b/test/tempfile_test.go index 922a679..a5695ab 100644 --- a/test/tempfile_test.go +++ b/test/tempfile_test.go @@ -17,6 +17,7 @@ type tempFS interface { } func eachTempFS(t *testing.T, test func(t *testing.T, fs tempFS)) { + t.Helper() for _, fs := range allFS(t.TempDir) { t.Run(fmt.Sprintf("%T", fs), func(t *testing.T) { test(t, fs) @@ -26,6 +27,7 @@ func eachTempFS(t *testing.T, test func(t *testing.T, fs tempFS)) { func TestTempFile(t *testing.T) { eachTempFS(t, func(t *testing.T, fs tempFS) { + t.Helper() f, err := fs.TempFile("", "bar") require.NoError(t, err) require.NoError(t, f.Close()) @@ -36,6 +38,7 @@ func TestTempFile(t *testing.T) { func TestTempFileWithPath(t *testing.T) { eachTempFS(t, func(t *testing.T, fs tempFS) { + t.Helper() f, err := fs.TempFile("foo", "bar") require.NoError(t, err) require.NoError(t, f.Close()) @@ -46,6 +49,7 @@ func TestTempFileWithPath(t *testing.T) { func TestTempFileFullWithPath(t *testing.T) { eachTempFS(t, func(t *testing.T, fs tempFS) { + t.Helper() f, err := fs.TempFile("/foo", "bar") require.NoError(t, err) require.NoError(t, f.Close()) @@ -56,6 +60,7 @@ func TestTempFileFullWithPath(t *testing.T) { func TestRemoveTempFile(t *testing.T) { eachTempFS(t, func(t *testing.T, fs tempFS) { + t.Helper() f, err := fs.TempFile("test-dir", "test-prefix") require.NoError(t, err) @@ -67,6 +72,7 @@ func TestRemoveTempFile(t *testing.T) { func TestRenameTempFile(t *testing.T) { eachTempFS(t, func(t *testing.T, fs tempFS) { + t.Helper() f, err := fs.TempFile("test-dir", "test-prefix") require.NoError(t, err) @@ -78,6 +84,7 @@ func TestRenameTempFile(t *testing.T) { func TestTempFileMany(t *testing.T) { eachTempFS(t, func(t *testing.T, fs tempFS) { + t.Helper() for i := 0; i < 1024; i++ { var files []billy.File @@ -97,6 +104,7 @@ func TestTempFileMany(t *testing.T) { func TestTempFileManyWithUtil(t *testing.T) { eachTempFS(t, func(t *testing.T, fs tempFS) { + t.Helper() for i := 0; i < 1024; i++ { var files []billy.File From ae2cf5634f6cd6083151d508856c9f8e600f73aa Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 20 Nov 2025 21:22:28 +0000 Subject: [PATCH 8/9] build: Configure renovate for golangci-lint Signed-off-by: Paulo Gomes --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index a5e72be..d16324a 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ WASIRUN_WRAPPER := $(CURDIR)/scripts/wasirun-wrapper COVERAGE_REPORT := coverage.out COVERAGE_MODE := count +# renovate: datasource=github-tags depName=golangci/golangci-lint GOLANGCI_VERSION ?= v2.6.0 TOOLS_BIN := $(shell mkdir -p build/tools && realpath build/tools) From 466dfbdb9a915fd848cd2777f17f1c70e595928d Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 20 Nov 2025 21:41:38 +0000 Subject: [PATCH 9/9] build: Add renovate configuration Signed-off-by: Paulo Gomes --- .renovaterc.json5 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .renovaterc.json5 diff --git a/.renovaterc.json5 b/.renovaterc.json5 new file mode 100644 index 0000000..d843a35 --- /dev/null +++ b/.renovaterc.json5 @@ -0,0 +1,4 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["github>go-git/.github"] +}