Port from logrus to log/slog
This doesn't really take much advantage of structured logging beyond what is already done (`id` and `idColor`), and consequently the log handler does not try to do any handling of anything more than that (i.e., grouping, or arbitrary attributes beyond those defined).
One should maybe have a `Context` available to pass in, but there isn't one, and anyway, the log handler doesn't use it, so I've passed in a `TODO` instead.
Everything else is just normal import/rename changes.
Testing Done:
Ran `go run . run`
Reviewed at https://reviews.imfreedom.org/r/2871/
--- a/config/config.go Sun Dec 10 05:23:34 2023 -0600
+++ b/config/config.go Mon Dec 11 23:01:51 2023 -0600
@@ -19,8 +19,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/runtime"
@@ -41,7 +40,7 @@
if err := task.Deprecated(); err != nil {
- log.Warnf("warning: task %s: %s", name, err.Error())
+ slog.Warn(fmt.Sprintf("warning: task %s: %s", name, err.Error())) --- a/config/loader.go Sun Dec 10 05:23:34 2023 -0600
+++ b/config/loader.go Mon Dec 11 23:01:51 2023 -0600
@@ -17,10 +17,9 @@
- log "github.com/sirupsen/logrus"
@@ -41,7 +40,7 @@
// If the user selected the default and it didn't exist, attempt the
// default with a .yaml extension.
if os.IsNotExist(err) && filename == "convey.yml" {
- log.Infof("info: configuration file convey.yml not found, attempting convey.yaml instead.")
+ slog.Info("info: configuration file convey.yml not found, attempting convey.yaml instead.") _, err = os.Stat(filename)
--- a/docker/build.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/build.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/podman"
@@ -23,7 +22,7 @@
-func (b *Build) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (b *Build) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { return b.realBuild.Execute(name, logger, stageEnv, rt)
--- a/docker/environment.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/environment.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/runtime"
@@ -22,7 +21,7 @@
// Execute runs the task.
-func (e *Environment) Execute(name string, logger *log.Entry, env environment.Environment, rt *runtime.Runtime) error {
+func (e *Environment) Execute(name string, logger *slog.Logger, env environment.Environment, rt *runtime.Runtime) error { --- a/docker/export.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/export.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/runtime"
@@ -32,7 +31,7 @@
// Execute runs the task.
-func (e *Export) Execute(name string, logger *log.Entry, env environment.Environment, rt *runtime.Runtime) error {
+func (e *Export) Execute(name string, logger *slog.Logger, env environment.Environment, rt *runtime.Runtime) error { return e.realExport.Execute(name, logger, env, rt)
--- a/docker/import.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/import.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/runtime"
@@ -32,7 +31,7 @@
// Execute runs the task.
-func (i *Import) Execute(name string, logger *log.Entry, env environment.Environment, rt *runtime.Runtime) error {
+func (i *Import) Execute(name string, logger *slog.Logger, env environment.Environment, rt *runtime.Runtime) error { return i.realImport.Execute(name, logger, env, rt)
--- a/docker/login.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/login.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/podman"
@@ -18,7 +17,7 @@
-func (l *Login) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (l *Login) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { return l.realLogin.Execute(name, logger, stageEnv, rt)
--- a/docker/logout.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/logout.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/podman"
@@ -16,7 +15,7 @@
realLogout *podman.Logout
-func (l *Logout) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (l *Logout) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { return l.realLogout.Execute(name, logger, stageEnv, rt)
--- a/docker/pull.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/pull.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/podman"
@@ -18,7 +17,7 @@
-func (p *Pull) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (p *Pull) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { return p.realPull.Execute(name, logger, stageEnv, rt)
--- a/docker/push.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/push.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/podman"
@@ -18,7 +17,7 @@
-func (p *Push) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (p *Push) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { return p.realPush.Execute(name, logger, stageEnv, rt)
--- a/docker/remove.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/remove.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/podman"
@@ -19,7 +18,7 @@
realRemove *podman.Remove
-func (r *Remove) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (r *Remove) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { return r.realRemove.Execute(name, logger, stageEnv, rt)
--- a/docker/run.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/run.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/podman"
@@ -62,7 +61,7 @@
// Execute runs the task.
-func (r *Run) Execute(name string, logger *log.Entry, env environment.Environment, rt *runtime.Runtime) error {
+func (r *Run) Execute(name string, logger *slog.Logger, env environment.Environment, rt *runtime.Runtime) error { return r.realRun.Execute(name, logger, env, rt)
--- a/docker/tag.go Sun Dec 10 05:23:34 2023 -0600
+++ b/docker/tag.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,8 +2,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/podman"
@@ -39,7 +38,7 @@
// Execute runs the task.
-func (t *Tag) Execute(name string, logger *log.Entry, env environment.Environment, rt *runtime.Runtime) error {
+func (t *Tag) Execute(name string, logger *slog.Logger, env environment.Environment, rt *runtime.Runtime) error { return t.realTag.Execute(name, logger, env, rt)
--- a/environment/expand.go Sun Dec 10 05:23:34 2023 -0600
+++ b/environment/expand.go Mon Dec 11 23:01:51 2023 -0600
@@ -1,9 +1,9 @@
- log "github.com/sirupsen/logrus"
func (e Environment) expandMapper(name string) string {
@@ -40,7 +40,7 @@
- log.Warnf("failed to fully expand %q after %d recursions", key, tries)
+ slog.Warn(fmt.Sprintf("failed to fully expand %q after %d recursions", key, tries)) --- a/exec/collector.go Sun Dec 10 05:23:34 2023 -0600
+++ b/exec/collector.go Mon Dec 11 23:01:51 2023 -0600
@@ -18,17 +18,17 @@
- log "github.com/sirupsen/logrus"
type collector func(s *bufio.Scanner)
-func newLogCollector(adapter *log.Entry, level log.Level) collector {
+func newLogCollector(adapter *slog.Logger, level slog.Level) collector { return func(s *bufio.Scanner) {
- adapter.Log(level, s.Text())
+ adapter.Log(context.TODO(), level, s.Text()) --- a/exec/exec.go Sun Dec 10 05:23:34 2023 -0600
+++ b/exec/exec.go Mon Dec 11 23:01:51 2023 -0600
@@ -21,12 +21,11 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/logging"
@@ -35,8 +34,8 @@
func Run(name string, cmdv []string, timeout time.Duration) error {
logger = logging.NewAdapter(name)
- outCollector = newLogCollector(logger, log.InfoLevel)
- errCollector = newLogCollector(logger, log.ErrorLevel)
+ outCollector = newLogCollector(logger, slog.LevelInfo) + errCollector = newLogCollector(logger, slog.LevelError) return run(name, cmdv, nil, timeout, &sync.WaitGroup{}, outCollector, errCollector)
@@ -47,8 +46,8 @@
func RunWithStdin(name string, cmdv []string, stdin io.Reader, timeout time.Duration) error {
logger = logging.NewAdapter(name)
- outCollector = newLogCollector(logger, log.InfoLevel)
- errCollector = newLogCollector(logger, log.ErrorLevel)
+ outCollector = newLogCollector(logger, slog.LevelInfo) + errCollector = newLogCollector(logger, slog.LevelError) return run(name, cmdv, stdin, timeout, &sync.WaitGroup{}, outCollector, errCollector)
@@ -72,7 +71,7 @@
func run(name string, cmdv []string, stdin io.Reader, timeout time.Duration, wg *sync.WaitGroup, outHandler, errHandler collector) error {
logger := logging.NewAdapter(name)
- logger.Debugf("running command \"%v\"", cmdv)
+ logger.Debug(fmt.Sprintf("running command \"%v\"", cmdv)) cmd := exec.Command(cmdv[0], cmdv[1:]...) // nolint: gas
@@ -124,7 +123,7 @@
// log that the process timed out
- logger.Errorf("command %v timed out after %v", cmdv, timeout)
+ logger.Error(fmt.Sprintf("command %v timed out after %v", cmdv, timeout)) --- a/fs/directory.go Sun Dec 10 05:23:34 2023 -0600
+++ b/fs/directory.go Mon Dec 11 23:01:51 2023 -0600
@@ -20,11 +20,11 @@
- log "github.com/sirupsen/logrus"
@@ -57,12 +57,12 @@
realDst := filepath.Join(d.path, dst)
- log.Debugf("importing directory %q to %q", src, realDst)
+ slog.Debug(fmt.Sprintf("importing directory %q to %q", src, realDst)) return copyDir(src, realDst, file.Mode())
- log.Debugf("importing file %q to %q", src, realDst)
+ slog.Debug(fmt.Sprintf("importing file %q to %q", src, realDst)) return copyFile(src, realDst, file.Mode())
@@ -76,12 +76,12 @@
- log.Debugf("exporting directory %q to %q", realSrc, dst)
+ slog.Debug(fmt.Sprintf("exporting directory %q to %q", realSrc, dst)) return copyDir(realSrc, dst, file.Mode())
- log.Debugf("exporting file %q to %q", realSrc, dst)
+ slog.Debug(fmt.Sprintf("exporting file %q to %q", realSrc, dst)) return copyFile(realSrc, dst, file.Mode())
--- a/logging/adapter.go Sun Dec 10 05:23:34 2023 -0600
+++ b/logging/adapter.go Mon Dec 11 23:01:51 2023 -0600
@@ -17,16 +17,16 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/color"
// NewAdapter creates a new logger with attributes for the identifier
-// as well has a color for it.
-func NewAdapter(identifier string) *log.Entry {
- return log.WithFields(log.Fields{
- "idColor": color.Ansi(identifier),
+// as well as a color for it. +func NewAdapter(identifier string) *slog.Logger { + "idColor", color.Ansi(identifier), --- a/logging/formatter.go Sun Dec 10 05:23:34 2023 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-// Copyright 2016-2018 Gary Kramlich <grim@reaperworld.com>
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
- "github.com/mgutz/ansi"
- log "github.com/sirupsen/logrus"
- baseTime time.Time = time.Now()
- levelColors map[log.Level]string = map[log.Level]string{
- log.PanicLevel: ansi.ColorCode("red+h"),
- log.FatalLevel: ansi.ColorCode("red+b"),
- log.ErrorLevel: ansi.ColorCode("red"),
- log.WarnLevel: ansi.ColorCode("yellow"),
- log.InfoLevel: ansi.ColorCode("green"),
- log.DebugLevel: ansi.ColorCode("cyan"),
- log.TraceLevel: ansi.ColorCode("white+h"),
-func miniTimestamp() int {
- return int(time.Since(baseTime) / time.Second)
-func NewFormatter(color bool) log.Formatter {
- switch os.Getenv("TERM") {
- disableColors: disableColors,
-func (f *Formatter) Format(entry *log.Entry) ([]byte, error) {
- if entry.Buffer != nil {
- fmt.Fprintf(b, "[%04d] ", miniTimestamp())
- idColor := entry.Data["idColor"]
- if f.disableColors && idColor != nil {
- fmt.Fprintf(b, "%s: ", id)
- fmt.Fprintf(b, "%s%s%s: ", idColor, id, ansi.Reset)
- if entry.Message != "" {
- fmt.Fprintf(b, "%s", entry.Message)
- fmt.Fprintf(b, "%s%s%s", levelColors[entry.Level], entry.Message, ansi.Reset)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/logging/handler.go Mon Dec 11 23:01:51 2023 -0600
@@ -0,0 +1,149 @@
+// Copyright 2016-2018 Gary Kramlich <grim@reaperworld.com> +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + "github.com/mgutz/ansi" + baseTime time.Time = time.Now() + levelColors map[slog.Level]string = map[slog.Level]string{ + slog.LevelError: ansi.ColorCode("red"), + slog.LevelWarn: ansi.ColorCode("yellow"), + slog.LevelInfo: ansi.ColorCode("green"), + slog.LevelDebug: ansi.ColorCode("cyan"), + ignoreRemainingAttrs bool +func NewHandler(color bool, level slog.Level) slog.Handler { + switch os.Getenv("TERM") { + disableColors: disableColors, +func (h *Handler) Enabled(ctx context.Context, level slog.Level) bool { + return level >= h.level +func (h *Handler) Handle(ctx context.Context, record slog.Record) error { + if record.Time.IsZero() { + miniTimestamp = int(time.Since(baseTime) / time.Second) + miniTimestamp = int(record.Time.Sub(baseTime) / time.Second) + fmt.Fprintf(b, "[%04d] ", miniTimestamp) + // Find some attributes from handler context or the record. + idColor := h.recordColor + if !h.ignoreRemainingAttrs { + record.Attrs(func(a slog.Attr) bool { + idColor = a.Value.String() + if h.disableColors && idColor != "" { + fmt.Fprintf(b, "%s: ", id) + fmt.Fprintf(b, "%s%s%s: ", idColor, id, ansi.Reset) + if record.Message != "" { + fmt.Fprintf(b, "%s", record.Message) + fmt.Fprintf(b, "%s%s%s", levelColors[record.Level], record.Message, ansi.Reset) + _, err := os.Stdout.Write(b.Bytes()) +func (h *Handler) WithAttrs(attrs []slog.Attr) slog.Handler { + // We only care about a few attributes for now. + for _, a := range attrs { + h2.recordId = a.Value.String() + h2.recordColor = a.Value.String() +func (h *Handler) WithGroup(name string) slog.Handler { + // Once a group is added, the attributes become group.attr, so we want to ignore the rest. + h2.ignoreRemainingAttrs = true --- a/logging/logging.go Sun Dec 10 05:23:34 2023 -0600
+++ b/logging/logging.go Mon Dec 11 23:01:51 2023 -0600
@@ -18,20 +18,18 @@
- log "github.com/sirupsen/logrus"
// Setup sets up the logging system based on the input parameters
func Setup(color, verbose bool) {
- log.SetOutput(os.Stdout)
- log.SetLevel(log.DebugLevel)
+ level = slog.LevelDebug - log.SetLevel(log.InfoLevel)
- log.SetFormatter(NewFormatter(color))
+ handler := NewHandler(color, level) + slog.SetDefault(slog.New(handler)) --- a/podman/build.go Sun Dec 10 05:23:34 2023 -0600
+++ b/podman/build.go Mon Dec 11 23:01:51 2023 -0600
@@ -1,11 +1,11 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/exec"
"keep.imfreedom.org/grim/convey/runtime"
@@ -20,7 +20,7 @@
Target string `yaml:"target"`
-func (b *Build) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (b *Build) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { env := stageEnv.Copy().Merge(rt.Environment)
ws, err := rt.Workspace()
@@ -32,8 +32,8 @@
if !strings.HasSuffix(context, string(filepath.Separator)) {
context += string(filepath.Separator)
- log.Infof("resolved context: %q", context)
- log.Infof("wspath: %q", ws.Path())
+ slog.Info(fmt.Sprintf("resolved context: %q", context)) + slog.Info(fmt.Sprintf("wspath: %q", ws.Path())) if !strings.HasPrefix(context, ws.Path()) {
return ErrContextOutsideOfWorkspace
--- a/podman/login.go Sun Dec 10 05:23:34 2023 -0600
+++ b/podman/login.go Mon Dec 11 23:01:51 2023 -0600
@@ -1,10 +1,9 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/exec"
"keep.imfreedom.org/grim/convey/runtime"
@@ -16,7 +15,7 @@
Password string `yaml:"password"`
-func (l *Login) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (l *Login) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { env := stageEnv.Copy().Merge(rt.Environment)
registry := env.Expand(l.Registry)
--- a/podman/logout.go Sun Dec 10 05:23:34 2023 -0600
+++ b/podman/logout.go Mon Dec 11 23:01:51 2023 -0600
@@ -1,7 +1,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/exec"
@@ -12,7 +12,7 @@
Registry string `yaml:"registry"`
-func (l *Logout) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (l *Logout) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { env := stageEnv.Copy().Merge(rt.Environment)
registry := env.Expand(l.Registry)
--- a/podman/pull.go Sun Dec 10 05:23:34 2023 -0600
+++ b/podman/pull.go Mon Dec 11 23:01:51 2023 -0600
@@ -1,7 +1,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/exec"
@@ -13,7 +13,7 @@
Tags yaml.StringOrSlice `yaml:"tags"`
-func (p *Pull) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (p *Pull) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { env := stageEnv.Copy().Merge(rt.Environment)
tags := env.Expandv(p.Tags)
--- a/podman/push.go Sun Dec 10 05:23:34 2023 -0600
+++ b/podman/push.go Mon Dec 11 23:01:51 2023 -0600
@@ -1,7 +1,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/exec"
@@ -13,7 +13,7 @@
Tags yaml.StringOrSlice `yaml:"tags"`
-func (p *Push) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (p *Push) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { env := stageEnv.Copy().Merge(rt.Environment)
tags := env.Expandv(p.Tags)
--- a/podman/remove.go Sun Dec 10 05:23:34 2023 -0600
+++ b/podman/remove.go Mon Dec 11 23:01:51 2023 -0600
@@ -2,10 +2,9 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/exec"
"keep.imfreedom.org/grim/convey/runtime"
@@ -17,7 +16,7 @@
Quiet bool `yaml:"quiet"`
-func (r *Remove) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (r *Remove) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { env := stageEnv.Copy().Merge(rt.Environment)
tags := env.Expandv(r.Tags)
--- a/podman/run.go Sun Dec 10 05:23:34 2023 -0600
+++ b/podman/run.go Mon Dec 11 23:01:51 2023 -0600
@@ -1,13 +1,13 @@
"github.com/kballard/go-shellquote"
"github.com/opencontainers/selinux/go-selinux"
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/exec"
@@ -54,7 +54,7 @@
-func (r *Run) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (r *Run) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { // Create a new environment based on the stage's environment. Then merge
// the task's environment overriding anything from the stage. Finally merge
// the runtime environment which holds the environment from the command line.
--- a/podman/tag.go Sun Dec 10 05:23:34 2023 -0600
+++ b/podman/tag.go Mon Dec 11 23:01:51 2023 -0600
@@ -1,7 +1,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/exec"
@@ -14,7 +14,7 @@
Targets yaml.StringOrSlice `yaml:"targets"`
-func (t *Tag) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (t *Tag) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { env := stageEnv.Copy().Merge(rt.Environment)
generator := exec.NewGenerator(
--- a/runner/cmd.go Sun Dec 10 05:23:34 2023 -0600
+++ b/runner/cmd.go Mon Dec 11 23:01:51 2023 -0600
@@ -19,14 +19,13 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/config"
"keep.imfreedom.org/grim/convey/globals"
"keep.imfreedom.org/grim/convey/logging"
@@ -105,7 +104,7 @@
- log.Infof("caught signal %s, exiting...", s)
+ slog.Info(fmt.Sprintf("caught signal %s, exiting...", s)) --- a/runtime/count_task.go Sun Dec 10 05:23:34 2023 -0600
+++ b/runtime/count_task.go Mon Dec 11 23:01:51 2023 -0600
@@ -17,7 +17,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
@@ -28,7 +28,7 @@
// Execute runs the count task.
-func (c *Count) Execute(name string, logger *log.Entry, env environment.Environment, rt *Runtime) error {
+func (c *Count) Execute(name string, logger *slog.Logger, env environment.Environment, rt *Runtime) error { --- a/runtime/fail.go Sun Dec 10 05:23:34 2023 -0600
+++ b/runtime/fail.go Mon Dec 11 23:01:51 2023 -0600
@@ -18,8 +18,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
@@ -28,7 +27,7 @@
// Execute runs the fail task.
-func (f *Fail) Execute(name string, logger *log.Entry, env environment.Environment, rt *Runtime) error {
+func (f *Fail) Execute(name string, logger *slog.Logger, env environment.Environment, rt *Runtime) error { return fmt.Errorf("convey/fail task always fails")
--- a/runtime/plans.go Sun Dec 10 05:23:34 2023 -0600
+++ b/runtime/plans.go Mon Dec 11 23:01:51 2023 -0600
@@ -20,10 +20,9 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/logging"
"keep.imfreedom.org/grim/convey/yaml"
@@ -38,7 +37,7 @@
Environment yaml.StringOrSlice `yaml:"environment"`
Stages []Stage `yaml:"stages"`
// Execute runs the plan.
@@ -73,7 +72,7 @@
elapsed := time.Since(start)
- p.logger.Debugf("remaining plantime: %s", rt.Timeout)
+ p.logger.Debug(fmt.Sprintf("remaining plantime: %s", rt.Timeout)) stageLogger.Error("stage failed")
@@ -83,7 +82,7 @@
- stageLogger.Infof("stage finished [%s]", elapsed.Round(10*time.Millisecond))
+ stageLogger.Info(fmt.Sprintf("stage finished [%s]", elapsed.Round(10*time.Millisecond))) --- a/runtime/runtime.go Sun Dec 10 05:23:34 2023 -0600
+++ b/runtime/runtime.go Mon Dec 11 23:01:51 2023 -0600
@@ -17,11 +17,11 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/fs"
@@ -81,7 +81,7 @@
- log.Debugf("created workspace %q", path)
+ slog.Debug(fmt.Sprintf("created workspace %q", path)) @@ -92,16 +92,16 @@
err := rt.workspace.Destroy()
+ slog.Error(fmt.Sprintf( "failed to remove workspace %q: %s",
- log.Debugf("removed workspace %q", rt.workspace.Path())
+ slog.Debug(fmt.Sprintf("removed workspace %q", rt.workspace.Path())) - log.Infof("keeping workspace %q as requested", rt.workspace.Path())
+ slog.Info(fmt.Sprintf("keeping workspace %q as requested", rt.workspace.Path())) --- a/runtime/stages.go Sun Dec 10 05:23:34 2023 -0600
+++ b/runtime/stages.go Mon Dec 11 23:01:51 2023 -0600
@@ -19,10 +19,9 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/logging"
"keep.imfreedom.org/grim/convey/yaml"
@@ -70,7 +69,7 @@
// Execute runs the stage.
-func (s *Stage) Execute(path string, logger *log.Entry, env environment.Environment, rt *Runtime) error {
+func (s *Stage) Execute(path string, logger *slog.Logger, env environment.Environment, rt *Runtime) error { stageEnv := env.Copy().Merge(env).MergeSlice(s.Environment)
if s.Concurrent && !rt.ForceSequential {
@@ -138,7 +137,7 @@
err := task.Execute(absTaskName, taskLogger, stageEnv, rt)
- taskLogger.Errorf("failed, %s", err)
+ taskLogger.Error(fmt.Sprintf("failed, %s", err)) --- a/runtime/task.go Sun Dec 10 05:23:34 2023 -0600
+++ b/runtime/task.go Mon Dec 11 23:01:51 2023 -0600
@@ -16,14 +16,14 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
// Task is an interface for defining a task that can be run.
- Execute(name string, logger *log.Entry, env environment.Environment, rt *Runtime) error
+ Execute(name string, logger *slog.Logger, env environment.Environment, rt *Runtime) error --- a/script/shell.go Sun Dec 10 05:23:34 2023 -0600
+++ b/script/shell.go Mon Dec 11 23:01:51 2023 -0600
@@ -1,13 +1,12 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/exec"
"keep.imfreedom.org/grim/convey/runtime"
@@ -21,7 +20,7 @@
Shell string `yaml:"shell"`
-func (s *Shell) Execute(name string, logger *log.Entry, stageEnv environment.Environment, rt *runtime.Runtime) error {
+func (s *Shell) Execute(name string, logger *slog.Logger, stageEnv environment.Environment, rt *runtime.Runtime) error { // Create a new environment based on the stage's environment. Then merge
// the task's environment overriding anything from the stage. Finally merge
// the runtime environment which holds the environment from the command line.
--- a/tasks/clean.go Sun Dec 10 05:23:34 2023 -0600
+++ b/tasks/clean.go Mon Dec 11 23:01:51 2023 -0600
@@ -18,12 +18,12 @@
"github.com/mattn/go-zglob"
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/runtime"
@@ -54,7 +54,7 @@
// Execute runs the clean task.
-func (c *Clean) Execute(name string, logger *log.Entry, env environment.Environment, rt *runtime.Runtime) error {
+func (c *Clean) Execute(name string, logger *slog.Logger, env environment.Environment, rt *runtime.Runtime) error { fullEnv := environment.New()
fullEnv.Merge(rt.Environment)
@@ -82,7 +82,7 @@
- logger.Debugf("removing \"%v\", expanded from \"%v\"", sanitized, pattern)
+ logger.Debug(fmt.Sprintf("removing \"%v\", expanded from \"%v\"", sanitized, pattern)) if err := os.RemoveAll(sanitized); err != nil {
--- a/tasks/export.go Sun Dec 10 05:23:34 2023 -0600
+++ b/tasks/export.go Mon Dec 11 23:01:51 2023 -0600
@@ -17,11 +17,10 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/fs"
"keep.imfreedom.org/grim/convey/runtime"
@@ -47,7 +46,7 @@
// Execute runs the task.
-func (e *Export) Execute(name string, logger *log.Entry, env environment.Environment, rt *runtime.Runtime) error {
+func (e *Export) Execute(name string, logger *slog.Logger, env environment.Environment, rt *runtime.Runtime) error { fullEnv := env.Copy().Merge(rt.Environment)
workspace, err := rt.Workspace()
--- a/tasks/import.go Sun Dec 10 05:23:34 2023 -0600
+++ b/tasks/import.go Mon Dec 11 23:01:51 2023 -0600
@@ -18,10 +18,9 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/fs"
"keep.imfreedom.org/grim/convey/runtime"
@@ -48,7 +47,7 @@
// Execute runs the task.
-func (i *Import) Execute(name string, logger *log.Entry, env environment.Environment, rt *runtime.Runtime) error {
+func (i *Import) Execute(name string, logger *slog.Logger, env environment.Environment, rt *runtime.Runtime) error { fullEnv := env.Copy().Merge(rt.Environment)
for _, pattern := range i.Files {
--- a/tasks/noop.go Sun Dec 10 05:23:34 2023 -0600
+++ b/tasks/noop.go Mon Dec 11 23:01:51 2023 -0600
@@ -17,7 +17,7 @@
- log "github.com/sirupsen/logrus"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/runtime"
@@ -27,7 +27,7 @@
// Execute runs the noop task.
-func (n *Noop) Execute(name string, logger *log.Entry, env environment.Environment, rt *runtime.Runtime) error {
+func (n *Noop) Execute(name string, logger *slog.Logger, env environment.Environment, rt *runtime.Runtime) error {