Repository: tetratelabs/getenvoy (go)

Issue:
Remove progress bar or add `--no-progress` option to remove console clutter
**Is your feature request related to a problem? Please describe.**

We added a progress bar feature, but this is really bad for automation as it fills console output with the incremental steps.

ex.
```
=== RUN   TestGetEnvoyUse/not_yet_installed
downloading https://dl.getenvoy.io/public/raw/files/getenvoy-envoy-1.18.3.p0.g98c1c9e-1p77.gb76c773-darwin-release-x86_64.tar.xz



   1% |                                        |  [0s:4s]
                                                         

   2% |                                        |  [0s:3s]
                                                         

   3% |█                                       |  [0s:3s]
                                                         

   4% |█                                       |  [0s:3s]
                                                         

   5% |██                                      |  [0s:3s]
                                                         

   6% |██                                      |  [0s:3s]
                                                         

   7% |██                                      |  [0s:3s]
                                                         

   8% |███                                     |  [0s:3s]
                                                         

   9% |███                                     |  [0s:3s]
                                                         

  10% |████                                    |  [0s:3s]
                                                         

  11% |████                                    |  [0s:3s]
                                                         

  12% |████                                    |  [0s:3s]
                                                         

  13% |█████                                   |  [0s:3s]
                                                         

  14% |█████                                   |  [0s:3s]
                                                         

  15% |██████                                  |  [2s:6s]
                                                         

  16% |██████                                  |  [2s:6s]
                                                         

  17% |██████                                  |  [2s:6s]
                                                         

  18% |███████                                 |  [2s:6s]
                                                         

  19% |███████                                 |  [2s:6s]
                                                         

  20% |████████                                |  [2s:6s]
                                                         

  21% |████████                                |  [2s:6s]
                                                         

  22% |████████                                |  [2s:5s]
                                                         

  23% |█████████                               |  [2s:5s]
                                                         

  24% |█████████                               |  [2s:5s]
                                                         

  25% |██████████                              |  [2s:5s]
                                                         

  26% |██████████                              |  [2s:4s]
                                                         

  27% |██████████                              |  [2s:4s]
                                                         

  28% |███████████                             |  [2s:4s]
                                                         

  29% |███████████                             |  [2s:4s]
                                                         

  30% |████████████                            |  [3s:4s]
                                                         

  31% |████████████                            |  [3s:4s]
                                                         

  32% |████████████                            |  [3s:4s]
                                                         

  33% |█████████████                           |  [3s:4s]
                                                         

  34% |█████████████                           |  [3s:4s]
                                                         

  35% |██████████████                          |  [3s:4s]
                                                         

  36% |██████████████                          |  [3s:4s]
                                                         

  37% |██████████████                          |  [3s:4s]
                                                         

  38% |███████████████                         |  [3s:4s]
                                                         

  39% |███████████████                         |  [3s:4s]
                                                         

  40% |████████████████                        |  [3s:4s]
                                                         

  41% |████████████████                        |  [3s:3s]
                                                         

  42% |████████████████                        |  [3s:3s]
                                                         

  43% |█████████████████                       |  [4s:3s]
                                                         

  44% |█████████████████                       |  [4s:3s]
                                                         

  45% |██████████████████                      |  [4s:3s]
                                                         

  46% |██████████████████                      |  [4s:3s]
                                                         

  47% |██████████████████                      |  [4s:3s]
                                                         

  48% |███████████████████                     |  [4s:3s]
                                                         

  49% |███████████████████                     |  [4s:3s]
                                                         

  50% |████████████████████                    |  [4s:3s]
                                                         

  51% |████████████████████                    |  [4s:3s]
                                                         

  52% |████████████████████                    |  [4s:3s]
                                                         

  53% |█████████████████████                   |  [4s:3s]
                                                         

  54% |█████████████████████                   |  [4s:3s]
                                                         

  55% |██████████████████████                  |  [4s:3s]
                                                         

  56% |██████████████████████                  |  [4s:2s]
                                                         

  57% |██████████████████████                  |  [4s:2s]
                                                         

  58% |███████████████████████                 |  [4s:2s]
                                                         

  59% |███████████████████████                 |  [4s:2s]
                                                         

  60% |████████████████████████                |  [4s:2s]
                                                         

  61% |████████████████████████                |  [4s:2s]
                                                         

  62% |████████████████████████                |  [5s:2s]
                                                         

  63% |█████████████████████████               |  [5s:2s]
                                                         

  64% |█████████████████████████               |  [5s:2s]
                                                         

  65% |██████████████████████████              |  [5s:2s]
                                                         

  66% |██████████████████████████              |  [5s:2s]
                                                         

  67% |██████████████████████████              |  [5s:2s]
                                                         

  68% |███████████████████████████             |  [5s:2s]
                                                         

  69% |███████████████████████████             |  [5s:1s]
                                                         

  70% |████████████████████████████            |  [5s:1s]
                                                         

  71% |████████████████████████████            |  [5s:1s]
                                                         

  72% |████████████████████████████            |  [5s:1s]
                                                         

  73% |█████████████████████████████           |  [5s:1s]
                                                         

  74% |█████████████████████████████           |  [5s:1s]
                                                         

  75% |██████████████████████████████          |  [5s:1s]
                                                         

  76% |██████████████████████████████          |  [5s:1s]
                                                         

  77% |██████████████████████████████          |  [5s:1s]
                                                         

  78% |███████████████████████████████         |  [5s:1s]
                                                         

  79% |███████████████████████████████         |  [5s:1s]
                                                         

  80% |████████████████████████████████        |  [5s:1s]
                                                         

  81% |████████████████████████████████        |  [5s:1s]
                                                         

  82% |████████████████████████████████        |  [5s:1s]
                                                         

  83% |█████████████████████████████████       |  [5s:0s]
                                                         

  84% |█████████████████████████████████       |  [6s:0s]
                                                         

  85% |██████████████████████████████████      |  [6s:0s]
                                                         

  86% |██████████████████████████████████      |  [6s:0s]
                                                         

  87% |██████████████████████████████████      |  [6s:0s]
                                                         

  88% |███████████████████████████████████     |  [6s:0s]
                                                         

  89% |███████████████████████████████████     |  [6s:0s]
                                                         

  90% |████████████████████████████████████    |  [6s:0s]
                                                         

  91% |████████████████████████████████████    |  [6s:0s]
                                                         

  92% |████████████████████████████████████    |  [6s:0s]
                                                         

  93% |█████████████████████████████████████   |  [6s:0s]
                                                         

  94% |█████████████████████████████████████   |  [6s:0s]
                                                         

  95% |██████████████████████████████████████  |  [6s:0s]
                                                         

  96% |██████████████████████████████████████  |  [6s:0s]
                                                         

  97% |██████████████████████████████████████  |  [6s:0s]
                                                         

  98% |███████████████████████████████████████ |  [6s:0s]
                                                         

  99% |███████████████████████████████████████ |  [6s:0s]
                                                         

 100% |████████████████████████████████████████| 
```


