Skip to content
This repository was archived by the owner on Jun 30, 2021. It is now read-only.

Commit cac2976

Browse files
committed
Upgrade Chrome patch level to 45.0.2454.93 and other flavors.
1 parent 3bc397d commit cac2976

File tree

6 files changed

+78
-62
lines changed

6 files changed

+78
-62
lines changed

CHANGELOG.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,28 @@ How to get container versions
1313
google-chrome-unstable --version && echo "\n"
1414
sc | grep build && BrowserStackLocal -version
1515

16+
## 2.47.1k (2015-09-16)
17+
+ Upgrade Chrome patch level to 45.0.2454.93 and other flavors.
18+
+ Image tag details:
19+
+ Selenium: v2.47.1 (411b314)
20+
+ Chrome stable: 45.0.2454.93
21+
+ Chrome beta: 46.0.2490.22
22+
+ Chrome dev (unstable): 47.0.2508.0
23+
+ Firefox versions in this image:
24+
40.0.3 39.0.3 38.0.6 37.0.2 36.0.4
25+
35.0.1 34.0.5 33.0.3 32.0.3 31.0 30.0
26+
29.0.1 28.0 27.0.1 26.0 25.0.1 24.0
27+
+ Chromedriver: 2.19.346067 (6abd8652f8bc7a1d825962003ac88ec6a37a82f1)
28+
+ Java: 1.8.0_66-internal OpenJDK 64-Bit 1.8.0_66-b01
29+
+ Timezone: Europe/Berlin
30+
+ Built with: Docker version 1.8.2, build 0a8c2e3
31+
+ FROM ubuntu:wily-20150829
32+
+ Python: 2.7.10
33+
+ Sauce Connect 4.3.11, build 1757 2b421bb
34+
+ BrowserStack Local version 3.8
35+
+ Image ID: TBD
36+
+ Digest: sha256:TBD
37+
1638
## 2.47.1j (2015-09-09)
1739
+ Upgrade from wily-20150807 to wily-20150829 (Leo Gallucci)
1840
+ Make noVNC service only start with `-e NOVNC=true`

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ RUN mkdir -p ${NORMAL_USER_HOME}/tmp && cd ${NORMAL_USER_HOME}/tmp \
595595
# TODO: Use Google fingerprint to verify downloads
596596
# http://www.google.de/linuxrepositories/
597597
# Also fix .deb file names with correct version
598-
RUN latest_chrome_version_trigger="45.0.2454.85" \
598+
RUN latest_chrome_version_trigger="45.0.2454.93" \
599599
&& mkdir -p ${NORMAL_USER_HOME}/chrome-deb \
600600
&& export CHROME_URL="https://dl.google.com/linux/direct" \
601601
&& wget --no-verbose -O \

