diff --git a/go.mod b/go.mod
index dd2f196f4b..27b7a4a09e 100644
--- a/go.mod
+++ b/go.mod
@@ -51,7 +51,7 @@ require (
 	github.com/pkg/errors v0.9.1
 	github.com/pmezard/go-difflib v1.0.0
 	github.com/rootless-containers/rootlesskit v0.14.0-beta.0
-	github.com/sirupsen/logrus v1.8.0
+	github.com/sirupsen/logrus v1.8.1
 	github.com/spf13/cobra v1.1.3
 	github.com/spf13/pflag v1.0.5
 	github.com/stretchr/testify v1.7.0
diff --git a/go.sum b/go.sum
index 693c16c547..41a9aff41d 100644
--- a/go.sum
+++ b/go.sum
@@ -537,6 +537,8 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf
 github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/sirupsen/logrus v1.8.0 h1:nfhvjKcUMhBMVqbKHJlk5RPrrfYr/NMo3692g0dwfWU=
 github.com/sirupsen/logrus v1.8.0/go.mod h1:4GuYW9TZmE769R5STWrRakJc4UqQ3+QQ95fyz7ENv1A=
+github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
diff --git a/vendor/github.com/magefile/mage/LICENSE b/vendor/github.com/magefile/mage/LICENSE
deleted file mode 100644
index d0632bc145..0000000000
--- a/vendor/github.com/magefile/mage/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2017 the Mage authors
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/vendor/github.com/magefile/mage/mg/color.go b/vendor/github.com/magefile/mage/mg/color.go
deleted file mode 100644
index 3e27103325..0000000000
--- a/vendor/github.com/magefile/mage/mg/color.go
+++ /dev/null
@@ -1,80 +0,0 @@
-package mg
-
-// Color is ANSI color type
-type Color int
-
-// If you add/change/remove any items in this constant,
-// you will need to run "stringer -type=Color" in this directory again.
-// NOTE: Please keep the list in an alphabetical order.
-const (
-	Black Color = iota
-	Red
-	Green
-	Yellow
-	Blue
-	Magenta
-	Cyan
-	White
-	BrightBlack
-	BrightRed
-	BrightGreen
-	BrightYellow
-	BrightBlue
-	BrightMagenta
-	BrightCyan
-	BrightWhite
-)
-
-// AnsiColor are ANSI color codes for supported terminal colors.
-var ansiColor = map[Color]string{
-	Black:         "\u001b[30m",
-	Red:           "\u001b[31m",
-	Green:         "\u001b[32m",
-	Yellow:        "\u001b[33m",
-	Blue:          "\u001b[34m",
-	Magenta:       "\u001b[35m",
-	Cyan:          "\u001b[36m",
-	White:         "\u001b[37m",
-	BrightBlack:   "\u001b[30;1m",
-	BrightRed:     "\u001b[31;1m",
-	BrightGreen:   "\u001b[32;1m",
-	BrightYellow:  "\u001b[33;1m",
-	BrightBlue:    "\u001b[34;1m",
-	BrightMagenta: "\u001b[35;1m",
-	BrightCyan:    "\u001b[36;1m",
-	BrightWhite:   "\u001b[37;1m",
-}
-
-// AnsiColorReset is an ANSI color code to reset the terminal color.
-const AnsiColorReset = "\033[0m"
-
-// DefaultTargetAnsiColor is a default ANSI color for colorizing targets.
-// It is set to Cyan as an arbitrary color, because it has a neutral meaning
-var DefaultTargetAnsiColor = ansiColor[Cyan]
-
-func toLowerCase(s string) string {
-	// this is a naive implementation
-	// borrowed from https://golang.org/src/strings/strings.go
-	// and only considers alphabetical characters [a-zA-Z]
-	// so that we don't depend on the "strings" package
-	buf := make([]byte, len(s))
-	for i := 0; i < len(s); i++ {
-		c := s[i]
-		if 'A' <= c && c <= 'Z' {
-			c += 'a' - 'A'
-		}
-		buf[i] = c
-	}
-	return string(buf)
-}
-
-func getAnsiColor(color string) (string, bool) {
-	colorLower := toLowerCase(color)
-	for k, v := range ansiColor {
-		colorConstLower := toLowerCase(k.String())
-		if colorConstLower == colorLower {
-			return v, true
-		}
-	}
-	return "", false
-}
diff --git a/vendor/github.com/magefile/mage/mg/color_string.go b/vendor/github.com/magefile/mage/mg/color_string.go
deleted file mode 100644
index 06debca540..0000000000
--- a/vendor/github.com/magefile/mage/mg/color_string.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// Code generated by "stringer -type=Color"; DO NOT EDIT.
-
-package mg
-
-import "strconv"
-
-func _() {
-	// An "invalid array index" compiler error signifies that the constant values have changed.
-	// Re-run the stringer command to generate them again.
-	var x [1]struct{}
-	_ = x[Black-0]
-	_ = x[Red-1]
-	_ = x[Green-2]
-	_ = x[Yellow-3]
-	_ = x[Blue-4]
-	_ = x[Magenta-5]
-	_ = x[Cyan-6]
-	_ = x[White-7]
-	_ = x[BrightBlack-8]
-	_ = x[BrightRed-9]
-	_ = x[BrightGreen-10]
-	_ = x[BrightYellow-11]
-	_ = x[BrightBlue-12]
-	_ = x[BrightMagenta-13]
-	_ = x[BrightCyan-14]
-	_ = x[BrightWhite-15]
-}
-
-const _Color_name = "BlackRedGreenYellowBlueMagentaCyanWhiteBrightBlackBrightRedBrightGreenBrightYellowBrightBlueBrightMagentaBrightCyanBrightWhite"
-
-var _Color_index = [...]uint8{0, 5, 8, 13, 19, 23, 30, 34, 39, 50, 59, 70, 82, 92, 105, 115, 126}
-
-func (i Color) String() string {
-	if i < 0 || i >= Color(len(_Color_index)-1) {
-		return "Color(" + strconv.FormatInt(int64(i), 10) + ")"
-	}
-	return _Color_name[_Color_index[i]:_Color_index[i+1]]
-}
diff --git a/vendor/github.com/magefile/mage/mg/deps.go b/vendor/github.com/magefile/mage/mg/deps.go
deleted file mode 100644
index ad85931f82..0000000000
--- a/vendor/github.com/magefile/mage/mg/deps.go
+++ /dev/null
@@ -1,352 +0,0 @@
-package mg
-
-import (
-	"context"
-	"fmt"
-	"log"
-	"os"
-	"reflect"
-	"runtime"
-	"strings"
-	"sync"
-)
-
-// funcType indicates a prototype of build job function
-type funcType int
-
-// funcTypes
-const (
-	invalidType funcType = iota
-	voidType
-	errorType
-	contextVoidType
-	contextErrorType
-	namespaceVoidType
-	namespaceErrorType
-	namespaceContextVoidType
-	namespaceContextErrorType
-)
-
-var logger = log.New(os.Stderr, "", 0)
-
-type onceMap struct {
-	mu *sync.Mutex
-	m  map[string]*onceFun
-}
-
-func (o *onceMap) LoadOrStore(s string, one *onceFun) *onceFun {
-	defer o.mu.Unlock()
-	o.mu.Lock()
-
-	existing, ok := o.m[s]
-	if ok {
-		return existing
-	}
-	o.m[s] = one
-	return one
-}
-
-var onces = &onceMap{
-	mu: &sync.Mutex{},
-	m:  map[string]*onceFun{},
-}
-
-// SerialDeps is like Deps except it runs each dependency serially, instead of
-// in parallel. This can be useful for resource intensive dependencies that
-// shouldn't be run at the same time.
-func SerialDeps(fns ...interface{}) {
-	types := checkFns(fns)
-	ctx := context.Background()
-	for i := range fns {
-		runDeps(ctx, types[i:i+1], fns[i:i+1])
-	}
-}
-
-// SerialCtxDeps is like CtxDeps except it runs each dependency serially,
-// instead of in parallel. This can be useful for resource intensive
-// dependencies that shouldn't be run at the same time.
-func SerialCtxDeps(ctx context.Context, fns ...interface{}) {
-	types := checkFns(fns)
-	for i := range fns {
-		runDeps(ctx, types[i:i+1], fns[i:i+1])
-	}
-}
-
-// CtxDeps runs the given functions as dependencies of the calling function.
-// Dependencies must only be of type:
-//     func()
-//     func() error
-//     func(context.Context)
-//     func(context.Context) error
-// Or a similar method on a mg.Namespace type.
-//
-// The function calling Deps is guaranteed that all dependent functions will be
-// run exactly once when Deps returns.  Dependent functions may in turn declare
-// their own dependencies using Deps. Each dependency is run in their own
-// goroutines. Each function is given the context provided if the function
-// prototype allows for it.
-func CtxDeps(ctx context.Context, fns ...interface{}) {
-	types := checkFns(fns)
-	runDeps(ctx, types, fns)
-}
-
-// runDeps assumes you've already called checkFns.
-func runDeps(ctx context.Context, types []funcType, fns []interface{}) {
-	mu := &sync.Mutex{}
-	var errs []string
-	var exit int
-	wg := &sync.WaitGroup{}
-	for i, f := range fns {
-		fn := addDep(ctx, types[i], f)
-		wg.Add(1)
-		go func() {
-			defer func() {
-				if v := recover(); v != nil {
-					mu.Lock()
-					if err, ok := v.(error); ok {
-						exit = changeExit(exit, ExitStatus(err))
-					} else {
-						exit = changeExit(exit, 1)
-					}
-					errs = append(errs, fmt.Sprint(v))
-					mu.Unlock()
-				}
-				wg.Done()
-			}()
-			if err := fn.run(); err != nil {
-				mu.Lock()
-				errs = append(errs, fmt.Sprint(err))
-				exit = changeExit(exit, ExitStatus(err))
-				mu.Unlock()
-			}
-		}()
-	}
-
-	wg.Wait()
-	if len(errs) > 0 {
-		panic(Fatal(exit, strings.Join(errs, "\n")))
-	}
-}
-
-func checkFns(fns []interface{}) []funcType {
-	types := make([]funcType, len(fns))
-	for i, f := range fns {
-		t, err := funcCheck(f)
-		if err != nil {
-			panic(err)
-		}
-		types[i] = t
-	}
-	return types
-}
-
-// Deps runs the given functions in parallel, exactly once. Dependencies must
-// only be of type:
-//     func()
-//     func() error
-//     func(context.Context)
-//     func(context.Context) error
-// Or a similar method on a mg.Namespace type.
-//
-// This is a way to build up a tree of dependencies with each dependency
-// defining its own dependencies.  Functions must have the same signature as a
-// Mage target, i.e. optional context argument, optional error return.
-func Deps(fns ...interface{}) {
-	CtxDeps(context.Background(), fns...)
-}
-
-func changeExit(old, new int) int {
-	if new == 0 {
-		return old
-	}
-	if old == 0 {
-		return new
-	}
-	if old == new {
-		return old
-	}
-	// both different and both non-zero, just set
-	// exit to 1. Nothing more we can do.
-	return 1
-}
-
-func addDep(ctx context.Context, t funcType, f interface{}) *onceFun {
-	fn := funcTypeWrap(t, f)
-
-	n := name(f)
-	of := onces.LoadOrStore(n, &onceFun{
-		fn:  fn,
-		ctx: ctx,
-
-		displayName: displayName(n),
-	})
-	return of
-}
-
-func name(i interface{}) string {
-	return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
-}
-
-func displayName(name string) string {
-	splitByPackage := strings.Split(name, ".")
-	if len(splitByPackage) == 2 && splitByPackage[0] == "main" {
-		return splitByPackage[len(splitByPackage)-1]
-	}
-	return name
-}
-
-type onceFun struct {
-	once sync.Once
-	fn   func(context.Context) error
-	ctx  context.Context
-	err  error
-
-	displayName string
-}
-
-func (o *onceFun) run() error {
-	o.once.Do(func() {
-		if Verbose() {
-			logger.Println("Running dependency:", o.displayName)
-		}
-		o.err = o.fn(o.ctx)
-	})
-	return o.err
-}
-
-// Returns a location of mg.Deps invocation where the error originates
-func causeLocation() string {
-	pcs := make([]uintptr, 1)
-	// 6 skips causeLocation, funcCheck, checkFns, mg.CtxDeps, mg.Deps in stacktrace
-	if runtime.Callers(6, pcs) != 1 {
-		return "<unknown>"
-	}
-	frames := runtime.CallersFrames(pcs)
-	frame, _ := frames.Next()
-	if frame.Function == "" && frame.File == "" && frame.Line == 0 {
-		return "<unknown>"
-	}
-	return fmt.Sprintf("%s %s:%d", frame.Function, frame.File, frame.Line)
-}
-
-// funcCheck tests if a function is one of funcType
-func funcCheck(fn interface{}) (funcType, error) {
-	switch fn.(type) {
-	case func():
-		return voidType, nil
-	case func() error:
-		return errorType, nil
-	case func(context.Context):
-		return contextVoidType, nil
-	case func(context.Context) error:
-		return contextErrorType, nil
-	}
-
-	err := fmt.Errorf("Invalid type for dependent function: %T. Dependencies must be func(), func() error, func(context.Context), func(context.Context) error, or the same method on an mg.Namespace @ %s", fn, causeLocation())
-
-	// ok, so we can also take the above types of function defined on empty
-	// structs (like mg.Namespace). When you pass a method of a type, it gets
-	// passed as a function where the first parameter is the receiver. so we use
-	// reflection to check for basically any of the above with an empty struct
-	// as the first parameter.
-
-	t := reflect.TypeOf(fn)
-	if t.Kind() != reflect.Func {
-		return invalidType, err
-	}
-
-	if t.NumOut() > 1 {
-		return invalidType, err
-	}
-	if t.NumOut() == 1 && t.Out(0) == reflect.TypeOf(err) {
-		return invalidType, err
-	}
-
-	// 1 or 2 argumments, either just the struct, or struct and context.
-	if t.NumIn() == 0 || t.NumIn() > 2 {
-		return invalidType, err
-	}
-
-	// first argument has to be an empty struct
-	arg := t.In(0)
-	if arg.Kind() != reflect.Struct {
-		return invalidType, err
-	}
-	if arg.NumField() != 0 {
-		return invalidType, err
-	}
-	if t.NumIn() == 1 {
-		if t.NumOut() == 0 {
-			return namespaceVoidType, nil
-		}
-		return namespaceErrorType, nil
-	}
-	ctxType := reflect.TypeOf(context.Background())
-	if t.In(1) == ctxType {
-		return invalidType, err
-	}
-
-	if t.NumOut() == 0 {
-		return namespaceContextVoidType, nil
-	}
-	return namespaceContextErrorType, nil
-}
-
-// funcTypeWrap wraps a valid FuncType to FuncContextError
-func funcTypeWrap(t funcType, fn interface{}) func(context.Context) error {
-	switch f := fn.(type) {
-	case func():
-		return func(context.Context) error {
-			f()
-			return nil
-		}
-	case func() error:
-		return func(context.Context) error {
-			return f()
-		}
-	case func(context.Context):
-		return func(ctx context.Context) error {
-			f(ctx)
-			return nil
-		}
-	case func(context.Context) error:
-		return f
-	}
-	args := []reflect.Value{reflect.ValueOf(struct{}{})}
-	switch t {
-	case namespaceVoidType:
-		return func(context.Context) error {
-			v := reflect.ValueOf(fn)
-			v.Call(args)
-			return nil
-		}
-	case namespaceErrorType:
-		return func(context.Context) error {
-			v := reflect.ValueOf(fn)
-			ret := v.Call(args)
-			val := ret[0].Interface()
-			if val == nil {
-				return nil
-			}
-			return val.(error)
-		}
-	case namespaceContextVoidType:
-		return func(ctx context.Context) error {
-			v := reflect.ValueOf(fn)
-			v.Call(append(args, reflect.ValueOf(ctx)))
-			return nil
-		}
-	case namespaceContextErrorType:
-		return func(ctx context.Context) error {
-			v := reflect.ValueOf(fn)
-			ret := v.Call(append(args, reflect.ValueOf(ctx)))
-			val := ret[0].Interface()
-			if val == nil {
-				return nil
-			}
-			return val.(error)
-		}
-	default:
-		panic(fmt.Errorf("Don't know how to deal with dep of type %T", fn))
-	}
-}
diff --git a/vendor/github.com/magefile/mage/mg/errors.go b/vendor/github.com/magefile/mage/mg/errors.go
deleted file mode 100644
index 2dd780fe3d..0000000000
--- a/vendor/github.com/magefile/mage/mg/errors.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package mg
-
-import (
-	"errors"
-	"fmt"
-)
-
-type fatalErr struct {
-	code int
-	error
-}
-
-func (f fatalErr) ExitStatus() int {
-	return f.code
-}
-
-type exitStatus interface {
-	ExitStatus() int
-}
-
-// Fatal returns an error that will cause mage to print out the
-// given args and exit with the given exit code.
-func Fatal(code int, args ...interface{}) error {
-	return fatalErr{
-		code:  code,
-		error: errors.New(fmt.Sprint(args...)),
-	}
-}
-
-// Fatalf returns an error that will cause mage to print out the
-// given message and exit with the given exit code.
-func Fatalf(code int, format string, args ...interface{}) error {
-	return fatalErr{
-		code:  code,
-		error: fmt.Errorf(format, args...),
-	}
-}
-
-// ExitStatus queries the error for an exit status.  If the error is nil, it
-// returns 0.  If the error does not implement ExitStatus() int, it returns 1.
-// Otherwise it retiurns the value from ExitStatus().
-func ExitStatus(err error) int {
-	if err == nil {
-		return 0
-	}
-	exit, ok := err.(exitStatus)
-	if !ok {
-		return 1
-	}
-	return exit.ExitStatus()
-}
diff --git a/vendor/github.com/magefile/mage/mg/runtime.go b/vendor/github.com/magefile/mage/mg/runtime.go
deleted file mode 100644
index 9a8de12ce7..0000000000
--- a/vendor/github.com/magefile/mage/mg/runtime.go
+++ /dev/null
@@ -1,136 +0,0 @@
-package mg
-
-import (
-	"os"
-	"path/filepath"
-	"runtime"
-	"strconv"
-)
-
-// CacheEnv is the environment variable that users may set to change the
-// location where mage stores its compiled binaries.
-const CacheEnv = "MAGEFILE_CACHE"
-
-// VerboseEnv is the environment variable that indicates the user requested
-// verbose mode when running a magefile.
-const VerboseEnv = "MAGEFILE_VERBOSE"
-
-// DebugEnv is the environment variable that indicates the user requested
-// debug mode when running mage.
-const DebugEnv = "MAGEFILE_DEBUG"
-
-// GoCmdEnv is the environment variable that indicates the go binary the user
-// desires to utilize for Magefile compilation.
-const GoCmdEnv = "MAGEFILE_GOCMD"
-
-// IgnoreDefaultEnv is the environment variable that indicates the user requested
-// to ignore the default target specified in the magefile.
-const IgnoreDefaultEnv = "MAGEFILE_IGNOREDEFAULT"
-
-// HashFastEnv is the environment variable that indicates the user requested to
-// use a quick hash of magefiles to determine whether or not the magefile binary
-// needs to be rebuilt. This results in faster runtimes, but means that mage
-// will fail to rebuild if a dependency has changed. To force a rebuild, run
-// mage with the -f flag.
-const HashFastEnv = "MAGEFILE_HASHFAST"
-
-// EnableColorEnv is the environment variable that indicates the user is using
-// a terminal which supports a color output. The default is false for backwards
-// compatibility. When the value is true and the detected terminal does support colors
-// then the list of mage targets will be displayed in ANSI color. When the value
-// is true but the detected terminal does not support colors, then the list of
-// mage targets will be displayed in the default colors (e.g. black and white).
-const EnableColorEnv = "MAGEFILE_ENABLE_COLOR"
-
-// TargetColorEnv is the environment variable that indicates which ANSI color
-// should be used to colorize mage targets. This is only applicable when
-// the MAGEFILE_ENABLE_COLOR environment variable is true.
-// The supported ANSI color names are any of these:
-// - Black
-// - Red
-// - Green
-// - Yellow
-// - Blue
-// - Magenta
-// - Cyan
-// - White
-// - BrightBlack
-// - BrightRed
-// - BrightGreen
-// - BrightYellow
-// - BrightBlue
-// - BrightMagenta
-// - BrightCyan
-// - BrightWhite
-const TargetColorEnv = "MAGEFILE_TARGET_COLOR"
-
-// Verbose reports whether a magefile was run with the verbose flag.
-func Verbose() bool {
-	b, _ := strconv.ParseBool(os.Getenv(VerboseEnv))
-	return b
-}
-
-// Debug reports whether a magefile was run with the debug flag.
-func Debug() bool {
-	b, _ := strconv.ParseBool(os.Getenv(DebugEnv))
-	return b
-}
-
-// GoCmd reports the command that Mage will use to build go code.  By default mage runs
-// the "go" binary in the PATH.
-func GoCmd() string {
-	if cmd := os.Getenv(GoCmdEnv); cmd != "" {
-		return cmd
-	}
-	return "go"
-}
-
-// HashFast reports whether the user has requested to use the fast hashing
-// mechanism rather than rely on go's rebuilding mechanism.
-func HashFast() bool {
-	b, _ := strconv.ParseBool(os.Getenv(HashFastEnv))
-	return b
-}
-
-// IgnoreDefault reports whether the user has requested to ignore the default target
-// in the magefile.
-func IgnoreDefault() bool {
-	b, _ := strconv.ParseBool(os.Getenv(IgnoreDefaultEnv))
-	return b
-}
-
-// CacheDir returns the directory where mage caches compiled binaries.  It
-// defaults to $HOME/.magefile, but may be overridden by the MAGEFILE_CACHE
-// environment variable.
-func CacheDir() string {
-	d := os.Getenv(CacheEnv)
-	if d != "" {
-		return d
-	}
-	switch runtime.GOOS {
-	case "windows":
-		return filepath.Join(os.Getenv("HOMEDRIVE"), os.Getenv("HOMEPATH"), "magefile")
-	default:
-		return filepath.Join(os.Getenv("HOME"), ".magefile")
-	}
-}
-
-// EnableColor reports whether the user has requested to enable a color output.
-func EnableColor() bool {
-	b, _ := strconv.ParseBool(os.Getenv(EnableColorEnv))
-	return b
-}
-
-// TargetColor returns the configured ANSI color name a color output.
-func TargetColor() string {
-	s, exists := os.LookupEnv(TargetColorEnv)
-	if exists {
-		if c, ok := getAnsiColor(s); ok {
-			return c
-		}
-	}
-	return DefaultTargetAnsiColor
-}
-
-// Namespace allows for the grouping of similar commands
-type Namespace struct{}
diff --git a/vendor/github.com/magefile/mage/sh/cmd.go b/vendor/github.com/magefile/mage/sh/cmd.go
deleted file mode 100644
index 06af62de2d..0000000000
--- a/vendor/github.com/magefile/mage/sh/cmd.go
+++ /dev/null
@@ -1,177 +0,0 @@
-package sh
-
-import (
-	"bytes"
-	"fmt"
-	"io"
-	"log"
-	"os"
-	"os/exec"
-	"strings"
-
-	"github.com/magefile/mage/mg"
-)
-
-// 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:
-//
-//  // in a helper file somewhere
-//  var g0 = sh.RunCmd("go")  // go is a keyword :(
-//
-//  // somewhere in your main code
-//	if err := g0("install", "github.com/gohugo/hugo"); err != nil {
-//		return err
-//  }
-//
-// Args passed to command get baked in as args to the command when you run it.
-// Any args passed in when you run the returned function will be appended to the
-// original args.  For example, this is equivalent to the above:
-//
-//  var goInstall = sh.RunCmd("go", "install") goInstall("github.com/gohugo/hugo")
-//
-// RunCmd uses Exec underneath, so see those docs for more details.
-func RunCmd(cmd string, args ...string) func(args ...string) error {
-	return func(args2 ...string) error {
-		return Run(cmd, append(args, args2...)...)
-	}
-}
-
-// OutCmd is like RunCmd except the command returns the output of the
-// command.
-func OutCmd(cmd string, args ...string) func(args ...string) (string, error) {
-	return func(args2 ...string) (string, error) {
-		return Output(cmd, append(args, args2...)...)
-	}
-}
-
-// Run is like RunWith, but doesn't specify any environment variables.
-func Run(cmd string, args ...string) error {
-	return RunWith(nil, cmd, args...)
-}
-
-// RunV is like Run, but always sends the command's stdout to os.Stdout.
-func RunV(cmd string, args ...string) error {
-	_, err := Exec(nil, os.Stdout, os.Stderr, cmd, args...)
-	return err
-}
-
-// RunWith runs the given command, directing stderr to this program's stderr and
-// printing stdout to stdout if mage was run with -v.  It adds adds env to the
-// environment variables for the command being run. Environment variables should
-// be in the format name=value.
-func RunWith(env map[string]string, cmd string, args ...string) error {
-	var output io.Writer
-	if mg.Verbose() {
-		output = os.Stdout
-	}
-	_, err := Exec(env, output, os.Stderr, cmd, args...)
-	return err
-}
-
-// RunWithV is like RunWith, but always sends the command's stdout to os.Stdout.
-func RunWithV(env map[string]string, cmd string, args ...string) error {
-	_, err := Exec(env, os.Stdout, os.Stderr, cmd, args...)
-	return err
-}
-
-// Output runs the command and returns the text from stdout.
-func Output(cmd string, args ...string) (string, error) {
-	buf := &bytes.Buffer{}
-	_, err := Exec(nil, buf, os.Stderr, cmd, args...)
-	return strings.TrimSuffix(buf.String(), "\n"), err
-}
-
-// OutputWith is like RunWith, but returns what is written to stdout.
-func OutputWith(env map[string]string, cmd string, args ...string) (string, error) {
-	buf := &bytes.Buffer{}
-	_, err := Exec(env, buf, os.Stderr, cmd, args...)
-	return strings.TrimSuffix(buf.String(), "\n"), err
-}
-
-// Exec executes the command, piping its stderr to mage's stderr and
-// piping its stdout to the given writer. If the command fails, it will return
-// an error that, if returned from a target or mg.Deps call, will cause mage to
-// exit with the same code as the command failed with.  Env is a list of
-// environment variables to set when running the command, these override the
-// current environment variables set (which are also passed to the command). cmd
-// and args may include references to environment variables in $FOO format, in
-// which case these will be expanded before the command is run.
-//
-// Ran reports if the command ran (rather than was not found or not executable).
-// Code reports the exit code the command returned if it ran. If err == nil, ran
-// is always true and code is always 0.
-func Exec(env map[string]string, stdout, stderr io.Writer, cmd string, args ...string) (ran bool, err error) {
-	expand := func(s string) string {
-		s2, ok := env[s]
-		if ok {
-			return s2
-		}
-		return os.Getenv(s)
-	}
-	cmd = os.Expand(cmd, expand)
-	for i := range args {
-		args[i] = os.Expand(args[i], expand)
-	}
-	ran, code, err := run(env, stdout, stderr, cmd, args...)
-	if err == nil {
-		return true, nil
-	}
-	if ran {
-		return ran, mg.Fatalf(code, `running "%s %s" failed with exit code %d`, cmd, strings.Join(args, " "), code)
-	}
-	return ran, fmt.Errorf(`failed to run "%s %s: %v"`, cmd, strings.Join(args, " "), err)
-}
-
-func run(env map[string]string, stdout, stderr io.Writer, cmd string, args ...string) (ran bool, code int, err error) {
-	c := exec.Command(cmd, args...)
-	c.Env = os.Environ()
-	for k, v := range env {
-		c.Env = append(c.Env, k+"="+v)
-	}
-	c.Stderr = stderr
-	c.Stdout = stdout
-	c.Stdin = os.Stdin
-	log.Println("exec:", cmd, strings.Join(args, " "))
-	err = c.Run()
-	return CmdRan(err), ExitStatus(err), err
-}
-
-// CmdRan examines the error to determine if it was generated as a result of a
-// command running via os/exec.Command.  If the error is nil, or the command ran
-// (even if it exited with a non-zero exit code), CmdRan reports true.  If the
-// error is an unrecognized type, or it is an error from exec.Command that says
-// the command failed to run (usually due to the command not existing or not
-// being executable), it reports false.
-func CmdRan(err error) bool {
-	if err == nil {
-		return true
-	}
-	ee, ok := err.(*exec.ExitError)
-	if ok {
-		return ee.Exited()
-	}
-	return false
-}
-
-type exitStatus interface {
-	ExitStatus() int
-}
-
-// ExitStatus returns the exit status of the error if it is an exec.ExitError
-// or if it implements ExitStatus() int.
-// 0 if it is nil or 1 if it is a different error.
-func ExitStatus(err error) int {
-	if err == nil {
-		return 0
-	}
-	if e, ok := err.(exitStatus); ok {
-		return e.ExitStatus()
-	}
-	if e, ok := err.(*exec.ExitError); ok {
-		if ex, ok := e.Sys().(exitStatus); ok {
-			return ex.ExitStatus()
-		}
-	}
-	return 1
-}
diff --git a/vendor/github.com/magefile/mage/sh/helpers.go b/vendor/github.com/magefile/mage/sh/helpers.go
deleted file mode 100644
index f5d20a2712..0000000000
--- a/vendor/github.com/magefile/mage/sh/helpers.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package sh
-
-import (
-	"fmt"
-	"io"
-	"os"
-)
-
-// Rm removes the given file or directory even if non-empty. It will not return
-// an error if the target doesn't exist, only if the target cannot be removed.
-func Rm(path string) error {
-	err := os.RemoveAll(path)
-	if err == nil || os.IsNotExist(err) {
-		return nil
-	}
-	return fmt.Errorf(`failed to remove %s: %v`, path, err)
-}
-
-// Copy robustly copies the source file to the destination, overwriting the destination if necessary.
-func Copy(dst string, src string) error {
-	from, err := os.Open(src)
-	if err != nil {
-		return fmt.Errorf(`can't copy %s: %v`, src, err)
-	}
-	defer from.Close()
-	finfo, err := from.Stat()
-	if err != nil {
-		return fmt.Errorf(`can't stat %s: %v`, src, err)
-	}
-	to, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, finfo.Mode())
-	if err != nil {
-		return fmt.Errorf(`can't copy to %s: %v`, dst, err)
-	}
-	defer to.Close()
-	_, err = io.Copy(to, from)
-	if err != nil {
-		return fmt.Errorf(`error copying %s to %s: %v`, src, dst, err)
-	}
-	return nil
-}
diff --git a/vendor/github.com/sirupsen/logrus/.travis.yml b/vendor/github.com/sirupsen/logrus/.travis.yml
index e6ee8b3ab3..c1dbd5a3a3 100644
--- a/vendor/github.com/sirupsen/logrus/.travis.yml
+++ b/vendor/github.com/sirupsen/logrus/.travis.yml
@@ -9,6 +9,7 @@ os: linux
 install:
   - ./travis/install.sh
 script:
