diff --git a/.golangci.yml b/.golangci.yml index b85f49c..8bf8e2a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,6 +1,8 @@ version: "2" run: tests: true + build-tags: + - stave linters: default: none enable: @@ -428,6 +430,10 @@ linters: - linters: - forbidigo path: testmain_test\.go$ + - linters: + - noctx + - unused + path: stavefile\.go$ paths: - third_party$ - builtin$ diff --git a/CHANGELOG.md b/CHANGELOG.md index eaae3d0..7af3d59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Detailed API reference documentation as well as an architecture overview for contributors. +- Pretty-printed debug logs, both in "outer" Stave execution _and_ in execution of compiled stavefile. + - `CHANGELOG.md`! (And first formally-versioned release of Stave.) ### Changed diff --git a/cmd/stave/testdata/alias/stavefile.go b/cmd/stave/testdata/alias/stavefile.go index 24d2150..bb9d949 100644 --- a/cmd/stave/testdata/alias/stavefile.go +++ b/cmd/stave/testdata/alias/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/install_test.go b/install_test.go deleted file mode 100644 index 8cbc6f0..0000000 --- a/install_test.go +++ /dev/null @@ -1,39 +0,0 @@ -//go:build CI - -package main - -import ( - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "runtime" - "testing" -) - -func TestBootstrap(t *testing.T) { - dir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - s, err := run("go", "run", "bootstrap.go") - if err != nil { - t.Fatal(s) - } - name := "stave" - if runtime.GOOS == "windows" { - name += ".exe" - } - if _, err := os.Stat(filepath.Join(os.Getenv("GOPATH"), "bin", name)); err != nil { - t.Fatal(err) - } -} - -func run(cmd string, args ...string) (string, error) { - c := exec.Command(cmd, args...) - c.Env = os.Environ() - b, err := c.CombinedOutput() - return string(b), err -} diff --git a/internal/parallelism/parallelism.go b/internal/parallelism/parallelism.go index f8af928..9ceee74 100644 --- a/internal/parallelism/parallelism.go +++ b/internal/parallelism/parallelism.go @@ -1,6 +1,7 @@ package parallelism import ( + "log/slog" "os" "runtime" "strconv" @@ -30,6 +31,8 @@ func Apply(envMap map[string]string) error { numProcessors = getNumProcessors() } + slog.Debug("setting parallelism-related env vars", slog.Int("num_processors", numProcessors)) + newValStr := strconv.Itoa(numProcessors) runtime.GOMAXPROCS(numProcessors) diff --git a/internal/parse/testdata/alias.go b/internal/parse/testdata/alias.go index 0b80d4c..619f7dc 100644 --- a/internal/parse/testdata/alias.go +++ b/internal/parse/testdata/alias.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/internal/parse/testdata/command.go b/internal/parse/testdata/command.go index b9122be..836e135 100644 --- a/internal/parse/testdata/command.go +++ b/internal/parse/testdata/command.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/internal/parse/testdata/func.go b/internal/parse/testdata/func.go index 44286b3..c39e05c 100644 --- a/internal/parse/testdata/func.go +++ b/internal/parse/testdata/func.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/internal/parse/testdata/importself/stavefile.go b/internal/parse/testdata/importself/stavefile.go index afa3147..1458969 100644 --- a/internal/parse/testdata/importself/stavefile.go +++ b/internal/parse/testdata/importself/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/internal/parse/testdata/repeating_synopsis.go b/internal/parse/testdata/repeating_synopsis.go index e5ab64e..4513562 100644 --- a/internal/parse/testdata/repeating_synopsis.go +++ b/internal/parse/testdata/repeating_synopsis.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/internal/parse/testdata/subcommands.go b/internal/parse/testdata/subcommands.go index 4aaa84c..b0bf146 100644 --- a/internal/parse/testdata/subcommands.go +++ b/internal/parse/testdata/subcommands.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/sh/cmd.go b/pkg/sh/cmd.go index 4713d3a..e4a1387 100644 --- a/pkg/sh/cmd.go +++ b/pkg/sh/cmd.go @@ -6,16 +6,19 @@ import ( "errors" "fmt" "io" - "log/slog" + "log" "os" "os/exec" "strings" "github.com/yaklabco/stave/internal/dryrun" - "github.com/yaklabco/stave/internal/log" "github.com/yaklabco/stave/pkg/st" ) +// simpleConsoleLogger is an unstructured logger designed for emitting simple +// messages to the console in `-v`/`--verbose` mode. +var simpleConsoleLogger = log.New(os.Stderr, "[STAVE] ", 0) //nolint:gochecknoglobals // This is unchanged in the course of the process lifecycle. + // RunCmd returns a function that will call Run with the given command. This is // useful for creating command aliases to make your scripts easier to read, like // this: @@ -145,7 +148,7 @@ func run(env map[string]string, stdout, stderr io.Writer, cmd string, args ...st } // To protect against logging from doing exec in global variables if st.Verbose() { - slog.Info("exec", slog.String(log.Cmd, cmd), slog.Any(log.Args, quoted)) + simpleConsoleLogger.Println("exec:", cmd, strings.Join(quoted, " ")) } err := theCmd.Run() diff --git a/pkg/st/deps.go b/pkg/st/deps.go index 8bbce78..29a6d78 100644 --- a/pkg/st/deps.go +++ b/pkg/st/deps.go @@ -3,13 +3,18 @@ package st import ( "context" "fmt" - "log/slog" + "log" + "os" "reflect" "runtime" "strings" "sync" ) +// simpleConsoleLogger is an unstructured logger designed for emitting simple +// messages to the console in `-v`/`--verbose` mode. +var simpleConsoleLogger = log.New(os.Stderr, "[STAVE] ", 0) //nolint:gochecknoglobals // This is unchanged in the course of the process lifecycle. + type onceMap struct { mu *sync.Mutex m map[onceKey]*onceFun @@ -208,7 +213,7 @@ type onceFun struct { func (o *onceFun) run(ctx context.Context) error { o.once.Do(func() { if Verbose() { - slog.Info("running dependency", slog.String("dependency", displayName(o.fn.Name()))) + simpleConsoleLogger.Println("Running dependency:", displayName(o.fn.Name())) } o.err = o.fn.Run(ctx) }) diff --git a/pkg/st/deps_internal_test.go b/pkg/st/deps_internal_test.go index b357418..9b0107e 100644 --- a/pkg/st/deps_internal_test.go +++ b/pkg/st/deps_internal_test.go @@ -3,7 +3,7 @@ package st import ( "bytes" "fmt" - "log/slog" + "log" "strings" "testing" ) @@ -12,16 +12,9 @@ func TestDepsLogging(t *testing.T) { t.Setenv("STAVEFILE_VERBOSE", "1") buf := &bytes.Buffer{} - defaultLogger := slog.Default() - logger := slog.New(slog.NewTextHandler(buf, &slog.HandlerOptions{ - AddSource: false, - Level: nil, - ReplaceAttr: nil, - })) - slog.SetDefault(logger) - defer func() { - slog.SetDefault(defaultLogger) - }() + defaultLogger := simpleConsoleLogger + simpleConsoleLogger = log.New(buf, "", 0) + defer func() { simpleConsoleLogger = defaultLogger }() foo() diff --git a/pkg/stave/main_test.go b/pkg/stave/main_test.go index 6cb4584..e90cc5f 100644 --- a/pkg/stave/main_test.go +++ b/pkg/stave/main_test.go @@ -8,7 +8,6 @@ import ( "encoding/hex" "errors" "fmt" - "go/build" "go/parser" "go/token" "io" @@ -31,6 +30,9 @@ import ( ) const ( + charmbraceletLogMod = "github.com/charmbracelet/log" + staveMod = "github.com/yaklabco/stave" + testExeEnv = "STAVE_TEST_STRING" hiExclam = "hi!" @@ -949,8 +951,9 @@ func (t tLogWriter) Write(b []byte) (int, error) { return len(b), nil } -// Test if generated mainfile references anything other than the stdlib. -func TestOnlyStdLib(t *testing.T) { +// TestNoSelfDependencies checks that the generated `stave_output_file.go` code +// does not have dependencies on Stave itself. +func TestNoSelfDependencies(t *testing.T) { t.Parallel() testDataDir := "./testdata/onlyStdLib" mu := mutexByDir(testDataDir) @@ -992,13 +995,7 @@ func TestOnlyStdLib(t *testing.T) { for _, importSpec := range fd.Imports { // the path value comes in as a quoted string, i.e. literally \"context\" path := strings.Trim(importSpec.Path.Value, "\"") - pkg, err := build.Default.Import(path, "./testdata/keep_flag", build.FindOnly) - require.NoError(t, err) - - // Check if pkg.Dir is under GOROOT using filepath.Rel instead of deprecated filepath.HasPrefix - rel, err := filepath.Rel(build.Default.GOROOT, pkg.Dir) - require.NoError(t, err) - assert.False(t, strings.HasPrefix(rel, "..")) + assert.NotRegexp(t, "^"+staveMod, path) } } @@ -1735,7 +1732,6 @@ func TestGoModules(t *testing.T) { // beware, stave builds in go versions older than 1.17 so both build tag formats need to be present err = os.WriteFile(filepath.Join(dir, "stavefile.go"), []byte(`//go:build stave -// +build stave package main @@ -1763,7 +1759,15 @@ func Test() { cmd.Env = os.Environ() cmd.Stderr = stderr cmd.Stdout = stdout - require.NoError(t, cmd.Run(), "failed to run 'go mod init', stderr was: %s", stderr.String()) + require.NoError(t, cmd.Run(), "failed to run 'go mod tidy', stderr was: %s", stderr.String()) + + // we need to run go mod tidy, since go build will no longer auto-add dependencies. + cmd = exec.Command("go", "get", charmbraceletLogMod) + cmd.Dir = dir + cmd.Env = os.Environ() + cmd.Stderr = stderr + cmd.Stdout = stdout + require.NoError(t, cmd.Run(), "failed to run 'go get %s', stderr was: %s", charmbraceletLogMod, stderr.String()) stderr.Reset() stdout.Reset() diff --git a/pkg/stave/prettylog/prettylog.go b/pkg/stave/prettylog/prettylog.go index d9b0cdd..029f959 100644 --- a/pkg/stave/prettylog/prettylog.go +++ b/pkg/stave/prettylog/prettylog.go @@ -11,7 +11,7 @@ func SetupPrettyLogger(writerForLogger io.Writer) *log.Logger { logHandler := log.NewWithOptions( writerForLogger, log.Options{ - Level: log.InfoLevel, // Setting this to lowest possible value, since slog will handle the actual filtering. + Level: log.InfoLevel, // This is the default; called can grab the returned logHandler and call the SetLevel method on it to set it to something else. ReportTimestamp: true, ReportCaller: true, }, diff --git a/pkg/stave/templates/initial_stavefile.go b/pkg/stave/templates/initial_stavefile.go index 926b71a..ba06c9a 100644 --- a/pkg/stave/templates/initial_stavefile.go +++ b/pkg/stave/templates/initial_stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main @@ -8,37 +7,47 @@ import ( "os" "os/exec" + "github.com/charmbracelet/log" "github.com/yaklabco/stave/pkg/st" // st contains helpful utility functions, like Deps + "github.com/yaklabco/stave/pkg/stave/prettylog" ) +func init() { //nolint:gochecknoinits // This is a stavefile, we can have an init(). + logHandler := prettylog.SetupPrettyLogger(os.Stdout) + if st.Debug() { + logHandler.SetLevel(log.DebugLevel) + } +} + // Default target to run when none is specified // If not set, running stave will list available targets // var Default = Build -// A build step that requires additional params, or platform specific steps for example +// A build step that requires additional params, or platform specific steps for example. func Build() error { st.Deps(InstallDeps) - fmt.Println("Building...") + _, _ = fmt.Println("Building...") cmd := exec.Command("go", "build", "-o", "MyApp", ".") return cmd.Run() } -// A custom install step if you need your bin someplace other than go/bin +// A custom install step if you need your bin someplace other than go/bin. func Install() error { st.Deps(Build) - fmt.Println("Installing...") + _, _ = fmt.Println("Installing...") return os.Rename("./MyApp", "/usr/bin/MyApp") } // Manage your deps, or running package managers. func InstallDeps() error { - fmt.Println("Installing Deps...") + _, _ = fmt.Println("Installing Deps...") cmd := exec.Command("go", "get", "github.com/stretchr/piglatin") return cmd.Run() } -// Clean up after yourself -func Clean() { - fmt.Println("Cleaning...") - os.RemoveAll("MyApp") +// Clean up after yourself. +func Clean() error { + _, _ = fmt.Println("Cleaning...") + + return os.RemoveAll("MyApp") } diff --git a/pkg/stave/templates/mainfile.gotmpl b/pkg/stave/templates/mainfile.gotmpl index 41d8915..d2bbf8e 100644 --- a/pkg/stave/templates/mainfile.gotmpl +++ b/pkg/stave/templates/mainfile.gotmpl @@ -1,5 +1,4 @@ //go:build ignore -// +build ignore package main @@ -7,7 +6,7 @@ import ( "context" _flag "flag" _fmt "fmt" - _ioutil "io/ioutil" + _io "io" _log "log" _slog "log/slog" "os" @@ -19,6 +18,9 @@ import ( "syscall" _tabwriter "text/tabwriter" "time" + + _cblog "github.com/charmbracelet/log" + {{range .Imports}}{{.UniqueName}} "{{.Path}}" {{end}} ) @@ -370,27 +372,36 @@ func main() { } // Set STAVEFILE_DEBUG so st.Debug() reflects the flag value. - var slogLevel _slog.Level if args.Debug { os.Setenv("STAVEFILE_DEBUG", "1") - slogLevel = _slog.LevelDebug } else { os.Setenv("STAVEFILE_DEBUG", "0") + } + + logHandler := _cblog.NewWithOptions( + os.Stdout, + _cblog.Options{ + Level: _cblog.InfoLevel, + ReportTimestamp: true, + ReportCaller: true, + }, + ) + structuredLogger := _slog.New(logHandler) + _slog.SetDefault(structuredLogger) + + if args.Debug { + logHandler.SetLevel(_cblog.DebugLevel) + } else { if args.Verbose { - slogLevel = _slog.LevelInfo + logHandler.SetLevel(_cblog.InfoLevel) } else { - slogLevel = _slog.LevelWarn + logHandler.SetLevel(_cblog.WarnLevel) } } - _slog.SetDefault(_slog.New(_slog.NewTextHandler(os.Stdout, &_slog.HandlerOptions{ - AddSource: false, - Level: slogLevel, - }))) - _log.SetFlags(0) if !args.Verbose { - _log.SetOutput(_ioutil.Discard) + _log.SetOutput(_io.Discard) } logger := _log.New(os.Stderr, "", 0) if args.List { diff --git a/pkg/stave/testdata/alias/stavefile.go b/pkg/stave/testdata/alias/stavefile.go index 24d2150..bb9d949 100644 --- a/pkg/stave/testdata/alias/stavefile.go +++ b/pkg/stave/testdata/alias/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/args/stavefile.go b/pkg/stave/testdata/args/stavefile.go index a99a9eb..24320b7 100644 --- a/pkg/stave/testdata/args/stavefile.go +++ b/pkg/stave/testdata/args/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/bug508/stavefile.go b/pkg/stave/testdata/bug508/stavefile.go index 93f82bf..3c05e55 100644 --- a/pkg/stave/testdata/bug508/stavefile.go +++ b/pkg/stave/testdata/bug508/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/command.go b/pkg/stave/testdata/command.go index 87f895f..f591f14 100644 --- a/pkg/stave/testdata/command.go +++ b/pkg/stave/testdata/command.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/compiled/custom.go b/pkg/stave/testdata/compiled/custom.go index 2af6037..195d3ee 100644 --- a/pkg/stave/testdata/compiled/custom.go +++ b/pkg/stave/testdata/compiled/custom.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave // Compiled package description. package main diff --git a/pkg/stave/testdata/context/context.go b/pkg/stave/testdata/context/context.go index 3e0a509..1593fbc 100644 --- a/pkg/stave/testdata/context/context.go +++ b/pkg/stave/testdata/context/context.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/cyclic_dependencies/stavefile.go b/pkg/stave/testdata/cyclic_dependencies/stavefile.go index b895bbd..e02ad1c 100644 --- a/pkg/stave/testdata/cyclic_dependencies/stavefile.go +++ b/pkg/stave/testdata/cyclic_dependencies/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/error.go b/pkg/stave/testdata/error.go index 940fbe4..c5baca1 100644 --- a/pkg/stave/testdata/error.go +++ b/pkg/stave/testdata/error.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/func.go b/pkg/stave/testdata/func.go index 3431725..c564538 100644 --- a/pkg/stave/testdata/func.go +++ b/pkg/stave/testdata/func.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/goos_stavefiles/stavefile_nonwindows.go b/pkg/stave/testdata/goos_stavefiles/stavefile_nonwindows.go index 972e215..29293b1 100644 --- a/pkg/stave/testdata/goos_stavefiles/stavefile_nonwindows.go +++ b/pkg/stave/testdata/goos_stavefiles/stavefile_nonwindows.go @@ -1,5 +1,4 @@ //go:build stave && !windows -// +build stave,!windows package main diff --git a/pkg/stave/testdata/goos_stavefiles/stavefile_windows.go b/pkg/stave/testdata/goos_stavefiles/stavefile_windows.go index 5eab27c..88641b4 100644 --- a/pkg/stave/testdata/goos_stavefiles/stavefile_windows.go +++ b/pkg/stave/testdata/goos_stavefiles/stavefile_windows.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/invalid_alias/stavefile.go b/pkg/stave/testdata/invalid_alias/stavefile.go index d22503b..241023f 100644 --- a/pkg/stave/testdata/invalid_alias/stavefile.go +++ b/pkg/stave/testdata/invalid_alias/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/keep_flag/stavefile.go b/pkg/stave/testdata/keep_flag/stavefile.go index 0bac941..dd45b68 100644 --- a/pkg/stave/testdata/keep_flag/stavefile.go +++ b/pkg/stave/testdata/keep_flag/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/list/command.go b/pkg/stave/testdata/list/command.go index 00ed97c..3cf343d 100644 --- a/pkg/stave/testdata/list/command.go +++ b/pkg/stave/testdata/list/command.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave // This is a comment on the package which should get turned into output with the // list of targets. diff --git a/pkg/stave/testdata/main.go b/pkg/stave/testdata/main.go index bb99c36..925fbe9 100644 --- a/pkg/stave/testdata/main.go +++ b/pkg/stave/testdata/main.go @@ -1,5 +1,4 @@ //go:build ignore -// +build ignore package main diff --git a/pkg/stave/testdata/mixed_lib_files/stave_helpers.go b/pkg/stave/testdata/mixed_lib_files/stave_helpers.go index 9f51121..fa12444 100644 --- a/pkg/stave/testdata/mixed_lib_files/stave_helpers.go +++ b/pkg/stave/testdata/mixed_lib_files/stave_helpers.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/mixed_lib_files/stavefile.go b/pkg/stave/testdata/mixed_lib_files/stavefile.go index a6f87fe..d8fe50d 100644 --- a/pkg/stave/testdata/mixed_lib_files/stavefile.go +++ b/pkg/stave/testdata/mixed_lib_files/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/mixed_lib_files/subdir/stavefile.go b/pkg/stave/testdata/mixed_lib_files/subdir/stavefile.go index 1d8d53f..9ed2877 100644 --- a/pkg/stave/testdata/mixed_lib_files/subdir/stavefile.go +++ b/pkg/stave/testdata/mixed_lib_files/subdir/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/mixed_main_files/stave_helpers.go b/pkg/stave/testdata/mixed_main_files/stave_helpers.go index 9f51121..fa12444 100644 --- a/pkg/stave/testdata/mixed_main_files/stave_helpers.go +++ b/pkg/stave/testdata/mixed_main_files/stave_helpers.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/mixed_main_files/stavefile.go b/pkg/stave/testdata/mixed_main_files/stavefile.go index 1d8d53f..9ed2877 100644 --- a/pkg/stave/testdata/mixed_main_files/stavefile.go +++ b/pkg/stave/testdata/mixed_main_files/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/namespaces/stavefile.go b/pkg/stave/testdata/namespaces/stavefile.go index 9e16e48..f194211 100644 --- a/pkg/stave/testdata/namespaces/stavefile.go +++ b/pkg/stave/testdata/namespaces/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/no_default/stavefile.go b/pkg/stave/testdata/no_default/stavefile.go index 473add3..2c742df 100644 --- a/pkg/stave/testdata/no_default/stavefile.go +++ b/pkg/stave/testdata/no_default/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/onlyStdLib/command.go b/pkg/stave/testdata/onlyStdLib/command.go index bb62b3f..8d25f56 100644 --- a/pkg/stave/testdata/onlyStdLib/command.go +++ b/pkg/stave/testdata/onlyStdLib/command.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/panic.go b/pkg/stave/testdata/panic.go index bba4742..f897fd4 100644 --- a/pkg/stave/testdata/panic.go +++ b/pkg/stave/testdata/panic.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/setdir/setdir.go b/pkg/stave/testdata/setdir/setdir.go index 47f0c4f..b2f80c0 100644 --- a/pkg/stave/testdata/setdir/setdir.go +++ b/pkg/stave/testdata/setdir/setdir.go @@ -1,16 +1,15 @@ //go:build stave -// +build stave package main import ( "fmt" - "io/ioutil" + "os" "strings" ) func TestCurrentDir() error { - files, err := ioutil.ReadDir(".") + files, err := os.ReadDir(".") if err != nil { return err } diff --git a/pkg/stave/testdata/setdir_with_stavefiles_folder/stavefiles/stave_helpers.go b/pkg/stave/testdata/setdir_with_stavefiles_folder/stavefiles/stave_helpers.go index 9f51121..fa12444 100644 --- a/pkg/stave/testdata/setdir_with_stavefiles_folder/stavefiles/stave_helpers.go +++ b/pkg/stave/testdata/setdir_with_stavefiles_folder/stavefiles/stave_helpers.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/setdir_with_stavefiles_folder/stavefiles/stavefile.go b/pkg/stave/testdata/setdir_with_stavefiles_folder/stavefiles/stavefile.go index 1d8d53f..9ed2877 100644 --- a/pkg/stave/testdata/setdir_with_stavefiles_folder/stavefiles/stavefile.go +++ b/pkg/stave/testdata/setdir_with_stavefiles_folder/stavefiles/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/setworkdir/stavefile.go b/pkg/stave/testdata/setworkdir/stavefile.go index b4e85cd..b1ebfd4 100644 --- a/pkg/stave/testdata/setworkdir/stavefile.go +++ b/pkg/stave/testdata/setworkdir/stavefile.go @@ -1,16 +1,15 @@ //go:build stave -// +build stave package main import ( "fmt" - "io/ioutil" + "os" "strings" ) func TestWorkingDir() error { - files, err := ioutil.ReadDir(".") + files, err := os.ReadDir(".") if err != nil { return err } diff --git a/pkg/stave/testdata/signals/signals.go b/pkg/stave/testdata/signals/signals.go index 1c25d1f..0706885 100644 --- a/pkg/stave/testdata/signals/signals.go +++ b/pkg/stave/testdata/signals/signals.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/staveimport/oneline/stavefile.go b/pkg/stave/testdata/staveimport/oneline/stavefile.go index 75c1f5d..6a6059c 100644 --- a/pkg/stave/testdata/staveimport/oneline/stavefile.go +++ b/pkg/stave/testdata/staveimport/oneline/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/staveimport/samenamespace/duptargets/stavefile.go b/pkg/stave/testdata/staveimport/samenamespace/duptargets/stavefile.go index f99ca74..4484af8 100644 --- a/pkg/stave/testdata/staveimport/samenamespace/duptargets/stavefile.go +++ b/pkg/stave/testdata/staveimport/samenamespace/duptargets/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package sametarget diff --git a/pkg/stave/testdata/staveimport/samenamespace/uniquetargets/stavefile.go b/pkg/stave/testdata/staveimport/samenamespace/uniquetargets/stavefile.go index 1a8262c..b1ca1c0 100644 --- a/pkg/stave/testdata/staveimport/samenamespace/uniquetargets/stavefile.go +++ b/pkg/stave/testdata/staveimport/samenamespace/uniquetargets/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/staveimport/stavefile.go b/pkg/stave/testdata/staveimport/stavefile.go index 79a0fba..5547196 100644 --- a/pkg/stave/testdata/staveimport/stavefile.go +++ b/pkg/stave/testdata/staveimport/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/staveimport/tagged/pkg/stave.go b/pkg/stave/testdata/staveimport/tagged/pkg/stave.go index 722ad84..b4da670 100644 --- a/pkg/stave/testdata/staveimport/tagged/pkg/stave.go +++ b/pkg/stave/testdata/staveimport/tagged/pkg/stave.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package pkg diff --git a/pkg/stave/testdata/staveimport/tagged/stavefile.go b/pkg/stave/testdata/staveimport/tagged/stavefile.go index 026ca6c..68e24a2 100644 --- a/pkg/stave/testdata/staveimport/tagged/stavefile.go +++ b/pkg/stave/testdata/staveimport/tagged/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/staveimport/trailing/stavefile.go b/pkg/stave/testdata/staveimport/trailing/stavefile.go index d899dfa..5f1f926 100644 --- a/pkg/stave/testdata/staveimport/trailing/stavefile.go +++ b/pkg/stave/testdata/staveimport/trailing/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/transitiveDeps/stavefile.go b/pkg/stave/testdata/transitiveDeps/stavefile.go index 688c2be..7610d2c 100644 --- a/pkg/stave/testdata/transitiveDeps/stavefile.go +++ b/pkg/stave/testdata/transitiveDeps/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/with_mixtagged_stavefiles_folder/stavefiles/stave_helpers.go b/pkg/stave/testdata/with_mixtagged_stavefiles_folder/stavefiles/stave_helpers.go index 9f51121..fa12444 100644 --- a/pkg/stave/testdata/with_mixtagged_stavefiles_folder/stavefiles/stave_helpers.go +++ b/pkg/stave/testdata/with_mixtagged_stavefiles_folder/stavefiles/stave_helpers.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/with_mixtagged_stavefiles_folder/stavefiles/stavefile.go b/pkg/stave/testdata/with_mixtagged_stavefiles_folder/stavefiles/stavefile.go index 1d8d53f..9ed2877 100644 --- a/pkg/stave/testdata/with_mixtagged_stavefiles_folder/stavefiles/stavefile.go +++ b/pkg/stave/testdata/with_mixtagged_stavefiles_folder/stavefiles/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/with_stavefiles_folder/stavefiles/stave_helpers.go b/pkg/stave/testdata/with_stavefiles_folder/stavefiles/stave_helpers.go index 9f51121..fa12444 100644 --- a/pkg/stave/testdata/with_stavefiles_folder/stavefiles/stave_helpers.go +++ b/pkg/stave/testdata/with_stavefiles_folder/stavefiles/stave_helpers.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/with_stavefiles_folder/stavefiles/stavefile.go b/pkg/stave/testdata/with_stavefiles_folder/stavefiles/stavefile.go index 1d8d53f..9ed2877 100644 --- a/pkg/stave/testdata/with_stavefiles_folder/stavefiles/stavefile.go +++ b/pkg/stave/testdata/with_stavefiles_folder/stavefiles/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefile.go b/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefile.go index 1d8d53f..9ed2877 100644 --- a/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefile.go +++ b/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefiles/stave_helpers.go b/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefiles/stave_helpers.go index 9f51121..fa12444 100644 --- a/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefiles/stave_helpers.go +++ b/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefiles/stave_helpers.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefiles/stavefile.go b/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefiles/stavefile.go index 1670af5..99c5282 100644 --- a/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefiles/stavefile.go +++ b/pkg/stave/testdata/with_stavefiles_folder_and_stave_files_in_dot/stavefiles/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/pkg/stave/testdata/wrong_dep/stavefile.go b/pkg/stave/testdata/wrong_dep/stavefile.go index 21ce451..5088eda 100644 --- a/pkg/stave/testdata/wrong_dep/stavefile.go +++ b/pkg/stave/testdata/wrong_dep/stavefile.go @@ -1,5 +1,4 @@ //go:build stave -// +build stave package main diff --git a/stavefile.go b/stavefile.go index 6168935..a4300a3 100644 --- a/stavefile.go +++ b/stavefile.go @@ -101,6 +101,7 @@ func Markdownlint() error { // stave:help=Run markdownlint on Markdown files // LintGo runs golangci-lint with auto-fix and parallel runner options enabled. func LintGo() error { + st.Deps(Init) out, err := sh.Output("golangci-lint", "run", "--fix", "--allow-parallel-runners", "--build-tags='!ignore'") if err != nil { titleStyle, blockStyle := ui.GetBlockStyles() @@ -258,20 +259,20 @@ func Install() error { // in GOPATH environment string bin, err := sh.Output(gocmd, "env", "GOBIN") if err != nil { - return fmt.Errorf("can't determine GOBIN: %v", err) + return fmt.Errorf("can't determine GOBIN: %w", err) } if bin == "" { gopath, err := sh.Output(gocmd, "env", "GOPATH") if err != nil { - return fmt.Errorf("can't determine GOPATH: %v", err) + return fmt.Errorf("can't determine GOPATH: %w", err) } paths := strings.Split(gopath, string([]rune{os.PathListSeparator})) bin = filepath.Join(paths[0], "bin") } // specifically don't mkdirall, if you have an invalid gopath in the first // place, that's not on us to fix. - if err := os.Mkdir(bin, 0700); err != nil && !os.IsExist(err) { - return fmt.Errorf("failed to create %q: %v", bin, err) + if err := os.Mkdir(bin, 0o700); err != nil && !os.IsExist(err) { + return fmt.Errorf("failed to create %q: %w", bin, err) } path := filepath.Join(bin, name) @@ -286,7 +287,7 @@ var releaseTag = regexp.MustCompile(`^v1\.[0-9]+\.[0-9]+$`) // origRelease generates a new release. Expects a version tag in v1.x.x format. // It is the original `Release` target for Mage. -func origRelease(tag string) (err error) { +func origRelease(tag string) error { if _, err := exec.LookPath("goreleaser"); err != nil { return fmt.Errorf("can't find goreleaser: %w", err) } @@ -300,13 +301,16 @@ func origRelease(tag string) (err error) { if err := sh.RunV("git", "push", "origin", tag); err != nil { return err } + var releaseErr error defer func() { - if err != nil { - _ = sh.RunV("git", "tag", "--delete", tag) - _ = sh.RunV("git", "push", "--delete", "origin", tag) + if releaseErr != nil { + _ = sh.RunV("git", "tag", "--delete", tag) //nolint:errcheck // This is last-ditch cleanup. + _ = sh.RunV("git", "push", "--delete", "origin", tag) //nolint:errcheck // This is last-ditch cleanup. } }() - return sh.RunV("goreleaser") + releaseErr = sh.RunV("goreleaser") + + return releaseErr } // Clean removes the temporarily generated files from Release. @@ -321,7 +325,12 @@ func flags() string { if theTag == "" { theTag = "dev" } - return fmt.Sprintf(`-X "github.com/yaklabco/stave/cmd/stave/version.BuildDate=%s" -X "github.com/yaklabco/stave/cmd/stave/version.Commit=%s" -X "github.com/yaklabco/stave/cmd/stave/version.Version=%s"`, timestamp, theHash, theTag) + return fmt.Sprintf( + `-X "github.com/yaklabco/stave/cmd/stave/version.BuildDate=%s"`+` `+ + `-X "github.com/yaklabco/stave/cmd/stave/version.Commit=%s"`+` `+ + `-X "github.com/yaklabco/stave/cmd/stave/version.Version=%s"`, + timestamp, theHash, theTag, + ) } // tag returns the git tag for the current branch or "" if none.