Skip to content

Commit 12d4b39

Browse files
Pothulapatiroboquat
authored andcommitted
[preview-install] Add user-friendly output
Part of #9075 This PR adds user friendly output to the preview install docker container by adding a new program prettylog that looks at the output of the entry-point.sh and just adds status updates and spinners. This feels easier instead of adding the same status updates in bash. The status updates are also kept as simple as possible and any additional instructions (URL, and certs) will be added to the documentation instead of here. Feel free to post here if you think it would be better to have them here in the script. Signed-off-by: Tarun Pothulapati <[email protected]>
1 parent 9552b60 commit 12d4b39

File tree

7 files changed

+176
-2
lines changed

7 files changed

+176
-2
lines changed

Diff for: install/preview/BUILD.yaml

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ packages:
88
srcs:
99
- "entrypoint.sh"
1010
- "manifests/*.yaml"
11+
- "prettylog/main.go"
12+
- "prettylog/go.sum"
13+
- "prettylog/go.mod"
1114
config:
1215
dockerfile: leeway.Dockerfile
1316
image:

Diff for: install/preview/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ simple as possible.
77
## Installation
88

99
```bash
10-
docker run --privileged --name gitpod --rm -it -v /tmp/gitpod:/var/gitpod eu.gcr.io/gitpod-core-dev/build/preview-install:tar-preview-install.4
10+
docker run --privileged --name gitpod --rm -it -v /tmp/gitpod:/var/gitpod eu.gcr.io/gitpod-core-dev/build/preview-install:tar-preview-output.2
1111
```
1212

1313
Once the above command starts running and the pods are ready (can be checked by running `docker exec gitpod kubectl get pods`),

Diff for: install/preview/entrypoint.sh

+13-1
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,21 @@
22
# Copyright (c) 2022 Gitpod GmbH. All rights reserved.
33
# Licensed under the MIT License. See License-MIT.txt in the project root for license information.
44

5+
set -e
56

6-
set -ex
7+
if [ "$1" != "logging" ]; then
8+
$0 logging 2>&1 | /prettylog
9+
exit
10+
fi
711

812
# check for minimum requirements
913
REQUIRED_MEM_KB=$((6 * 1024 * 1024))
1014
total_mem_kb=$(awk '/MemTotal:/ {print $2}' /proc/meminfo)
1115
if [ "${total_mem_kb}" -lt "${REQUIRED_MEM_KB}" ]; then
1216
echo "Preview installation of Gitpod requires a system with at least 6GB of memory"
1317
exit 1
18+
else
19+
set -x
1420
fi
1521

1622
REQUIRED_CORES=4
@@ -111,10 +117,16 @@ done
111117
ctr images pull "docker.io/gitpod/workspace-full:latest" >/dev/null &
112118