README.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Note SeleniumHQ/docker-selenium project is more useful for building selenium gri
2020
In general add `sudo` only if needed in your environment and `--privileged` or `-v /dev/shm:/dev/shm` if you really need it like when [Chrome crashes](https://github.com/elgalu/docker-selenium/issues/20) during your high gpu intensive tests.
2121

2222
docker run --rm --name=grid -p 4444:24444 -p 5920:25900 \
23-
-v /dev/shm:/dev/shm -e VNC_PASSWORD=hola elgalu/selenium:2.47.1j
23+
-v /dev/shm:/dev/shm -e VNC_PASSWORD=hola elgalu/selenium:2.47.1k
2424

2525
Make sure `docker run` finishes with **selenium all done and ready for testing** else you won't be able to start your tests. To perform this check programatically please use this command where `grid` is the name of the container:
2626

@@ -83,7 +83,7 @@ You need to pass the environment variable `-e NOVNC=true` in order to start the
8383

8484
docker run --rm --name=grid -p 4444:24444 -p 5920:25900 \
8585
-e NOVNC=true \
86-
elgalu/selenium:2.47.1j
86+
elgalu/selenium:2.47.1k
8787

8888
If the VNC password was randomly generated find out with
8989

@@ -96,7 +96,7 @@ If the VNC password was randomly generated find out with
9696
You can launch a grid only container via environment variables:
9797

9898
docker run --rm --name=hub -p 4444:24444 -p 5930:25900 \
99-
-e CHROME=false -e FIREFOX=false elgalu/selenium:2.47.1j
99+
-e CHROME=false -e FIREFOX=false elgalu/selenium:2.47.1k
100100

101101
The important part above is `-e CHROME=false -e FIREFOX=false` which tells the docker image not run run default chorme and firefox nodes turning the container into a grid-only one.
102102

@@ -110,7 +110,7 @@ You can lunch a node only container via environment variables:
110110
-e SELENIUM_HUB_PORT=4444 \
111111
-e SELENIUM_NODE_HOST=docker.host \
112112
-e GRID=false -e CHROME=true -e FIREFOX=true \
113-
elgalu/selenium:2.47.1j
113+
elgalu/selenium:2.47.1k
114114

115115
The important part above is `-e GRID=false` which tells the container to be a node-only node, this this case with 2 browsers `-e CHROME=true -e FIREFOX=true` but could be just 1.
116116

@@ -124,7 +124,7 @@ Start the grid with Chrome and Firefox
124124
-e SELENIUM_NODE_CH_PORT=25010 -e SELENIUM_NODE_FF_PORT=26010 \
125125
-e GRID=true -e CHROME=true -e FIREFOX=true \
126126
-e VNC_PASSWORD=hola -e VNC_PORT=5810 \
127-
-v /dev/shm:/dev/shm elgalu/selenium:2.47.1j
127+
-v /dev/shm:/dev/shm elgalu/selenium:2.47.1k
128128

129129
Add another docker container node with 2 more browsers:
130130

@@ -134,7 +134,7 @@ Add another docker container node with 2 more browsers:
134134
-e SELENIUM_NODE_CH_PORT=25020 -e SELENIUM_NODE_FF_PORT=26020 \
135135
-e GRID=false -e CHROME=true -e FIREFOX=true \
136136
-e VNC_PASSWORD=hola -e VNC_PORT=5820 \
137-
-v /dev/shm:/dev/shm elgalu/selenium:2.47.1j
137+
-v /dev/shm:/dev/shm elgalu/selenium:2.47.1k
138138

139139
And another
140140

@@ -144,7 +144,7 @@ And another
144144
-e SELENIUM_NODE_CH_PORT=25030 -e SELENIUM_NODE_FF_PORT=26030 \
145145
-e GRID=false -e CHROME=true -e FIREFOX=true \
146146
-e VNC_PASSWORD=hola -e VNC_PORT=5830 \
147-
-v /dev/shm:/dev/shm elgalu/selenium:2.47.1j
147+
-v /dev/shm:/dev/shm elgalu/selenium:2.47.1k
148148

149149
## Chrome crashed
150150

@@ -183,9 +183,9 @@ There are also additional steps you can take to ensure you're using the correct
183183

184184
You can simply verify that image id is indeed the correct one.
185185

186-
# e.g. full image id for tag 2.47.1j
187-
export IMGID=07d8bd8ca179de2125f27113bdcebf969c250b150150d2977c637c64c15ef936
188-
if docker inspect -f='{{.Id}}' elgalu/selenium:2.47.1j |grep ${IMGID} &> /dev/null; then
186+
# e.g. full image id for tag 2.47.1k
187+
export IMGID=TBD
188+
if docker inspect -f='{{.Id}}' elgalu/selenium:2.47.1k |grep ${IMGID} &> /dev/null; then
189189
echo "Image ID tested ok"
190190
else
191191
echo "Image ID doesn't match"
@@ -195,8 +195,8 @@ You can simply verify that image id is indeed the correct one.
195195

196196
Given docker.io currently allows to push the same tag image twice this represent a security concern but since docker >= 1.6.2 is possible to fetch the digest sha256 instead of the tag so you can be sure you're using the exact same docker image every time:
197197

198-
# e.g. sha256 for tag 2.47.1j
199-
export SHA=3a1cda55d920a64d1ad892c65b543b48a8a86fac572e3f2eefce11862107579a
198+
# e.g. sha256 for tag 2.47.1k
199+
export SHA=TBD
200200
docker pull elgalu/selenium@sha256:${SHA}
201201

202202
You can find all digests sha256 and image ids per tag in the [CHANGELOG](./CHANGELOG.md) so as of now you just need to trust the sha256 in the CHANGELOG. Bullet proof is to fork this project and build the images yourself if security is a big concern.
@@ -221,7 +221,7 @@ Host machine, terminal 2:
221221
docker run --rm --name=ch -p=4444:24444 \
222222
-e SCREEN_WIDTH -e SCREEN_HEIGHT -e XE_DISP_NUM \
223223
-v /tmp/.X11-unix/X${XE_DISP_NUM}:/tmp/.X11-unix/X${XE_DISP_NUM} \
224-
elgalu/selenium:2.47.1j
224+
elgalu/selenium:2.47.1k
225225

226226
Now when you run your tests instead of connecting. If docker run fails try `xhost +`
227227

@@ -243,7 +243,7 @@ ANYPORT=0
243243
REMOTE_DOCKER_SRV=localhost
244244
CONTAINER=$(docker run -d -p=0.0.0.0:${ANYPORT}:22222 -p=0.0.0.0:${ANYPORT}:24444 \
245245
-p=0.0.0.0:${ANYPORT}:25900 -e SCREEN_HEIGHT=1110 -e VNC_PASSWORD=hola \
246-
-e SSH_AUTH_KEYS="$(cat ~/.ssh/id_rsa.pub)" elgalu/selenium:2.47.1j
246+
-e SSH_AUTH_KEYS="$(cat ~/.ssh/id_rsa.pub)" elgalu/selenium:2.47.1k
247247
248248
# -- Option 2.docker run- Running docker on remote docker server like in the cloud
249249
# Useful if the docker server is running in the cloud. Establish free local ports
@@ -253,7 +253,7 @@ ssh ${REMOTE_DOCKER_SRV} #get into the remote docker provider somehow
253253
# it acts as a jump host so my public key is already on that server
254254
CONTAINER=$(docker run -d -p=0.0.0.0:${ANYPORT}:22222 -e SCREEN_HEIGHT=1110 \
255255
-e VNC_PASSWORD=hola -e SSH_AUTH_KEYS="$(cat ~/.ssh/authorized_keys)" \
256-
elgalu/selenium:2.47.1j
256+
elgalu/selenium:2.47.1k
257257
258258
# -- Common: Wait for the container to start
259259
./host-scripts/wait-docker-selenium.sh grid 7s
@@ -324,7 +324,7 @@ If you git clone this repo locally, i.e. cd into where the Dockerfile is, you ca
324324
325325
If you prefer to download the final built image from docker you can pull it, personally I always prefer to build them manually except for the base images like Ubuntu 14.04.2:
326326
327-
docker pull elgalu/selenium:2.47.1j
327+
docker pull elgalu/selenium:2.47.1k
328328
329329
#### 2. Use this image
330330

READMELeo.md

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
## Build
22

3-
time (docker build -t="elgalu/selenium:2.47.1j" . ;echo $?;beep)
4-
docker run --rm -ti -m 4000M --cpu-quota=0 --name=grid -p=4470:24444 -p=5920:25900 -p=2222:22222 -e SSH_AUTH_KEYS="$(cat ~/.ssh/id_rsa.pub)" -v $(pwd)/videos:/videos -e DISABLE_ROLLBACK=true -e VIDEO=true -e MEM_JAVA="1024m" elgalu/selenium:2.47.1j
3+
time (docker build -t="elgalu/selenium:2.47.1k" . ;echo $?;beep)
4+
docker run --rm -ti -m 4000M --cpu-quota=0 --name=grid -p=4470:24444 -p=5920:25900 -p=2222:22222 -e DISABLE_ROLLBACK=true -e VIDEO=true -e MEM_JAVA="1024m" -e SSH_AUTH_KEYS="$(cat ~/.ssh/id_rsa.pub)" -v $(pwd)/videos:/videos -v /dev/shm:/dev/shm elgalu/selenium:2.47.1k
55

66
Build a grid with extra nodes
77

8-
docker run --rm --name=grid -p 4444:24444 -p 5920:25900 -v /dev/shm:/dev/shm -e VNC_PASSWORD=hola elgalu/selenium:2.47.1j
8+
docker run --rm --name=grid -p 4444:24444 -p 5920:25900 -v /dev/shm:/dev/shm -e VNC_PASSWORD=hola elgalu/selenium:2.47.1k
99

10-
docker run --rm --name=node -e DISP_N=13 -e SSHD_PORT=22223 -e SUPERVISOR_HTTP_PORT=29003 -e VNC_PORT=25903 -e SELENIUM_NODE_CH_PORT=25330 -e SELENIUM_NODE_FF_PORT=25331 -e GRID=false -e CHROME=true -e FIREFOX=true --net=container:grid elgalu/selenium:2.47.1j
10+
docker run --rm --name=node -e DISP_N=13 -e SSHD_PORT=22223 -e SUPERVISOR_HTTP_PORT=29003 -e VNC_PORT=25903 -e SELENIUM_NODE_CH_PORT=25330 -e SELENIUM_NODE_FF_PORT=25331 -e GRID=false -e CHROME=true -e FIREFOX=true --net=container:grid elgalu/selenium:2.47.1k
1111

1212
See logs
1313

1414
docker exec -ti grid bash -c "ls -lah /var/log/sele/"
1515

1616
Testing in ssh [email protected]
1717

18-
docker run --rm --name=grid -p=4470:24444 -p=5920:25900 -p=2222:22222 -e SSH_AUTH_KEYS="$(cat ~/.ssh/authorized_keys)" -e VNC_PASSWORD=Hola3 os-registry.stups.zalan.do/tip/selenium:2.47.1j
18+
docker run --rm --name=grid -p=4470:24444 -p=5920:25900 -p=2222:22222 -e SSH_AUTH_KEYS="$(cat ~/.ssh/authorized_keys)" -e VNC_PASSWORD=Hola3 os-registry.stups.zalan.do/tip/selenium:2.47.1k
1919

2020
## Transfer used browser source artifacts to keep them in the cloud
2121

@@ -38,18 +38,18 @@ List firefox versions via docker exe
3838

3939
## To update image id and digest
4040

41-
docker inspect -f='{{.Id}}' elgalu/selenium:2.47.1j
41+
docker inspect -f='{{.Id}}' elgalu/selenium:2.47.1k
4242
docker images --digests
4343

4444
## Run with shared dir
4545

4646
docker run --rm --name=grid -p=127.0.0.1:4460:24444 -p=127.0.0.1:5910:25900 \
47-
-v /e2e/uploads:/e2e/uploads elgalu/selenium:2.47.1j
47+
-v /e2e/uploads:/e2e/uploads elgalu/selenium:2.47.1k
4848
docker run --rm --name=grid -p=4460:24444 -p=5910:25900 \
49-
-v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):$(which docker) elgalu/selenium:2.47.1j
49+
-v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):$(which docker) elgalu/selenium:2.47.1k
5050

5151

52-
docker run --rm --name=ff -p=127.0.0.1:4461:24444 -p=127.0.0.1:5911:25900 -v /e2e/uploads:/e2e/uploads elgalu/selenium:2.47.1j
52+
docker run --rm --name=ff -p=127.0.0.1:4461:24444 -p=127.0.0.1:5911:25900 -v /e2e/uploads:/e2e/uploads elgalu/selenium:2.47.1k
5353

5454
## Run without shared dir and bind ports to all network interfaces
5555

@@ -72,11 +72,11 @@ List firefox versions via docker exe
7272
## Run without dir and bind to all interfaces
7373
Note anything after the image will be taken as arguments for the cmd/entrypoint
7474

75-
docker run --rm --name=grid -p=0.0.0.0:8813:8484 -p=0.0.0.0:2222:2222 -p=0.0.0.0:4470:24444 -p=0.0.0.0:5920:25900 -e SCREEN_WIDTH=1800 -e SCREEN_HEIGHT=1110 -e VNC_PASSWORD=hola -e SSH_AUTH_KEYS="$(cat ~/.ssh/id_rsa.pub)" elgalu/selenium:2.47.1j
75+
docker run --rm --name=grid -p=0.0.0.0:8813:8484 -p=0.0.0.0:2222:2222 -p=0.0.0.0:4470:24444 -p=0.0.0.0:5920:25900 -e SCREEN_WIDTH=1800 -e SCREEN_HEIGHT=1110 -e VNC_PASSWORD=hola -e SSH_AUTH_KEYS="$(cat ~/.ssh/id_rsa.pub)" elgalu/selenium:2.47.1k
7676

77-
docker run --rm --name=grid -p=4470:24444 -p=5920:25900 -e VNC_PASSWORD=hola elgalu/selenium:2.47.1j
78-
docker run --rm --name=grid -p=4470:24444 -p=5920:25900 -e VNC_PASSWORD=hola docker.io/elgalu/selenium:2.47.1j
79-
docker run --rm --name=grid -p=0.0.0.0:4470:24444 -p=0.0.0.0:5920:25900 --add-host myserver.dev:172.17.42.1 elgalu/selenium:2.47.1j
77+
docker run --rm --name=grid -p=4470:24444 -p=5920:25900 -e VNC_PASSWORD=hola elgalu/selenium:2.47.1k
78+
docker run --rm --name=grid -p=4470:24444 -p=5920:25900 -e VNC_PASSWORD=hola docker.io/elgalu/selenium:2.47.1k
79+
docker run --rm --name=grid -p=0.0.0.0:4470:24444 -p=0.0.0.0:5920:25900 --add-host myserver.dev:172.17.42.1 elgalu/selenium:2.47.1k
8080

8181
However adding a custom host IP to server-selenium.local (e.g. bsele ssh config) is more work:
8282

@@ -85,32 +85,32 @@ However adding a custom host IP to server-selenium.local (e.g. bsele ssh config)
8585

8686
vncv localhost:5920 -Scaling=60% &
8787

88-
docker run --rm --name=ff -p=0.0.0.0:4471:24444 -p=0.0.0.0:5921:25900 elgalu/selenium:2.47.1j
88+
docker run --rm --name=ff -p=0.0.0.0:4471:24444 -p=0.0.0.0:5921:25900 elgalu/selenium:2.47.1k
8989

9090
Automatic builds not working for me right now, maybe there is an issue with docker registry v1 vs v2
9191
https://registry.hub.docker.com/u/elgalu/docker-selenium/builds_history/31621/
9292

9393
## Push version
9494

9595
docker login
96-
docker push docker.io/elgalu/selenium:2.47.1j ;echo $?;beep
97-
docker tag elgalu/selenium:2.47.1j elgalu/selenium:latest
96+
docker push docker.io/elgalu/selenium:2.47.1k ;echo $?;beep
97+
docker tag elgalu/selenium:2.47.1k elgalu/selenium:latest
9898
docker push docker.io/elgalu/selenium:latest
9999

100100
Not working maybe because it has automated builds enabled but then it fails in the cloud but works locally
101101
https://registry.hub.docker.com/u/elgalu/selenium/tags/manage/
102102

103-
docker push elgalu/selenium:2.47.1j
104-
docker push elgalu/docker-selenium:2.47.1j
105-
docker push docker.io/elgalu/docker-selenium:2.47.1j
103+
docker push elgalu/selenium:2.47.1k
104+
docker push elgalu/docker-selenium:2.47.1k
105+
docker push docker.io/elgalu/docker-selenium:2.47.1k
106106

107107
## Pulling
108108

109-
docker pull registry.hub.docker.com/elgalu/selenium:2.47.1j
109+
docker pull registry.hub.docker.com/elgalu/selenium:2.47.1k
110110

111111
## Pull
112112

113-
docker run -d --name=max -p=0.0.0.0:4411:24444 -p=0.0.0.0:5911:25900 elgalu/selenium:2.47.1j
113+
docker run -d --name=max -p=0.0.0.0:4411:24444 -p=0.0.0.0:5911:25900 elgalu/selenium:2.47.1k
114114

115115
How to connect through vnc (need a vnc client)
116116

selenium-node-firefox/bin/start-selenium-node-firefox.sh

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,21 @@ JAVA_OPTS="$(java-dynamic-memory-opts.sh) ${JAVA_OPTS}"
1212
echo "INFO: JAVA_OPTS are '${JAVA_OPTS}'"
1313

1414
# TODO: how to set default firefox to latest?
15-
# export SELENIUM_NODE_FF_PORT=$((SELENIUM_NODE_FF_BASE_PORT-1))
16-
# for FIREFOX_VERSION in $(echo ${FIREFOX_VERSIONS} | tr "," "\n"); do
17-
# export FIREFOX_DEST_BIN="${SEL_HOME}/firefox-${FIREFOX_VERSION}/firefox/firefox"
18-
export FIREFOX_BROWSER_CAPS="browserName=firefox,${COMMON_CAPS},version=${FIREFOX_VERSION},firefox_binary=${FIREFOX_DEST_BIN}"
19-
# export SELENIUM_NODE_FF_PORT=$((SELENIUM_NODE_FF_PORT+1))
20-
# See standalone params docs at
21-
# https://code.google.com/p/selenium/wiki/Grid2
22-
java ${JAVA_OPTS} \
23-
-jar ${SEL_HOME}/selenium-server-standalone.jar \
24-
-port ${SELENIUM_NODE_FF_PORT} \
25-
-host ${SELENIUM_NODE_HOST} \
26-
-role node \
27-
-hub http://${SELENIUM_HUB_HOST}:${SELENIUM_HUB_PORT}/grid/register \
28-
-browser "${FIREFOX_BROWSER_CAPS}" \
29-
-trustAllSSLCertificates \
30-
-maxSession ${MAX_SESSIONS} \
31-
-timeout ${SEL_RELEASE_TIMEOUT_SECS} \
32-
-browserTimeout ${SEL_BROWSER_TIMEOUT_SECS} \
33-
-cleanUpCycle ${SEL_CLEANUPCYCLE_MS} \
34-
-nodePolling ${SEL_NODEPOLLING_MS} \
35-
${SELENIUM_NODE_PARAMS}
36-
# done
15+
export FIREFOX_BROWSER_CAPS="browserName=firefox,${COMMON_CAPS},version=${FIREFOX_VERSION},firefox_binary=${FIREFOX_DEST_BIN}"
16+
java ${JAVA_OPTS} \
17+
-jar ${SEL_HOME}/selenium-server-standalone.jar \
18+
-port ${SELENIUM_NODE_FF_PORT} \
19+
-host ${SELENIUM_NODE_HOST} \
20+
-role node \
21+
-hub http://${SELENIUM_HUB_HOST}:${SELENIUM_HUB_PORT}/grid/register \
22+
-browser "${FIREFOX_BROWSER_CAPS}" \
23+
-trustAllSSLCertificates \
24+
-maxSession ${MAX_SESSIONS} \
25+
-timeout ${SEL_RELEASE_TIMEOUT_SECS} \
26+
-browserTimeout ${SEL_BROWSER_TIMEOUT_SECS} \
27+
-cleanUpCycle ${SEL_CLEANUPCYCLE_MS} \
28+
-nodePolling ${SEL_NODEPOLLING_MS} \
29+
${SELENIUM_NODE_PARAMS}
3730

3831
# Note to double pipe output and keep this process logs add at the end:
3932
# 2>&1 | tee $SELENIUM_LOG

selenium-node-firefox/bin/wait-selenium-node-firefox.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#!/usr/bin/env bash
22

3+
SEL_STATUS_URL="http://localhost:${SELENIUM_NODE_CH_PORT}/wd/hub/status"
4+
35
# Exit immediately if a command exits with a non-zero status
46
set -e
57

@@ -12,8 +14,7 @@ echo "Waiting for Selenium Node Firefox ${FIREFOX_VERSION} to be ready..."
1214
# This is annoying but json endpoint /wd/hub/status returns different things
1315
# - on grid/hub .status should be 13
1416
# - on node .state should be "success"
15-
while ! curl -s "http://localhost:${SELENIUM_NODE_FF_PORT}/wd/hub/status" \
16-
| jq '.state' | grep "success"; do
17+
while ! curl -s "${SEL_STATUS_URL}" | jq '.state' | grep "success"; do
1718
echo -n '.'
1819
sleep 0.1
1920
done

0 commit comments

Comments
 (0)