From 3560b9faa3b3a37098c3f8489651f614869dba72 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Thu, 23 Nov 2017 16:27:42 -0800 Subject: [PATCH 01/26] Simplify docker ignore config Really the only thing that causes large build contexts is git history, since barely a handful of files are needed to build the images. This change avoids development pain when new files are excluded unexpectedly. --- .dockerignore | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.dockerignore b/.dockerignore index 6cf218f..6b8710a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1 @@ -** -!Dockerfile* -!test*.sh +.git From b9a59beda293fa092853b7db9cc5c1bd041a2375 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Thu, 23 Nov 2017 16:29:02 -0800 Subject: [PATCH 02/26] Explicitly set COMPOSE_PROJECT_NAME Allows the `docker-compose.yml` file to refer to non-image resources (like docker networks) it creates in environment variables, which is needed for future changes. --- .env | 1 + environments/release.env | 1 + environments/snapshot.env | 1 + 3 files changed, 3 insertions(+) diff --git a/.env b/.env index 3f241e6..57bd6b2 100644 --- a/.env +++ b/.env @@ -4,6 +4,7 @@ # From: /environments/snapshot.env +COMPOSE_PROJECT_NAME=racketrelease RACKET_VERSION=6.11.0.2 RACKET_INSTALLER_HOST=www.cs.utah.edu diff --git a/environments/release.env b/environments/release.env index 949ac31..4cf6f1a 100644 --- a/environments/release.env +++ b/environments/release.env @@ -1,6 +1,7 @@ # Environment file that tells docker-compose to use release installers obtained # from the mirror.racket-lang.org site. +COMPOSE_PROJECT_NAME=racketrelease RACKET_INSTALLER_HOST=mirror.racket-lang.org RACKET_INSTALLER_PATH_PREFIX==/installers/${RACKET_VERSION} diff --git a/environments/snapshot.env b/environments/snapshot.env index 8881e53..886221c 100644 --- a/environments/snapshot.env +++ b/environments/snapshot.env @@ -2,6 +2,7 @@ # installer. The version still has to be specified, even though snapshots # besides the most recent one can't be installed. +COMPOSE_PROJECT_NAME=racketrelease RACKET_INSTALLER_HOST=www.cs.utah.edu RACKET_INSTALLER_PATH_PREFIX=/plt/snapshots/current/installers From 2f1683f5fb6c8955c2cd25f939b9517beac6160d Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Thu, 23 Nov 2017 19:50:25 -0800 Subject: [PATCH 03/26] Add a Dockerfile for docker-compose-in-docker --- Dockerfile.compose | 4 ++++ docker-compose.yml | 6 ++++++ 2 files changed, 10 insertions(+) create mode 100644 Dockerfile.compose diff --git a/Dockerfile.compose b/Dockerfile.compose new file mode 100644 index 0000000..dc10a10 --- /dev/null +++ b/Dockerfile.compose @@ -0,0 +1,4 @@ +FROM buildpack-deps:jessie + +RUN curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose +RUN chmod +x /usr/local/bin/docker-compose diff --git a/docker-compose.yml b/docker-compose.yml index 37a28df..478c25d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -69,6 +69,12 @@ services: - novnc - websockify + docker-compose: + image: docker-compose + build: + context: . + dockerfile: Dockerfile.compose + racket-x86: image: racket-x86 build: From ea4aa55a64f957bbd5bb1a89ad92dc79a3859f25 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Thu, 23 Nov 2017 19:55:12 -0800 Subject: [PATCH 04/26] Wrap test building and running inside a "test runner" service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of defining, building, and running each set of test services for each installer we define a single “test runner” service. This test runner contains a parameterized docker compose configuration for building and running the tests of a single installer variant. The outer docker-compose specifies that the containerized test runner’s docker-compose should mount the host docker socket, ensuring that the test runner uses the host docker engine instead of an isolated docker engine inside the container. With a small script taking an argument for which installer to test, we can now build and run all the tests for an existing installer image (e.g. `racket-x86`) using `docker-compose run racket-test-runner racket-x86`. --- docker-compose.yml | 101 +++--------------- .../Dockerfile.test | 0 test-runner/Dockerfile.test-runner | 13 +++ test-runner/docker-compose.test-runner.yml | 32 ++++++ test-fail.sh => test-runner/test-fail.sh | 0 test-gui.sh => test-runner/test-gui.sh | 0 test-runner/test-runner.sh | 9 ++ test.sh => test-runner/test.sh | 0 8 files changed, 70 insertions(+), 85 deletions(-) rename Dockerfile.test => test-runner/Dockerfile.test (100%) create mode 100644 test-runner/Dockerfile.test-runner create mode 100644 test-runner/docker-compose.test-runner.yml rename test-fail.sh => test-runner/test-fail.sh (100%) rename test-gui.sh => test-runner/test-gui.sh (100%) create mode 100644 test-runner/test-runner.sh rename test.sh => test-runner/test.sh (100%) diff --git a/docker-compose.yml b/docker-compose.yml index 478c25d..8dc5593 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,18 +1,7 @@ version: "3.2" -# To build and test everything from scratch: "docker-compose up --build" -# But this runs all tests --- including the memory-hungry db tests --- in -# parallel, causing OOMEs and subsequent container death on typical laptops. - services: - # TODO: This configuration is highly repetitive and should be made more - # abstract. This is likely best achieved with a "test runner container" that - # bind mounts the docker socket and calls the docker REST API from a script - # to programmatically build and test each combination of installater options. - # Doing this in Python would be relatively easy, since there's already an - # official and supported docker client python library. - # TODO: From-source builds aren't included yet, but they're not difficult to # add. Neither are minimal-with-prebuilt-pkgs installations, unix-style # installations, or tests for installation uninstall scripts. Doing this @@ -75,6 +64,22 @@ services: context: . dockerfile: Dockerfile.compose + racket-test-runner: + build: + context: ./test-runner + dockerfile: Dockerfile.test-runner + args: + DOCKER_COMPOSE_IMAGE: docker-compose + environment: + COMPOSE_PROJECT_NAME: rackettest + RACKET_GUI_X11_HOST: xvfb + RACKET_GUI_X11_NETWORK: "${COMPOSE_PROJECT_NAME}_default" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + depends_on: + - xvfb + command: racket-x86 + racket-x86: image: racket-x86 build: @@ -91,21 +96,6 @@ services: RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_64}" RACKET_INSTALLER_DIST: "${RACKET_DIST_FULL}" command: racket -e '(+ 1 2)' - racket-x86-test: - image: racket-x86-test - build: - context: . - dockerfile: Dockerfile.test - args: - RACKET_IMAGE: racket-x86 - command: ["/bin/sh", "-c", "/usr/bin/racket-tests.sh"] - racket-x86-test-gui: &gui-test-service - image: racket-x86-test - environment: - DISPLAY: xvfb:0.0 - depends_on: - - xvfb - command: ["/bin/sh", "-c", "/usr/bin/racket-gui-tests.sh"] racket-x86-minimal: image: racket-x86-minimal @@ -123,17 +113,6 @@ services: RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_64}" RACKET_INSTALLER_DIST: "${RACKET_DIST_MINIMAL}" command: racket -e '(+ 1 2)' - racket-x86-minimal-test: - image: racket-x86-minimal-test - build: - context: . - dockerfile: Dockerfile.test - args: - RACKET_IMAGE: racket-x86-minimal - command: ["/bin/sh", "-c", "/usr/bin/racket-tests.sh"] - racket-x86-minimal-test-gui: - <<: *gui-test-service - image: racket-x86-minimal-test racket-i386: image: racket-i386 @@ -149,17 +128,6 @@ services: RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_32}" RACKET_INSTALLER_DIST: "${RACKET_DIST_FULL}" command: racket -e '(+ 1 2)' - racket-i386-test: - image: racket-i386-test - build: - context: . - dockerfile: Dockerfile.test - args: - RACKET_IMAGE: racket-i386 - command: ["/bin/sh", "-c", "/usr/bin/racket-tests.sh"] - racket-i386-test-gui: - <<: *gui-test-service - image: racket-i386-test racket-i386-minimal: image: racket-i386-minimal @@ -173,21 +141,6 @@ services: RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_32}" RACKET_INSTALLER_DIST: "${RACKET_DIST_MINIMAL}" command: racket -e '(+ 1 2)' - racket-i386-minimal-test: - image: racket-i386-minimal-test - build: - context: . - dockerfile: Dockerfile.test - args: - RACKET_IMAGE: racket-i386-minimal - command: ["/bin/sh", "-c", "/usr/bin/racket-tests.sh"] - racket-i386-minimal-test-gui: - <<: *gui-test-service - image: racket-i386-minimal-test - - # TODO: Figure out why natipkg builds are failing. Seems to be related to - # problems with the libssl and libcrypto (OpenSSL libs) libs included in the - # racket-x86_64-linux-natipkg-2 package. racket-x86-natipkg: image: racket-x86-natipkg @@ -199,17 +152,6 @@ services: RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_NATIPKG_64}" RACKET_INSTALLER_DIST: "${RACKET_DIST_FULL}" command: racket -e '(+ 1 2)' - racket-x86-natipkg-test: - image: racket-x86-natipkg-test - build: - context: . - dockerfile: Dockerfile.test - args: - RACKET_IMAGE: racket-x86-natipkg - command: ["/bin/sh", "-c", "/usr/bin/racket-tests.sh"] - racket-x86-natipkg-test-gui: - <<: *gui-test-service - image: racket-x86-natipkg-test racket-x86-natipkg-minimal: image: racket-x86-natipkg-minimal @@ -221,17 +163,6 @@ services: RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_NATIPKG_64}" RACKET_INSTALLER_DIST: "${RACKET_DIST_MINIMAL}" command: racket -e '(+ 1 2)' - racket-x86-natipkg-minimal-test: - image: racket-x86-natipkg-minimal-test - build: - context: . - dockerfile: Dockerfile.test - args: - RACKET_IMAGE: racket-x86-natipkg-minimal - command: ["/bin/sh", "-c", "/usr/bin/racket-tests.sh"] - racket-x86-natipkg-minimal-test-gui: - <<: *gui-test-service - image: racket-x86-natipkg-minimal-test volumes: nginx-html: diff --git a/Dockerfile.test b/test-runner/Dockerfile.test similarity index 100% rename from Dockerfile.test rename to test-runner/Dockerfile.test diff --git a/test-runner/Dockerfile.test-runner b/test-runner/Dockerfile.test-runner new file mode 100644 index 0000000..ee1d29c --- /dev/null +++ b/test-runner/Dockerfile.test-runner @@ -0,0 +1,13 @@ +ARG DOCKER_COMPOSE_IMAGE + +FROM ${DOCKER_COMPOSE_IMAGE} + +RUN mkdir /etc/racket-test-runner +COPY ./docker-compose.test-runner.yml /etc/racket-test-runner/docker-compose.yml +COPY ./Dockerfile.test /etc/racket-test-runner/Dockerfile.test +COPY ./test.sh /etc/racket-test-runner/test.sh +COPY ./test-gui.sh /etc/racket-test-runner/test-gui.sh + +COPY ./test-runner.sh /usr/bin/racket-test-runner +RUN chmod +x /usr/bin/racket-test-runner +ENTRYPOINT ["racket-test-runner"] diff --git a/test-runner/docker-compose.test-runner.yml b/test-runner/docker-compose.test-runner.yml new file mode 100644 index 0000000..3f57076 --- /dev/null +++ b/test-runner/docker-compose.test-runner.yml @@ -0,0 +1,32 @@ +version: "3.2" + +services: + test-base: + image: test-base + build: + context: /etc/racket-test-runner + dockerfile: Dockerfile.test + args: + RACKET_IMAGE: ${RACKET_IMAGE} + networks: + - x11 + test-nogui: + image: test-base + command: ["/bin/sh", "-c", "/usr/bin/racket-tests.sh"] + networks: + - x11 + test-gui: + image: test-base + command: ["/bin/sh", "-c", "/usr/bin/racket-gui-tests.sh"] + environment: + DISPLAY: ${RACKET_GUI_X11_HOST}:0.0 + networks: + - x11 + +networks: + default: + external: + name: ${RACKET_GUI_X11_NETWORK} + x11: + external: + name: ${RACKET_GUI_X11_NETWORK} diff --git a/test-fail.sh b/test-runner/test-fail.sh similarity index 100% rename from test-fail.sh rename to test-runner/test-fail.sh diff --git a/test-gui.sh b/test-runner/test-gui.sh similarity index 100% rename from test-gui.sh rename to test-runner/test-gui.sh diff --git a/test-runner/test-runner.sh b/test-runner/test-runner.sh new file mode 100644 index 0000000..b11a21b --- /dev/null +++ b/test-runner/test-runner.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -eufx + +RACKET_IMAGE=$1 +export RACKET_IMAGE + +docker-compose -f /etc/racket-test-runner/docker-compose.yml -p ${RACKET_IMAGE} build --force-rm test-base +docker-compose -f /etc/racket-test-runner/docker-compose.yml -p ${RACKET_IMAGE} run --rm test-nogui +docker-compose -f /etc/racket-test-runner/docker-compose.yml -p ${RACKET_IMAGE} run --rm test-gui diff --git a/test.sh b/test-runner/test.sh similarity index 100% rename from test.sh rename to test-runner/test.sh From 38629a9432600dc5bc5c2e8c2173d89c55bb3a1d Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Thu, 23 Nov 2017 20:00:35 -0800 Subject: [PATCH 05/26] Update travis configuration to use release tester --- .travis.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 077b371..00d52a9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,11 +21,9 @@ before_install: - sudo apt-get -y install docker-ce install: + - docker-compose build docker-compose + - docker-compose build racket-release-tester - docker-compose build ${INSTALLATION} - - docker-compose build ${INSTALLATION}-test - - docker-compose build ${INSTALLATION}-test-gui script: - - docker-compose run ${INSTALLATION} - - docker-compose run ${INSTALLATION}-test - - docker-compose run ${INSTALLATION}-test-gui + - docker-compose run racket-release-tester ${INSTALLATION} From 185f28ef013c07550a2788bcaf20d26d19d15a63 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Thu, 23 Nov 2017 20:20:08 -0800 Subject: [PATCH 06/26] Change some names Also fixes naming mismatch between Travis and docker-compose --- .travis.yml | 4 ++-- docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 00d52a9..0b3cdd9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,8 +22,8 @@ before_install: install: - docker-compose build docker-compose - - docker-compose build racket-release-tester + - docker-compose build test-runner - docker-compose build ${INSTALLATION} script: - - docker-compose run racket-release-tester ${INSTALLATION} + - docker-compose run test-runner ${INSTALLATION} diff --git a/docker-compose.yml b/docker-compose.yml index 8dc5593..3710ef0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -64,7 +64,7 @@ services: context: . dockerfile: Dockerfile.compose - racket-test-runner: + test-runner: build: context: ./test-runner dockerfile: Dockerfile.test-runner From ab1441a9604f3746cf4e02f1e302390e09498deb Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Thu, 23 Nov 2017 22:35:10 -0800 Subject: [PATCH 07/26] Simplify compose file naming --- test-runner/Dockerfile.test-runner | 2 +- .../{docker-compose.test-runner.yml => docker-compose.yml} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename test-runner/{docker-compose.test-runner.yml => docker-compose.yml} (100%) diff --git a/test-runner/Dockerfile.test-runner b/test-runner/Dockerfile.test-runner index ee1d29c..4e2b671 100644 --- a/test-runner/Dockerfile.test-runner +++ b/test-runner/Dockerfile.test-runner @@ -3,7 +3,7 @@ ARG DOCKER_COMPOSE_IMAGE FROM ${DOCKER_COMPOSE_IMAGE} RUN mkdir /etc/racket-test-runner -COPY ./docker-compose.test-runner.yml /etc/racket-test-runner/docker-compose.yml +COPY ./docker-compose.yml /etc/racket-test-runner/docker-compose.yml COPY ./Dockerfile.test /etc/racket-test-runner/Dockerfile.test COPY ./test.sh /etc/racket-test-runner/test.sh COPY ./test-gui.sh /etc/racket-test-runner/test-gui.sh diff --git a/test-runner/docker-compose.test-runner.yml b/test-runner/docker-compose.yml similarity index 100% rename from test-runner/docker-compose.test-runner.yml rename to test-runner/docker-compose.yml From 36b0c85446049a44c05283ee2fe464160588a882 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 04:56:42 -0800 Subject: [PATCH 08/26] Wrap in-place installation inside an "installer" service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Similar to the test-runner service. The installer service consumes a Racket installer and executes it, producing an image containing a Racket installation. This is defined in terms of “installer types” and “installation types”. An installer type identifies a particular artifact available for download from a version-specific Racket installers website such as a 64-bit linux installation script. An “installation type” is a particular way of executing an installer, since some installers can be installed in multiple different ways. Currently the only implemented installation type is “script-inplace”, meaning an in-place install of a Linux shell script installer. By wrapping installation in a service, new installation types can be defined with a linear amount of configuration in the number of installation types. --- installer/Dockerfile.installer | 11 +++++++++++ installer/Dockerfile.script-inplace | 21 +++++++++++++++++++++ installer/docker-compose.yml | 12 ++++++++++++ installer/installer.sh | 11 +++++++++++ 4 files changed, 55 insertions(+) create mode 100644 installer/Dockerfile.installer create mode 100644 installer/Dockerfile.script-inplace create mode 100644 installer/docker-compose.yml create mode 100644 installer/installer.sh diff --git a/installer/Dockerfile.installer b/installer/Dockerfile.installer new file mode 100644 index 0000000..430d731 --- /dev/null +++ b/installer/Dockerfile.installer @@ -0,0 +1,11 @@ +ARG DOCKER_COMPOSE_IMAGE + +FROM ${DOCKER_COMPOSE_IMAGE} + +RUN mkdir /etc/racket-installer +COPY ./docker-compose.yml /etc/racket-installer/docker-compose.yml +COPY ./Dockerfile.script-inplace /etc/racket-installer/Dockerfile.script-inplace + +COPY ./installer.sh /usr/bin/racket-installer +RUN chmod +x /usr/bin/racket-installer +ENTRYPOINT ["racket-installer"] diff --git a/installer/Dockerfile.script-inplace b/installer/Dockerfile.script-inplace new file mode 100644 index 0000000..1ec0b23 --- /dev/null +++ b/installer/Dockerfile.script-inplace @@ -0,0 +1,21 @@ +ARG RACKET_BASE_IMAGE +ARG INSTALLER_IMAGE + +FROM ${INSTALLER_IMAGE} AS download + +FROM ${RACKET_BASE_IMAGE} AS installation +ARG INSTALLER_PATH + +COPY --from=download ${INSTALLER_PATH} /usr/share/racket-installer/installer.sh +RUN sh /usr/share/racket-installer/installer.sh --in-place --create-dir --dest /usr/racket + +FROM ${RACKET_BASE_IMAGE} + +RUN mkdir /home/racket +ENV RACKET_DIRS="/usr/racket /home/racket" +ENV SSL_CERT_FILE="/usr/lib/ssl/cert.pem" +ENV SSL_CERT_DIR="/usr/lib/ssl/certs" +COPY --from=installation /usr/racket /usr/racket +ENV PATH="/usr/racket/bin:${PATH}" +RUN raco setup +CMD ["racket"] diff --git a/installer/docker-compose.yml b/installer/docker-compose.yml new file mode 100644 index 0000000..de3bea1 --- /dev/null +++ b/installer/docker-compose.yml @@ -0,0 +1,12 @@ +version: "3.2" + +services: + script-inplace: + image: racket-${INSTALLER_TYPE}-script-inplace + build: + context: /etc/racket-installer + dockerfile: Dockerfile.script-inplace + args: + RACKET_BASE_IMAGE: ${RACKET_BASE_IMAGE} + INSTALLER_IMAGE: download-${INSTALLER_TYPE} + INSTALLER_PATH: ${INSTALLER_PATH} diff --git a/installer/installer.sh b/installer/installer.sh new file mode 100644 index 0000000..18f4f00 --- /dev/null +++ b/installer/installer.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -eufx + +INSTALLER_TYPE=$1 +INSTALLATION_TYPE=$2 + +export INSTALLATION_TYPE +export INSTALLER_TYPE + +docker-compose -f /etc/racket-installer/docker-compose.yml -p ${INSTALLER_TYPE} build --force-rm ${INSTALLATION_TYPE} +docker-compose -f /etc/racket-installer/docker-compose.yml -p ${INSTALLER_TYPE} run --rm ${INSTALLATION_TYPE} racket --version From 02fddd5e8415c63be9d4760d8da2dd56cb50cda7 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 04:58:22 -0800 Subject: [PATCH 09/26] Add a downloader Dockerfile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The only installation step not contained by the installer service is actually downloading an installer. This small downloader will be combined with the installer service to replace the existing “Dockerfile.installer” way of building installation images. --- Dockerfile.download | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Dockerfile.download diff --git a/Dockerfile.download b/Dockerfile.download new file mode 100644 index 0000000..4e390c6 --- /dev/null +++ b/Dockerfile.download @@ -0,0 +1,15 @@ +FROM buildpack-deps:jessie-curl AS wget + +ARG RACKET_VERSION +ARG RACKET_INSTALLER_PLATFORM +ARG RACKET_INSTALLER_DIST +ARG RACKET_INSTALLER_HOST +ARG RACKET_INSTALLER_PATH_PREFIX + +ENV RACKET_INSTALLER_URL="https://${RACKET_INSTALLER_HOST}${RACKET_INSTALLER_PATH_PREFIX}/${RACKET_INSTALLER_DIST}-${RACKET_VERSION}-${RACKET_INSTALLER_PLATFORM}.sh" +RUN mkdir -p /usr/share/racket-download +RUN wget --quiet -O /usr/share/racket-download/installer ${RACKET_INSTALLER_URL} + +FROM scratch + +COPY --from=wget /usr/share/racket-download/installer /usr/share/racket-download/installer From 97b2a373f3143e3f48430f712dee217e481d344b Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 04:59:39 -0800 Subject: [PATCH 10/26] Remove unneeded test-runner env var The COMPOSE_PROJECT_NAME var is already set by the test-runner.sh script so this is a no-op. --- docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 3710ef0..3d82c24 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -71,7 +71,6 @@ services: args: DOCKER_COMPOSE_IMAGE: docker-compose environment: - COMPOSE_PROJECT_NAME: rackettest RACKET_GUI_X11_HOST: xvfb RACKET_GUI_X11_NETWORK: "${COMPOSE_PROJECT_NAME}_default" volumes: From fba47bd8525c5c9971fc863cd0d2cde0fd73acf5 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 05:01:04 -0800 Subject: [PATCH 11/26] Add installer service to root docker-compose config --- docker-compose.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 3d82c24..5b45850 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -64,6 +64,18 @@ services: context: . dockerfile: Dockerfile.compose + installer: + build: + context: ./installer + dockerfile: Dockerfile.installer + args: + DOCKER_COMPOSE_IMAGE: docker-compose + environment: + RACKET_BASE_IMAGE: ${RACKET_BASE_IMAGE:-buildpack-deps:jessie} + INSTALLER_PATH: /usr/share/racket-download/installer + volumes: + - /var/run/docker.sock:/var/run/docker.sock + test-runner: build: context: ./test-runner From f6418ba0d3848102da210d23a7d1e56562fae9fd Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 05:06:06 -0800 Subject: [PATCH 12/26] Make root docker-compose pass downloads to installer service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each of the “racket-foo” services is now a “download-{installer-type}” service that only downloads the correct installer from the installers site determined by .env configuration. To build an installation, first build the download and then run `docker-compose run installer {installer-type} {installation-type}`, producing an image named `racket-{installer-type}-{installation-type}`, such as `racket-download-linux-32-ospkg-minimal-script-inplace`. --- Dockerfile.installer | 34 ----------------------------- docker-compose.yml | 52 +++++++++++++++++--------------------------- 2 files changed, 20 insertions(+), 66 deletions(-) delete mode 100644 Dockerfile.installer diff --git a/Dockerfile.installer b/Dockerfile.installer deleted file mode 100644 index aee2e02..0000000 --- a/Dockerfile.installer +++ /dev/null @@ -1,34 +0,0 @@ -# We use a three-image pipeline composed of an image to download the installer, -# an image to execute the installer, and an image containing the final -# extracted Racket installation. The buildpack-deps image repository is used by -# default because it's the official image used by all other official language -# runtime images (python, node, ruby, etc.). Following that convention -# cooperates very nicely with Docker's caching and means we get many useful OS -# packages by default. - -ARG RACKET_IMAGE_FOR_DOWNLOADER=buildpack-deps:jessie-curl -ARG RACKET_IMAGE_FOR_INSTALLER=buildpack-deps:jessie -ARG RACKET_IMAGE_FOR_RUNTIME=buildpack-deps:jessie - -FROM ${RACKET_IMAGE_FOR_DOWNLOADER} AS downloader - -ARG RACKET_VERSION -ARG RACKET_INSTALLER_PLATFORM -ARG RACKET_INSTALLER_DIST -ARG RACKET_INSTALLER_HOST -ARG RACKET_INSTALLER_PATH_PREFIX - -ENV RACKET_INSTALLER_URL="https://${RACKET_INSTALLER_HOST}${RACKET_INSTALLER_PATH_PREFIX}/${RACKET_INSTALLER_DIST}-${RACKET_VERSION}-${RACKET_INSTALLER_PLATFORM}.sh" -RUN wget --quiet -O "/tmp/racket-installer" "${RACKET_INSTALLER_URL}" - -FROM ${RACKET_IMAGE_FOR_INSTALLER} AS installer -COPY --from=downloader /tmp/racket-installer /tmp/racket-installer -RUN sh /tmp/racket-installer --in-place --create-dir --dest /usr/racket - -FROM ${RACKET_IMAGE_FOR_RUNTIME} -COPY --from=installer /usr/racket /usr/racket -ENV PATH="/usr/racket/bin:${PATH}" -ENV SSL_CERT_FILE="/usr/lib/ssl/cert.pem" -ENV SSL_CERT_DIR="/usr/lib/ssl/certs" -RUN raco setup -CMD ["racket"] diff --git a/docker-compose.yml b/docker-compose.yml index 5b45850..9f80fa8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -91,28 +91,27 @@ services: - xvfb command: racket-x86 - racket-x86: - image: racket-x86 + download-linux-64-ospkg-full: + image: download-linux-64-ospkg-full build: context: . - dockerfile: Dockerfile.installer + dockerfile: Dockerfile.download # We use a YAML anchor for the build args to set a common version, # installer website, and installer path for building all installation - # service images. See racket-x86-minimal.build.args for an example of how - # the anchor is used. + # service images. See download-linux-64-ospkg-minimal.build.args for an + # example of how the anchor is used. args: &default-build-args RACKET_VERSION: "${RACKET_VERSION}" RACKET_INSTALLER_HOST: "${RACKET_INSTALLER_HOST}" RACKET_INSTALLER_PATH_PREFIX: "${RACKET_INSTALLER_PATH_PREFIX}" RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_64}" RACKET_INSTALLER_DIST: "${RACKET_DIST_FULL}" - command: racket -e '(+ 1 2)' - racket-x86-minimal: - image: racket-x86-minimal + download-linux-64-ospkg-minimal: + image: download-linux-64-ospkg-minimal build: context: . - dockerfile: Dockerfile.installer + dockerfile: Dockerfile.download args: # We import the default build args and overwrite the desired platform # and distribution type. The platform defaults to x86_64 linux already @@ -123,57 +122,46 @@ services: <<: *default-build-args RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_64}" RACKET_INSTALLER_DIST: "${RACKET_DIST_MINIMAL}" - command: racket -e '(+ 1 2)' - racket-i386: - image: racket-i386 + download-linux-32-ospkg-full: + image: download-linux-32-ospkg-full build: context: . - dockerfile: Dockerfile.installer + dockerfile: Dockerfile.download args: <<: *default-build-args - # Base images changed to i386 variants, as using the default images - # won't compile due to architecture assumptions. - RACKET_IMAGE_FOR_INSTALLER: i386/buildpack-deps - RACKET_IMAGE_FOR_RUNTIME: i386/buildpack-deps RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_32}" RACKET_INSTALLER_DIST: "${RACKET_DIST_FULL}" - command: racket -e '(+ 1 2)' - racket-i386-minimal: - image: racket-i386-minimal + download-linux-32-ospkg-minimal: + image: download-linux-32-ospkg-minimal build: context: . - dockerfile: Dockerfile.installer + dockerfile: Dockerfile.download args: <<: *default-build-args - RACKET_IMAGE_FOR_INSTALLER: i386/buildpack-deps - RACKET_IMAGE_FOR_RUNTIME: i386/buildpack-deps RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_32}" RACKET_INSTALLER_DIST: "${RACKET_DIST_MINIMAL}" - command: racket -e '(+ 1 2)' - racket-x86-natipkg: - image: racket-x86-natipkg + download-linux-64-natipkg-full: + image: download-linux-64-natipkg-full build: context: . - dockerfile: Dockerfile.installer + dockerfile: Dockerfile.download args: <<: *default-build-args RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_NATIPKG_64}" RACKET_INSTALLER_DIST: "${RACKET_DIST_FULL}" - command: racket -e '(+ 1 2)' - racket-x86-natipkg-minimal: - image: racket-x86-natipkg-minimal + download-linux-64-natipkg-minimal: + image: download-linux-64-natipkg-minimal build: context: . - dockerfile: Dockerfile.installer + dockerfile: Dockerfile.download args: <<: *default-build-args RACKET_INSTALLER_PLATFORM: "${RACKET_PLATFORM_LINUX_NATIPKG_64}" RACKET_INSTALLER_DIST: "${RACKET_DIST_MINIMAL}" - command: racket -e '(+ 1 2)' volumes: nginx-html: From e27a85f76e732c13a8436d7f2413513cd3451e63 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 05:07:15 -0800 Subject: [PATCH 13/26] Rely on installer to define what dirs are racket-owned --- test-runner/Dockerfile.test | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test-runner/Dockerfile.test b/test-runner/Dockerfile.test index 8c1b523..68cc617 100644 --- a/test-runner/Dockerfile.test +++ b/test-runner/Dockerfile.test @@ -14,11 +14,9 @@ RUN raco pkg install --auto --installation --skip-installed \ raco-find-collection \ https://github.com/racket/pcps-test.git -RUN mkdir /home/racket \ - && groupadd -r racket \ +RUN groupadd -r racket \ && useradd --no-log-init -r -g racket racket \ - && chown -R racket:racket /home/racket \ - && chown -R racket:racket /usr/racket + && chown -R racket:racket ${RACKET_DIRS} COPY ./test.sh /usr/bin/racket-tests.sh COPY ./test-gui.sh /usr/bin/racket-gui-tests.sh From 9ae3765f683afe1c1c568410e1402bac536c4df8 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 05:09:27 -0800 Subject: [PATCH 14/26] Update travis config Note: this uses the fancy YAML syntax >- in order to write env vars on multiple lines with newline characters replaced by spaces. --- .travis.yml | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0b3cdd9..b7cd4e4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,21 @@ sudo: required env: - - INSTALLATION=racket-x86 - - INSTALLATION=racket-x86-minimal + - >- INSTALLER_TYPE=linux-64-ospkg-full + INSTALLATION_TYPE=script-inplace + - >- INSTALLER_TYPE=linux-64-ospkg-minimal + INSTALLATION_TYPE=script-inplace + - >- INSTALLER_TYPE=linux-64-natipkg-full + INSTALLATION_TYPE=script-inplace + - >- INSTALLER_TYPE=linux-64-natipkg-minimal + INSTALLATION_TYPE=script-inplace # Temporarily disabled due to Typed Racket GUI test failures related to # extflonums and 32-bit builds, see racket/typed-racket#652 - # - INSTALLATION=racket-i386 - # - INSTALLATION=racket-i386-minimal - - INSTALLATION=racket-x86-natipkg - - INSTALLATION=racket-x86-natipkg-minimal + # - >- INSTALLER_TYPE=linux-32-ospkg-full + # INSTALLATION_TYPE=script-inplace + # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie + # - >- INSTALLER_TYPE=linux-32-ospkg-minimal + # INSTALLATION_TYPE=script-inplace services: - docker @@ -19,11 +26,16 @@ before_install: - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" - sudo apt-get update - sudo apt-get -y install docker-ce - -install: + # We build these in before_install because they're prerequisite services and + # tools, not the installer itself - docker-compose build docker-compose + - docker-compose build xvfb + - docker-compose build installer - docker-compose build test-runner - - docker-compose build ${INSTALLATION} + +install: + - docker-compose build download-${INSTALLER_TYPE} script: - - docker-compose run test-runner ${INSTALLATION} + - docker-compose run installer ${INSTALLER_TYPE} ${INSTALLATION_TYPE} + - docker-compose run test-runner racket-${INSTALLER_TYPE}-${INSTALLATION_TYPE} From d680648a019e108c17acbe4b5a3519df9b2c4cf7 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 05:14:30 -0800 Subject: [PATCH 15/26] Try different fancy YAML syntax YAML is an abomination. --- .travis.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index b7cd4e4..70961bd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,21 +1,21 @@ sudo: required env: - - >- INSTALLER_TYPE=linux-64-ospkg-full - INSTALLATION_TYPE=script-inplace - - >- INSTALLER_TYPE=linux-64-ospkg-minimal - INSTALLATION_TYPE=script-inplace - - >- INSTALLER_TYPE=linux-64-natipkg-full - INSTALLATION_TYPE=script-inplace - - >- INSTALLER_TYPE=linux-64-natipkg-minimal - INSTALLATION_TYPE=script-inplace + - | INSTALLER_TYPE=linux-64-ospkg-full + INSTALLATION_TYPE=script-inplace + - | INSTALLER_TYPE=linux-64-ospkg-minimal + INSTALLATION_TYPE=script-inplace + - | INSTALLER_TYPE=linux-64-natipkg-full + INSTALLATION_TYPE=script-inplace + - | INSTALLER_TYPE=linux-64-natipkg-minimal + INSTALLATION_TYPE=script-inplace # Temporarily disabled due to Typed Racket GUI test failures related to # extflonums and 32-bit builds, see racket/typed-racket#652 - # - >- INSTALLER_TYPE=linux-32-ospkg-full - # INSTALLATION_TYPE=script-inplace - # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie - # - >- INSTALLER_TYPE=linux-32-ospkg-minimal - # INSTALLATION_TYPE=script-inplace + # - | INSTALLER_TYPE=linux-32-ospkg-full + # INSTALLATION_TYPE=script-inplace + # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie + # - | INSTALLER_TYPE=linux-32-ospkg-minimal + # INSTALLATION_TYPE=script-inplace services: - docker From 88b477bfcab67bf30ff79942b480db99e2d15fea Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 05:19:21 -0800 Subject: [PATCH 16/26] Sigh --- .travis.yml | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 70961bd..fa2e37a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,21 +1,28 @@ sudo: required env: - - | INSTALLER_TYPE=linux-64-ospkg-full - INSTALLATION_TYPE=script-inplace - - | INSTALLER_TYPE=linux-64-ospkg-minimal - INSTALLATION_TYPE=script-inplace - - | INSTALLER_TYPE=linux-64-natipkg-full - INSTALLATION_TYPE=script-inplace - - | INSTALLER_TYPE=linux-64-natipkg-minimal - INSTALLATION_TYPE=script-inplace + - | + INSTALLER_TYPE=linux-64-ospkg-full + INSTALLATION_TYPE=script-inplace + - | + INSTALLER_TYPE=linux-64-ospkg-minimal + INSTALLATION_TYPE=script-inplace + - | + INSTALLER_TYPE=linux-64-natipkg-full + INSTALLATION_TYPE=script-inplace + - | + INSTALLER_TYPE=linux-64-natipkg-minimal + INSTALLATION_TYPE=script-inplace # Temporarily disabled due to Typed Racket GUI test failures related to # extflonums and 32-bit builds, see racket/typed-racket#652 - # - | INSTALLER_TYPE=linux-32-ospkg-full - # INSTALLATION_TYPE=script-inplace - # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie - # - | INSTALLER_TYPE=linux-32-ospkg-minimal - # INSTALLATION_TYPE=script-inplace + # - | + # INSTALLER_TYPE=linux-32-ospkg-full + # INSTALLATION_TYPE=script-inplace + # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie + # - | + # INSTALLER_TYPE=linux-32-ospkg-minimal + # INSTALLATION_TYPE=script-inplace + # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie services: - docker From 876705316f103e1c11557fa2ea603408d40ec330 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 16:40:03 -0800 Subject: [PATCH 17/26] Avoid running everything twice in Travis --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index fa2e37a..4616261 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,12 @@ sudo: required +# Test pushes to master and pull requests to master, but don't test other +# branches. Without this, pushing to a same-repository PR causes Travis to run +# everything twice. +branches: + only: + - "master" + env: - | INSTALLER_TYPE=linux-64-ospkg-full From 78c45fbf3284dd2b668a7b3d2dbb49da7379704c Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 16:40:17 -0800 Subject: [PATCH 18/26] Remove broken default command --- docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9f80fa8..ba28e54 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -89,7 +89,6 @@ services: - /var/run/docker.sock:/var/run/docker.sock depends_on: - xvfb - command: racket-x86 download-linux-64-ospkg-full: image: download-linux-64-ospkg-full From 3bbf61fe8d98f1ad50294e9cc1f175e41197767a Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 16:40:59 -0800 Subject: [PATCH 19/26] Simplify installer script with an alias for docker-compose --- installer/installer.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/installer/installer.sh b/installer/installer.sh index 18f4f00..bc0c94a 100644 --- a/installer/installer.sh +++ b/installer/installer.sh @@ -7,5 +7,7 @@ INSTALLATION_TYPE=$2 export INSTALLATION_TYPE export INSTALLER_TYPE -docker-compose -f /etc/racket-installer/docker-compose.yml -p ${INSTALLER_TYPE} build --force-rm ${INSTALLATION_TYPE} -docker-compose -f /etc/racket-installer/docker-compose.yml -p ${INSTALLER_TYPE} run --rm ${INSTALLATION_TYPE} racket --version +alias installer-compose="docker-compose -f /etc/racket-installer/docker-compose.yml -p ${INSTALLER_TYPE}" + +installer-compose build --force-rm ${INSTALLATION_TYPE} +installer-compose run --rm ${INSTALLATION_TYPE} racket --version From a5c287c17698c95c7e09e0e30bf0bddf4a084670 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 16:41:54 -0800 Subject: [PATCH 20/26] Change and simplify x11 network config passing --- docker-compose.yml | 4 ++-- test-runner/docker-compose.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index ba28e54..9214c0c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -83,8 +83,8 @@ services: args: DOCKER_COMPOSE_IMAGE: docker-compose environment: - RACKET_GUI_X11_HOST: xvfb - RACKET_GUI_X11_NETWORK: "${COMPOSE_PROJECT_NAME}_default" + RACKET_TESTS_X11_DISPLAY: xvfb:0.0 + RACKET_TESTS_X11_NETWORK: "${COMPOSE_PROJECT_NAME}_default" volumes: - /var/run/docker.sock:/var/run/docker.sock depends_on: diff --git a/test-runner/docker-compose.yml b/test-runner/docker-compose.yml index 3f57076..f5d4438 100644 --- a/test-runner/docker-compose.yml +++ b/test-runner/docker-compose.yml @@ -19,9 +19,9 @@ services: image: test-base command: ["/bin/sh", "-c", "/usr/bin/racket-gui-tests.sh"] environment: - DISPLAY: ${RACKET_GUI_X11_HOST}:0.0 networks: - x11 + DISPLAY: ${RACKET_TESTS_X11_DISPLAY} networks: default: @@ -29,4 +29,4 @@ networks: name: ${RACKET_GUI_X11_NETWORK} x11: external: - name: ${RACKET_GUI_X11_NETWORK} + name: ${RACKET_TESTS_X11_NETWORK} From a49fc13a0d8d91f0fdc54ff7947bb0fcdbf39858 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 16:42:24 -0800 Subject: [PATCH 21/26] Remove unnecessary docker network and use default only --- test-runner/docker-compose.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/test-runner/docker-compose.yml b/test-runner/docker-compose.yml index f5d4438..c1dfbee 100644 --- a/test-runner/docker-compose.yml +++ b/test-runner/docker-compose.yml @@ -8,25 +8,16 @@ services: dockerfile: Dockerfile.test args: RACKET_IMAGE: ${RACKET_IMAGE} - networks: - - x11 test-nogui: image: test-base command: ["/bin/sh", "-c", "/usr/bin/racket-tests.sh"] - networks: - - x11 test-gui: image: test-base command: ["/bin/sh", "-c", "/usr/bin/racket-gui-tests.sh"] environment: - networks: - - x11 DISPLAY: ${RACKET_TESTS_X11_DISPLAY} networks: default: - external: - name: ${RACKET_GUI_X11_NETWORK} - x11: external: name: ${RACKET_TESTS_X11_NETWORK} From 3d83a556617af986ab494f02ccc60bfce8f3b994 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 16:43:53 -0800 Subject: [PATCH 22/26] Split tests into suites chosen by command argument --- test-runner/Dockerfile.test | 12 ++++++------ test-runner/Dockerfile.test-runner | 5 +++-- test-runner/docker-compose.yml | 10 ++-------- test-runner/{test-fail.sh => suite-failing.sh} | 3 +++ test-runner/{test-gui.sh => suite-gui.sh} | 10 ++++++---- test-runner/{test.sh => suite-nogui.sh} | 4 +++- test-runner/test-runner.sh | 8 +++++--- 7 files changed, 28 insertions(+), 24 deletions(-) rename test-runner/{test-fail.sh => suite-failing.sh} (98%) rename test-runner/{test-gui.sh => suite-gui.sh} (98%) rename test-runner/{test.sh => suite-nogui.sh} (99%) diff --git a/test-runner/Dockerfile.test b/test-runner/Dockerfile.test index 68cc617..f5cdf7a 100644 --- a/test-runner/Dockerfile.test +++ b/test-runner/Dockerfile.test @@ -18,11 +18,11 @@ RUN groupadd -r racket \ && useradd --no-log-init -r -g racket racket \ && chown -R racket:racket ${RACKET_DIRS} -COPY ./test.sh /usr/bin/racket-tests.sh -COPY ./test-gui.sh /usr/bin/racket-gui-tests.sh -RUN chmod +x /usr/bin/racket-tests.sh -RUN chmod +x /usr/bin/racket-gui-tests.sh +COPY ./suite-failing.sh /usr/bin/suite-failing +COPY ./suite-gui.sh /usr/bin/suite-gui +COPY ./suite-nogui.sh /usr/bin/suite-nogui +RUN chmod +x /usr/bin/suite-failing +RUN chmod +x /usr/bin/suite-gui +RUN chmod +x /usr/bin/suite-nogui USER racket:racket - -CMD ["/bin/sh", "-c", "/usr/bin/racket-tests.sh"] diff --git a/test-runner/Dockerfile.test-runner b/test-runner/Dockerfile.test-runner index 4e2b671..4bd5f7c 100644 --- a/test-runner/Dockerfile.test-runner +++ b/test-runner/Dockerfile.test-runner @@ -5,8 +5,9 @@ FROM ${DOCKER_COMPOSE_IMAGE} RUN mkdir /etc/racket-test-runner COPY ./docker-compose.yml /etc/racket-test-runner/docker-compose.yml COPY ./Dockerfile.test /etc/racket-test-runner/Dockerfile.test -COPY ./test.sh /etc/racket-test-runner/test.sh -COPY ./test-gui.sh /etc/racket-test-runner/test-gui.sh +COPY ./suite-failing.sh /etc/racket-test-runner/suite-failing.sh +COPY ./suite-gui.sh /etc/racket-test-runner/suite-gui.sh +COPY ./suite-nogui.sh /etc/racket-test-runner/suite-nogui.sh COPY ./test-runner.sh /usr/bin/racket-test-runner RUN chmod +x /usr/bin/racket-test-runner diff --git a/test-runner/docker-compose.yml b/test-runner/docker-compose.yml index c1dfbee..6ce0703 100644 --- a/test-runner/docker-compose.yml +++ b/test-runner/docker-compose.yml @@ -1,19 +1,13 @@ version: "3.2" services: - test-base: - image: test-base + racket-tests: + image: ${RACKET_IMAGE}-tests build: context: /etc/racket-test-runner dockerfile: Dockerfile.test args: RACKET_IMAGE: ${RACKET_IMAGE} - test-nogui: - image: test-base - command: ["/bin/sh", "-c", "/usr/bin/racket-tests.sh"] - test-gui: - image: test-base - command: ["/bin/sh", "-c", "/usr/bin/racket-gui-tests.sh"] environment: DISPLAY: ${RACKET_TESTS_X11_DISPLAY} diff --git a/test-runner/test-fail.sh b/test-runner/suite-failing.sh similarity index 98% rename from test-runner/test-fail.sh rename to test-runner/suite-failing.sh index 08309bf..eb9a9dd 100644 --- a/test-runner/test-fail.sh +++ b/test-runner/suite-failing.sh @@ -1,3 +1,6 @@ +#!/bin/sh +set -eufx + # This script contains test commands that are currently known to fail due to # configuration issues or known bugs. They should be moved into the appropriate # `test.sh` or `test-gui.sh` script once fixed. diff --git a/test-runner/test-gui.sh b/test-runner/suite-gui.sh similarity index 98% rename from test-runner/test-gui.sh rename to test-runner/suite-gui.sh index 664bd1c..9978187 100644 --- a/test-runner/test-gui.sh +++ b/test-runner/suite-gui.sh @@ -1,10 +1,9 @@ +#!/bin/sh +set -eufx + # Like the `test.sh` script, but for GUI tests. These tests require a running X # server (run with xvfb for a fake X backend) and several GUI-related foreign # libraries. -set -eufx - -# samth -racket -l typed-racket-test -- --all # jay raco test -c tests/xml # needs gui libs for XML snips @@ -19,4 +18,7 @@ racket -l 2htdp/tests/test-image raco test -c framework/tests +# samth +racket -l typed-racket-test -- --all + raco test -p pcps-test diff --git a/test-runner/test.sh b/test-runner/suite-nogui.sh similarity index 99% rename from test-runner/test.sh rename to test-runner/suite-nogui.sh index be81119..f5bbba4 100644 --- a/test-runner/test.sh +++ b/test-runner/suite-nogui.sh @@ -1,7 +1,9 @@ +#!/bin/sh +set -eufx + # See "Writing Safe Shell Scripts" at https://sipb.mit.edu/doc/safe-shell/ # Note that this script is run with "sh", not bash, so pipefail isn't a thing # We also set -x in order to see each test command in `docker-compose logs`. -set -eufx # TODO: Ideally, these test suites should all be run with `raco test`. This # enables proper counting of test cases and removes the need for separate diff --git a/test-runner/test-runner.sh b/test-runner/test-runner.sh index b11a21b..b944135 100644 --- a/test-runner/test-runner.sh +++ b/test-runner/test-runner.sh @@ -2,8 +2,10 @@ set -eufx RACKET_IMAGE=$1 +RACKET_TEST_SUITE=$2 export RACKET_IMAGE -docker-compose -f /etc/racket-test-runner/docker-compose.yml -p ${RACKET_IMAGE} build --force-rm test-base -docker-compose -f /etc/racket-test-runner/docker-compose.yml -p ${RACKET_IMAGE} run --rm test-nogui -docker-compose -f /etc/racket-test-runner/docker-compose.yml -p ${RACKET_IMAGE} run --rm test-gui +alias test-runner-compose="docker-compose -f /etc/racket-test-runner/docker-compose.yml -p ${RACKET_IMAGE}" + +test-runner-compose build --force-rm racket-tests +test-runner-compose run --rm racket-tests suite-${RACKET_TEST_SUITE} From b90461e8a1a3462ceb0f5f4968320cdcafe5f6e3 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 16:44:53 -0800 Subject: [PATCH 23/26] Run only non-gui tests in Travis for now --- .travis.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4616261..13df544 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,24 +11,30 @@ env: - | INSTALLER_TYPE=linux-64-ospkg-full INSTALLATION_TYPE=script-inplace + TEST_SUITE=nogui - | INSTALLER_TYPE=linux-64-ospkg-minimal INSTALLATION_TYPE=script-inplace + TEST_SUITE=nogui - | INSTALLER_TYPE=linux-64-natipkg-full INSTALLATION_TYPE=script-inplace + TEST_SUITE=nogui - | INSTALLER_TYPE=linux-64-natipkg-minimal INSTALLATION_TYPE=script-inplace + TEST_SUITE=nogui # Temporarily disabled due to Typed Racket GUI test failures related to # extflonums and 32-bit builds, see racket/typed-racket#652 # - | # INSTALLER_TYPE=linux-32-ospkg-full # INSTALLATION_TYPE=script-inplace + # TEST_SUITE=nogui # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie # - | # INSTALLER_TYPE=linux-32-ospkg-minimal # INSTALLATION_TYPE=script-inplace + # TEST_SUITE=nogui # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie services: @@ -52,4 +58,4 @@ install: script: - docker-compose run installer ${INSTALLER_TYPE} ${INSTALLATION_TYPE} - - docker-compose run test-runner racket-${INSTALLER_TYPE}-${INSTALLATION_TYPE} + - docker-compose run test-runner racket-${INSTALLER_TYPE}-${INSTALLATION_TYPE} ${TEST_SUITE} From 876e101b9f3f0aa70245d401eb1282cbb6ad14f7 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 16:45:19 -0800 Subject: [PATCH 24/26] Move installation to install section instead of script section --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 13df544..f337aea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,7 +55,7 @@ before_install: install: - docker-compose build download-${INSTALLER_TYPE} + - docker-compose run installer ${INSTALLER_TYPE} ${INSTALLATION_TYPE} script: - - docker-compose run installer ${INSTALLER_TYPE} ${INSTALLATION_TYPE} - docker-compose run test-runner racket-${INSTALLER_TYPE}-${INSTALLATION_TYPE} ${TEST_SUITE} From bfb1dcf121cdc68defc4a29fbecf02e9b6d3f4ff Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 24 Nov 2017 17:23:22 -0800 Subject: [PATCH 25/26] Add GUI tests back to Travis --- .travis.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/.travis.yml b/.travis.yml index f337aea..07a2460 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,6 +24,22 @@ env: INSTALLER_TYPE=linux-64-natipkg-minimal INSTALLATION_TYPE=script-inplace TEST_SUITE=nogui + - | + INSTALLER_TYPE=linux-64-ospkg-full + INSTALLATION_TYPE=script-inplace + TEST_SUITE=gui + - | + INSTALLER_TYPE=linux-64-ospkg-minimal + INSTALLATION_TYPE=script-inplace + TEST_SUITE=gui + - | + INSTALLER_TYPE=linux-64-natipkg-full + INSTALLATION_TYPE=script-inplace + TEST_SUITE=gui + - | + INSTALLER_TYPE=linux-64-natipkg-minimal + INSTALLATION_TYPE=script-inplace + TEST_SUITE=gui # Temporarily disabled due to Typed Racket GUI test failures related to # extflonums and 32-bit builds, see racket/typed-racket#652 # - | @@ -36,6 +52,16 @@ env: # INSTALLATION_TYPE=script-inplace # TEST_SUITE=nogui # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie + # - | + # INSTALLER_TYPE=linux-32-ospkg-full + # INSTALLATION_TYPE=script-inplace + # TEST_SUITE=gui + # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie + # - | + # INSTALLER_TYPE=linux-32-ospkg-minimal + # INSTALLATION_TYPE=script-inplace + # TEST_SUITE=gui + # RACKET_BASE_IMAGE=i386/buildpack-deps:jessie services: - docker From 2980dda91ec246b050184715ccf83fe36e5162a1 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Sun, 7 Jan 2018 00:42:33 -0800 Subject: [PATCH 26/26] Update tested racket version --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 57bd6b2..deab684 100644 --- a/.env +++ b/.env @@ -5,7 +5,7 @@ # From: /environments/snapshot.env COMPOSE_PROJECT_NAME=racketrelease -RACKET_VERSION=6.11.0.2 +RACKET_VERSION=6.11.0.6 RACKET_INSTALLER_HOST=www.cs.utah.edu RACKET_INSTALLER_PATH_PREFIX=/plt/snapshots/current/installers