commit d50745d5a970d510751f9ed7ae1444dbc621e1c6
parent f1be1a3462b3252ee45a739781cda196fe59d4b1
Author: Martin von Gagern <Martin.vGagern@gmx.net>
Date: Sat, 8 Oct 2016 05:15:54 +0200
Make screenshotter work with docker-machine (#494)
Since boot2docker has been superseded by docker-machine, we need this to
support developers on OS X. The changes to the bash script ensure that we
clean up our containers even if taking screenshots gets hung and requires a
keyboard interrupt, as happens if the IP addresses were guessed incorrectly.
Diffstat:
2 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/dockers/Screenshotter/screenshotter.js b/dockers/Screenshotter/screenshotter.js
@@ -106,19 +106,25 @@ function check(err) {
process.exit(1);
}
-function dockerCmd() {
+function cmd() {
var args = Array.prototype.slice.call(arguments);
+ var cmd = args.shift();
return childProcess.execFileSync(
- "docker", args, { encoding: "utf-8" }).replace(/\n$/, "");
+ cmd, args, { encoding: "utf-8" }).replace(/\n$/, "");
}
-if (!seleniumURL && opts.container) {
+function guessDockerIPs() {
+ if (process.env.DOCKER_MACHINE_NAME) {
+ var machine = process.env.DOCKER_MACHINE_NAME;
+ seleniumIP = cmd("docker-machine", "ip", machine);
+ katexIP = cmd("docker-machine", "ssh", machine,
+ "echo ${SSH_CONNECTION%% *}");
+ return;
+ }
try {
// When using boot2docker, seleniumIP and katexIP are distinct.
- seleniumIP = childProcess.execFileSync(
- "boot2docker", ["ip"], { encoding: "utf-8" }).replace(/\n$/, "");
- var config = childProcess.execFileSync(
- "boot2docker", ["config"], { encoding: "utf-8" });
+ seleniumIP = cmd("boot2docker", "ip");
+ var config = cmd("boot2docker", "config");
config = (/^HostIP = "(.*)"$/m).exec(config);
if (!config) {
console.error("Failed to find HostIP");
@@ -126,10 +132,14 @@ if (!seleniumURL && opts.container) {
}
katexIP = config[1];
} catch (e) {
- seleniumIP = katexIP = dockerCmd(
- "inspect", "-f", "{{.NetworkSettings.Gateway}}", opts.container);
+ seleniumIP = katexIP = cmd("docker", "inspect",
+ "-f", "{{.NetworkSettings.Gateway}}", opts.container);
}
- seleniumPort = dockerCmd("port", opts.container, seleniumPort);
+}
+
+if (!seleniumURL && opts.container) {
+ guessDockerIPs();
+ seleniumPort = cmd("docker", "port", opts.container, seleniumPort);
seleniumPort = seleniumPort.replace(/^.*:/, "");
}
if (!seleniumURL && seleniumIP) {
diff --git a/dockers/Screenshotter/screenshotter.sh b/dockers/Screenshotter/screenshotter.sh
@@ -7,6 +7,15 @@
# suitable containers themselves, calling the screenshotter.js script
# directly.
+cleanup() {
+ [[ "${container}" ]] \
+ && docker stop "${container}" >/dev/null \
+ && docker rm "${container}" >/dev/null
+ container=
+}
+
+container=
+trap cleanup EXIT
status=0
for browserTag in firefox:2.48.2 chrome:2.48.2; do
browser=${browserTag%:*}
@@ -23,6 +32,6 @@ for browserTag in firefox:2.48.2 chrome:2.48.2; do
status=1
fi
echo "${res} taking screenshots, stopping and removing ${container:0:12}"
- docker stop ${container} >/dev/null && docker rm ${container} >/dev/null
+ cleanup
done
exit ${status}