113119
/gitpod-installer render --config config.yaml --output-split-files /var/lib/rancher/k3s/server/manifests/gitpod
120+
121+
# store files in `gitpod.debug` for debugging purposes
114122
for f in /var/lib/rancher/k3s/server/manifests/gitpod/*.yaml; do (cat "$f"; echo) >> /var/lib/rancher/k3s/server/gitpod.debug; done
123+
# remove NetowrkPolicy resources as they are not relevant here
115124
rm /var/lib/rancher/k3s/server/manifests/gitpod/*NetworkPolicy*
125+
# update PersistentVolumeClaim's to use k3s's `local-path` storage class
116126
for f in /var/lib/rancher/k3s/server/manifests/gitpod/*PersistentVolumeClaim*.yaml; do yq e -i '.spec.storageClassName="local-path"' "$f"; done
127+
# Set `volumeClassTemplate` so that each replica creates its own PVC
117128
yq eval-all -i ". as \$item ireduce ({}; . *+ \$item)" /var/lib/rancher/k3s/server/manifests/gitpod/*_StatefulSet_messagebus.yaml /app/manifests/messagebus.yaml
129+
# update Statefulset's to use k3s's `local-path` storage class
118130
for f in /var/lib/rancher/k3s/server/manifests/gitpod/*StatefulSet*.yaml; do yq e -i '.spec.volumeClaimTemplates[0].spec.storageClassName="local-path"' "$f"; done
119131

120132
# removing init container from ws-daemon (systemd and Ubuntu)

Diff for: install/preview/leeway.Dockerfile

+7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
# Copyright (c) 2022 Gitpod GmbH. All rights reserved.
22
# Licensed under the MIT License. See License-MIT.txt in the project root for license information.
33

4+
FROM golang:1.18 as prettylog
5+
6+
WORKDIR /app
7+
COPY prettylog/* ./
8+
RUN CGO_ENABLED=0 go build .
9+
410
FROM rancher/k3s:v1.21.12-k3s1
511

612
ADD https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64 /bin/mkcert
@@ -16,6 +22,7 @@ RUN chmod +x /bin/yq
1622

1723
COPY manifests/* /app/manifests/
1824
COPY install-installer--app/installer /gitpod-installer
25+
COPY --from=prettylog /app/prettylog /prettylog
1926

2027
COPY entrypoint.sh /entrypoint.sh
2128

Diff for: install/preview/prettylog/go.mod

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module github.com/gitpod-io/gitpod/olpi/prettylog
2+
3+
go 1.18
4+
5+
require github.com/pterm/pterm v0.12.41
6+
7+
require (
8+
github.com/atomicgo/cursor v0.0.1 // indirect
9+
github.com/gookit/color v1.5.0 // indirect
10+
github.com/mattn/go-runewidth v0.0.13 // indirect
11+
github.com/rivo/uniseg v0.2.0 // indirect
12+
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
13+
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 // indirect
14+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
15+
)

Diff for: install/preview/prettylog/go.sum

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
github.com/MarvinJWendt/testza v0.1.0/go.mod h1:7AxNvlfeHP7Z/hDQ5JtE3OKYT3XFUeLCDE2DQninSqs=
2+
github.com/MarvinJWendt/testza v0.2.1/go.mod h1:God7bhG8n6uQxwdScay+gjm9/LnO4D3kkcZX4hv9Rp8=
3+
github.com/MarvinJWendt/testza v0.2.8/go.mod h1:nwIcjmr0Zz+Rcwfh3/4UhBp7ePKVhuBExvZqnKYWlII=
4+
github.com/MarvinJWendt/testza v0.2.10/go.mod h1:pd+VWsoGUiFtq+hRKSU1Bktnn+DMCSrDrXDpX2bG66k=
5+
github.com/MarvinJWendt/testza v0.2.12/go.mod h1:JOIegYyV7rX+7VZ9r77L/eH6CfJHHzXjB69adAhzZkI=
6+
github.com/MarvinJWendt/testza v0.3.0/go.mod h1:eFcL4I0idjtIx8P9C6KkAuLgATNKpX4/2oUqKc6bF2c=
7+
github.com/MarvinJWendt/testza v0.3.5 h1:g9krITRRlIsF1eO9sUKXtiTw670gZIIk6T08Keeo1nM=
8+
github.com/MarvinJWendt/testza v0.3.5/go.mod h1:ExbTpWmA1z2E9HSskvrNcwApoX4F9bID692s10nuHRY=
9+
github.com/atomicgo/cursor v0.0.1 h1:xdogsqa6YYlLfM+GyClC/Lchf7aiMerFiZQn7soTOoU=
10+
github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk=
11+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
12+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
13+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
14+
github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ=
15+
github.com/gookit/color v1.5.0 h1:1Opow3+BWDwqor78DcJkJCIwnkviFi+rrOANki9BUFw=
16+
github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo=
17+
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
18+
github.com/klauspost/cpuid/v2 v2.0.10/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
19+
github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE=
20+
github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
21+
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
22+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
23+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
24+
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
25+
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
26+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
27+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
28+
github.com/pterm/pterm v0.12.27/go.mod h1:PhQ89w4i95rhgE+xedAoqous6K9X+r6aSOI2eFF7DZI=
29+
github.com/pterm/pterm v0.12.29/go.mod h1:WI3qxgvoQFFGKGjGnJR849gU0TsEOvKn5Q8LlY1U7lg=
30+
github.com/pterm/pterm v0.12.30/go.mod h1:MOqLIyMOgmTDz9yorcYbcw+HsgoZo3BQfg2wtl3HEFE=
31+
github.com/pterm/pterm v0.12.31/go.mod h1:32ZAWZVXD7ZfG0s8qqHXePte42kdz8ECtRyEejaWgXU=
32+
github.com/pterm/pterm v0.12.33/go.mod h1:x+h2uL+n7CP/rel9+bImHD5lF3nM9vJj80k9ybiiTTE=
33+
github.com/pterm/pterm v0.12.36/go.mod h1:NjiL09hFhT/vWjQHSj1athJpx6H8cjpHXNAK5bUw8T8=
34+
github.com/pterm/pterm v0.12.40/go.mod h1:ffwPLwlbXxP+rxT0GsgDTzS3y3rmpAO1NMjUkGTYf8s=
35+
github.com/pterm/pterm v0.12.41 h1:e2BRfFo1H9nL8GY0S3ImbZqfZ/YimOk9XtkhoobKJVs=
36+
github.com/pterm/pterm v0.12.41/go.mod h1:LW/G4J2A42XlTaPTAGRPvbBfF4UXvHWhC6SN7ueU4jU=
37+
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
38+
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
39+
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
40+
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
41+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
42+
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
43+
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
44+
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
45+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
46+
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8=
47+
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs=
48+
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
49+
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
50+
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
51+
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
52+
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 h1:OH54vjqzRWmbJ62fjuhxy7AxFFgoHN0/DPc/UrL8cAs=
53+
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
54+
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
55+
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
56+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
57+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
58+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
59+
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
60+
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
61+
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
62+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
63+
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
64+
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

Diff for: install/preview/prettylog/main.go

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2+
// Licensed under the MIT License. See License-MIT.txt in the project root for license information.
3+
4+
package main
5+
6+
import (
7+
"bufio"
8+
"errors"
9+
"io"
10+
"os"
11+
"strings"
12+
13+
"github.com/pterm/pterm"
14+
)
15+
16+
var msgs = []struct {
17+
Fail string
18+
Success string
19+
20+
Msg string
21+
}{
22+
{Msg: "checking prerequisites", Fail: "requires a system with at least", Success: "Gitpod Domain:"},
23+
{Msg: "preparing system", Success: "extracting images to download ahead"},
24+
{Msg: "downloading images", Success: "--output-split-files"},
25+
{Msg: "preparing Gitpod preview installation", Success: "rm -rf /var/lib/rancher/k3s/server/manifests/gitpod"},
26+
{Msg: "starting k3s", Success: "ws-proxy"},
27+
{Msg: "Gitpod is running"},
28+
}
29+
30+
func main() {
31+
dmp, err := os.OpenFile("logs.txt", os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
32+
if err != nil {
33+
panic(err)
34+
}
35+
defer dmp.Close()
36+
37+
r := io.TeeReader(os.Stdin, dmp)
38+
39+
scan := bufio.NewScanner(r)
40+
var msgIdx int
41+
lastSpinner, _ := pterm.DefaultSpinner.Start(msgs[msgIdx].Msg)
42+
for scan.Scan() {
43+
line := scan.Text()
44+
msg := msgs[msgIdx]
45+
46+
var next bool
47+
switch {
48+
case msg.Fail != "" && strings.Contains(line, msg.Fail):
49+
lastSpinner.Fail()
50+
next = true
51+
case msg.Success != "" && strings.Contains(line, msg.Success):
52+
lastSpinner.Success()
53+
next = true
54+
}
55+
56+
if !next {
57+
continue
58+
}
59+
60+
msgIdx++
61+
if msgIdx >= len(msgs) {
62+
return
63+
}
64+
lastSpinner, _ = pterm.DefaultSpinner.Start(msgs[msgIdx].Msg)
65+
}
66+
err = scan.Err()
67+
if errors.Is(err, io.EOF) {
68+
err = nil
69+
}
70+
if err != nil {
71+
panic(err)
72+
}
73+
}

0 commit comments

Comments
 (0)