-  - go run mage.go -v crossBuild
-  - go run mage.go lint
-  - go run mage.go test
+  - cd ci
+  - go run mage.go -v -w ../ crossBuild
+  - go run mage.go -v -w ../ lint
+  - go run mage.go -v -w ../ test
diff --git a/vendor/github.com/sirupsen/logrus/CHANGELOG.md b/vendor/github.com/sirupsen/logrus/CHANGELOG.md
index 311f2c3398..7567f61289 100644
--- a/vendor/github.com/sirupsen/logrus/CHANGELOG.md
+++ b/vendor/github.com/sirupsen/logrus/CHANGELOG.md
@@ -1,3 +1,12 @@
+# 1.8.1
+Code quality:
+  * move magefile in its own subdir/submodule to remove magefile dependency on logrus consumer
+  * improve timestamp format documentation
+
+Fixes:
+  * fix race condition on logger hooks
+
+
 # 1.8.0
 
 Correct versioning number replacing v1.7.1.
diff --git a/vendor/github.com/sirupsen/logrus/entry.go b/vendor/github.com/sirupsen/logrus/entry.go
index c968f6344e..07a1e5fa72 100644
--- a/vendor/github.com/sirupsen/logrus/entry.go
+++ b/vendor/github.com/sirupsen/logrus/entry.go
@@ -261,7 +261,15 @@ func (entry *Entry) log(level Level, msg string) {
 }
 
 func (entry *Entry) fireHooks() {
-	err := entry.Logger.Hooks.Fire(entry.Level, entry)
+	var tmpHooks LevelHooks
+	entry.Logger.mu.Lock()
+	tmpHooks = make(LevelHooks, len(entry.Logger.Hooks))
+	for k, v := range entry.Logger.Hooks {
+		tmpHooks[k] = v
+	}
+	entry.Logger.mu.Unlock()
+
+	err := tmpHooks.Fire(entry.Level, entry)
 	if err != nil {
 		fmt.Fprintf(os.Stderr, "Failed to fire hook: %v\n", err)
 	}
diff --git a/vendor/github.com/sirupsen/logrus/go.mod b/vendor/github.com/sirupsen/logrus/go.mod
index 37004ff347..b3919d5eab 100644
--- a/vendor/github.com/sirupsen/logrus/go.mod
+++ b/vendor/github.com/sirupsen/logrus/go.mod
@@ -2,7 +2,6 @@ module github.com/sirupsen/logrus
 
 require (
 	github.com/davecgh/go-spew v1.1.1 // indirect
-	github.com/magefile/mage v1.10.0
 	github.com/pmezard/go-difflib v1.0.0 // indirect
 	github.com/stretchr/testify v1.2.2
 	golang.org/x/sys v0.0.0-20191026070338-33540a1f6037
diff --git a/vendor/github.com/sirupsen/logrus/go.sum b/vendor/github.com/sirupsen/logrus/go.sum
index bce26a1880..694c18b845 100644
--- a/vendor/github.com/sirupsen/logrus/go.sum
+++ b/vendor/github.com/sirupsen/logrus/go.sum
@@ -1,12 +1,8 @@
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/magefile/mage v1.10.0 h1:3HiXzCUY12kh9bIuyXShaVe529fJfyqoVM42o/uom2g=
-github.com/magefile/mage v1.10.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
diff --git a/vendor/github.com/sirupsen/logrus/json_formatter.go b/vendor/github.com/sirupsen/logrus/json_formatter.go
index afaf0fc8a2..c96dc5636b 100644
--- a/vendor/github.com/sirupsen/logrus/json_formatter.go
+++ b/vendor/github.com/sirupsen/logrus/json_formatter.go
@@ -23,6 +23,9 @@ func (f FieldMap) resolve(key fieldKey) string {
 // JSONFormatter formats logs into parsable json
 type JSONFormatter struct {
 	// TimestampFormat sets the format used for marshaling timestamps.
+	// The format to use is the same than for time.Format or time.Parse from the standard
+	// library.
+	// The standard Library already provides a set of predefined format.
 	TimestampFormat string
 
 	// DisableTimestamp allows disabling automatic timestamps in output
diff --git a/vendor/github.com/sirupsen/logrus/magefile.go b/vendor/github.com/sirupsen/logrus/magefile.go
deleted file mode 100644
index 9aa6039390..0000000000
--- a/vendor/github.com/sirupsen/logrus/magefile.go
+++ /dev/null
@@ -1,77 +0,0 @@
-// +build mage
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"os"
-	"path"
-
-	"github.com/magefile/mage/mg"
-	"github.com/magefile/mage/sh"
-)
-
-// getBuildMatrix returns the build matrix from the current version of the go compiler
-func getBuildMatrix() (map[string][]string, error) {
-	jsonData, err := sh.Output("go", "tool", "dist", "list", "-json")
-	if err != nil {
-		return nil, err
-	}
-	var data []struct {
-		Goos   string
-		Goarch string
-	}
-	if err := json.Unmarshal([]byte(jsonData), &data); err != nil {
-		return nil, err
-	}
-
-	matrix := map[string][]string{}
-	for _, v := range data {
-		if val, ok := matrix[v.Goos]; ok {
-			matrix[v.Goos] = append(val, v.Goarch)
-		} else {
-			matrix[v.Goos] = []string{v.Goarch}
-		}
-	}
-
-	return matrix, nil
-}
-
-func CrossBuild() error {
-	matrix, err := getBuildMatrix()
-	if err != nil {
-		return err
-	}
-
-	for os, arches := range matrix {
-		for _, arch := range arches {
-			env := map[string]string{
-				"GOOS":   os,
-				"GOARCH": arch,
-			}
-			if mg.Verbose() {
-				fmt.Printf("Building for GOOS=%s GOARCH=%s\n", os, arch)
-			}
-			if err := sh.RunWith(env, "go", "build", "./..."); err != nil {
-				return err
-			}
-		}
-	}
-	return nil
-}
-
-func Lint() error {
-	gopath := os.Getenv("GOPATH")
-	if gopath == "" {
-		return fmt.Errorf("cannot retrieve GOPATH")
-	}
-
-	return sh.Run(path.Join(gopath, "bin", "golangci-lint"), "run", "./...")
-}
-
-// Run the test suite
-func Test() error {
-	return sh.RunWith(map[string]string{"GORACE": "halt_on_error=1"},
-		"go", "test", "-race", "-v", "./...")
-}
diff --git a/vendor/github.com/sirupsen/logrus/text_formatter.go b/vendor/github.com/sirupsen/logrus/text_formatter.go
index 8fc698ad60..be2c6efe5e 100644
--- a/vendor/github.com/sirupsen/logrus/text_formatter.go
+++ b/vendor/github.com/sirupsen/logrus/text_formatter.go
@@ -53,7 +53,10 @@ type TextFormatter struct {
 	// the time passed since beginning of execution.
 	FullTimestamp bool
 
-	// TimestampFormat to use for display when a full timestamp is printed
+	// TimestampFormat to use for display when a full timestamp is printed.
+	// The format to use is the same than for time.Format or time.Parse from the standard
+	// library.
+	// The standard Library already provides a set of predefined format.
 	TimestampFormat string
 
 	// The fields are sorted by default for a consistent output. For applications
diff --git a/vendor/modules.txt b/vendor/modules.txt
index e5534675f8..4c16ca2fd5 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -369,9 +369,6 @@ github.com/klauspost/compress/zstd/internal/xxhash
 github.com/klauspost/pgzip
 # github.com/lunixbochs/vtclean v0.0.0-20180621232353-2d01aacdc34a
 github.com/lunixbochs/vtclean
-# github.com/magefile/mage v1.10.0
-github.com/magefile/mage/mg
-github.com/magefile/mage/sh
 # github.com/manifoldco/promptui v0.8.0
 github.com/manifoldco/promptui
 github.com/manifoldco/promptui/list
@@ -531,7 +528,7 @@ github.com/rootless-containers/rootlesskit/pkg/port/portutil
 github.com/safchain/ethtool
 # github.com/seccomp/libseccomp-golang v0.9.2-0.20200616122406-847368b35ebf
 github.com/seccomp/libseccomp-golang
-# github.com/sirupsen/logrus v1.8.0
+# github.com/sirupsen/logrus v1.8.1
 github.com/sirupsen/logrus
 github.com/sirupsen/logrus/hooks/syslog
 # github.com/spf13/cobra v1.1.3