**Describe the solution you'd like**
We can do one of the following:

* remove the progress bar
  * same as `pyenv install`
  * reduces code, tests, help docs and binary size
  * allows tests to strictly test output. right now, the progress bar forces us into fuzzy.
  * simpler to reason with as both `use` and `run` can implicitly download
  * removes the worry if progress bar works on windows or not
  * doesn't give progress though

* add `--no-progress` flag
  * same as `nvm install --no-progress ...`
  * more code and tests
  * needs to be global or repeated between `use` and `run`
  * allows progress bar

**Describe alternatives you've considered**
`-q` but the primary goal is removing progress bar clutter. We still want to know output like the URL being downloaded.

**Additional context**
Add any other context or screenshots about the feature request here.


Pull request:
Removes progress bar
This removes the download progress bar. Before we added the download
URL, there was no feedback at all, so the progress bar was more helpful
than harmful. Now that we log that we are downloading, we can consider
removing the progress bar.

Pros
* same as pyenv install
* reduces code, tests, and binary size (~130k)
* allows tests to strictly test output
* removes the worry if progress bar works on windows or not

Cons
* Envoy can be 5-10MB, on a really slow network progress might be nice.
* This existed before and so is a change of behavior

Fixes #254

Patch:
diff --git a/go.mod b/go.mod
index b4660db..6ac3d2d 100644
--- a/go.mod
+++ b/go.mod
@@ -6,15 +6,11 @@ go 1.16
 require (
 	github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 // indirect
 	github.com/go-ole/go-ole v1.2.5 // indirect
-	github.com/mattn/go-runewidth v0.0.12 // indirect
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
-	github.com/schollz/progressbar/v3 v3.8.0
 	github.com/shirou/gopsutil/v3 v3.21.4
 	github.com/stretchr/testify v1.7.0
 	github.com/tklauser/go-sysconf v0.3.5 // indirect
 	github.com/ulikunitz/xz v0.5.10
 	github.com/urfave/cli/v2 v2.3.0
-	golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf // indirect
 	golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect
-	golang.org/x/term v0.0.0-20210503060354-a79de5458b56 // indirect
 )
diff --git a/go.sum b/go.sum
index b2d4cea..af72d08 100644
--- a/go.sum
+++ b/go.sum
@@ -4,34 +4,20 @@ github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 h1:5sXbqlSomvdjl
 github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-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/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
 github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY=
 github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
-github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
-github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
-github.com/mattn/go-runewidth v0.0.12 h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxmAOow=
-github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
-github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
-github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
 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/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
-github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/schollz/progressbar/v3 v3.8.0 h1:BKyefEMgFBDbo+JaeqHcm/9QdSj8qG8sUY+6UppGpnw=
-github.com/schollz/progressbar/v3 v3.8.0/go.mod h1:Y9mmL2knZj3LUaBDyBEzFdPrymIr08hnlFMZmfxwbx4=
 github.com/shirou/gopsutil/v3 v3.21.4 h1:XB/+p+kVnyYLuPHCfa99lxz2aJyvVhnyd+FxZqH/k7M=
 github.com/shirou/gopsutil/v3 v3.21.4/go.mod h1:ghfMypLDrFSWN2c9cDYFLHyynQ+QUht0cv/18ZqVczw=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
@@ -45,30 +31,11 @@ github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8=
 github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
 github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
 github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
-golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o=
-golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210223095934-7937bea0104d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210503060354-a79de5458b56 h1:b8jxX3zqjpqb2LklXPzKSGJhzyxCOZSz8ncv8Nv+y7w=
-golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/internal/envoy/install.go b/internal/envoy/install.go
index 4392136..1d40d49 100644
--- a/internal/envoy/install.go
+++ b/internal/envoy/install.go
@@ -16,14 +16,11 @@ package envoy
 
 import (
 	"fmt"
-	"io"
 	"net/http"
 	"os"
 	"path/filepath"
 	"time"
 
-	"github.com/schollz/progressbar/v3"
-
 	"github.com/tetratelabs/getenvoy/internal/globals"
 	"github.com/tetratelabs/getenvoy/internal/tar"
 	"github.com/tetratelabs/getenvoy/internal/version"
@@ -58,7 +55,7 @@ func InstallIfNeeded(o *globals.GlobalOpts, p, v string) (string, error) {
 		}
 
 		fmt.Fprintln(o.Out, "downloading", tarballURL) //nolint
-		if err = untarEnvoy(installPath, tarballURL, o.UserAgent, o.Out); err != nil {
+		if err = untarEnvoy(installPath, tarballURL, o.UserAgent); err != nil {
 			return "", err
 		}
 		if err = os.Chtimes(installPath, mtime, mtime); err != nil { // overwrite the mtime to preserve it in the list
@@ -85,7 +82,7 @@ func verifyEnvoy(installPath string) (string, error) {
 	return envoyPath, nil
 }
 
-func untarEnvoy(dst, url, userAgent string, out io.Writer) error { // dst, src order like io.Copy
+func untarEnvoy(dst, url, userAgent string) error { // dst, src order like io.Copy
 	resp, err := httpGet(url, userAgent)
 	if err != nil {
 		return err
@@ -96,24 +93,8 @@ func untarEnvoy(dst, url, userAgent string, out io.Writer) error { // dst, src o
 		return fmt.Errorf("received %v status code from %s", resp.StatusCode, url)
 	}
 
-	// Ensure there's a progress while extraction is taking place
-	src := progressReader(out, resp.Body, resp.ContentLength)
-	defer src.Close() //nolint
-
-	if err = tar.Untar(dst, src); err != nil {
+	if err = tar.Untar(dst, resp.Body); err != nil {
 		return fmt.Errorf("error untarring %s: %w", url, err)
 	}
 	return nil
 }
-
-// progressReader will show a spinner or progress bar, depending on if max == -1
-func progressReader(dst io.Writer, src io.Reader, max int64) io.ReadCloser {
-	b := progressbar.NewOptions64(max,
-		progressbar.OptionSetWriter(dst),
-		progressbar.OptionOnCompletion(func() {
-			fmt.Fprint(dst, "\n")
-		}),
-	)
-	br := progressbar.NewReader(src, b)
-	return &br
-}


Test patch:
diff --git a/e2e/getenvoy_install_test.go b/e2e/getenvoy_install_test.go
index 9ef0641..5fa7608 100644
--- a/e2e/getenvoy_install_test.go
+++ b/e2e/getenvoy_install_test.go
@@ -35,7 +35,7 @@ func TestGetEnvoyInstall(t *testing.T) {
 		stdout, stderr, err := getEnvoy("--home-dir", homeDir, "install", version.LastKnownEnvoy).exec()
 
 		require.NoError(t, err)
-		require.Regexp(t, `downloading https:.*tar.*`, stdout)
+		require.Regexp(t, `^downloading https:.*tar.*z\n$`, stdout)
 		require.Empty(t, stderr)
 
 		require.FileExists(t, filepath.Join(homeDir, "versions", version.LastKnownEnvoy, "bin", "envoy"))
diff --git a/internal/envoy/install_test.go b/internal/envoy/install_test.go
index 3a835e3..4497913 100644
--- a/internal/envoy/install_test.go
+++ b/internal/envoy/install_test.go
@@ -17,7 +17,6 @@ package envoy
 import (
 	"bytes"
 	"fmt"
-	"io"
 	"io/ioutil"
 	"net/http"
 	"net/http/httptest"
@@ -52,7 +51,7 @@ func TestUntarEnvoyError(t *testing.T) {
 
 	url := server.URL + "/file.tar.gz"
 	t.Run("error on incorrect URL", func(t *testing.T) {
-		err := untarEnvoy(dst, url, userAgent, io.Discard)
+		err := untarEnvoy(dst, url, userAgent)
 		require.EqualError(t, err, fmt.Sprintf(`received 404 status code from %s`, url))
 	})
 
@@ -60,7 +59,7 @@ func TestUntarEnvoyError(t *testing.T) {
 		w.WriteHeader(200)
 	}
 	t.Run("error on empty", func(t *testing.T) {
-		err := untarEnvoy(dst, url, userAgent, io.Discard)
+		err := untarEnvoy(dst, url, userAgent)
 		require.EqualError(t, err, fmt.Sprintf(`error untarring %s: EOF`, url))
 	})
 
@@ -69,7 +68,7 @@ func TestUntarEnvoyError(t *testing.T) {
 		w.Write([]byte("mary had a little lamb")) //nolint
 	}
 	t.Run("error on not a tar", func(t *testing.T) {
-		err := untarEnvoy(dst, url, userAgent, io.Discard)
+		err := untarEnvoy(dst, url, userAgent)
 		require.EqualError(t, err, fmt.Sprintf(`error untarring %s: gzip: invalid header`, url))
 	})
 }
@@ -79,11 +78,9 @@ func TestUntarEnvoy(t *testing.T) {
 	o, cleanup := setupInstallTest(t)
 	defer cleanup()
 
-	out := new(bytes.Buffer)
-	err := untarEnvoy(o.tempDir, o.tarballURL, o.UserAgent, out)
+	err := untarEnvoy(o.tempDir, o.tarballURL, o.UserAgent)
 	require.NoError(t, err)
 	require.FileExists(t, filepath.Join(o.tempDir, binEnvoy))
-	require.Contains(t, out.String(), `100% |████████████████████████████████████████|`)
 }
 
 func TestInstallIfNeeded_ErrorOnIncorrectURL(t *testing.T) {
@@ -127,28 +124,6 @@ func TestInstallIfNeeded_Validates(t *testing.T) {
 	}
 }
 
-// progressReader emits a progress bar, when the length is known
-func TestProgressReader(t *testing.T) {
-	var out bytes.Buffer
-	b := []byte{1, 2, 3, 4}
-	br := progressReader(&out, bytes.NewReader(b), int64(len(b)))
-	_, e := io.ReadAll(br)
-
-	require.NoError(t, e)
-	require.Contains(t, out.String(), "100% |████████████████████████████████████████|")
-}
-
-// progressReader emits a spinner with download rate when it doesn't know the length
-func TestProgressReader_UnknownLength(t *testing.T) {
-	var out bytes.Buffer
-	b := []byte{1, 2, 3, 4}
-	br := progressReader(&out, bytes.NewReader(b), -1)
-	_, e := io.ReadAll(br)
-
-	require.NoError(t, e)
-	require.NotContains(t, out.String(), "100% |████████████████████████████████████████|")
-}
-
 func TestInstallIfNeeded(t *testing.T) {
 	o, cleanup := setupInstallTest(t)
 	defer cleanup()
@@ -159,8 +134,7 @@ func TestInstallIfNeeded(t *testing.T) {
 	require.Equal(t, o.EnvoyPath, envoyPath)
 	require.FileExists(t, envoyPath)
 
-	require.Contains(t, out.String(), o.tarballURL)
-	require.Contains(t, out.String(), "100% |████████████████████████████████████████|")
+	require.Equal(t, fmt.Sprintln("downloading", o.tarballURL), out.String())
 }
 
 func TestInstallIfNeeded_NotFound(t *testing.T) {