Run Travis CI tests with the latest versions of GCC, Clang, Ubuntu.
diff --git a/.travis.yml b/.travis.yml
index 4ebaa84..e5cf995 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,38 +10,38 @@
   fast_finish: true
   include:
   - compiler: gcc
-    env: COMPILER=gcc-8 UBUNTU=18.04 TEST=ReleasePlain
-    install: export OS=linux; export COMPILER='gcc-8'; export UBUNTU='18.04'; extras/scripts/travis_ci_install_linux.sh
+    env: COMPILER=gcc-8 UBUNTU=18.10 TEST=ReleasePlain
+    install: export OS=linux; export COMPILER='gcc-8'; export UBUNTU='18.10'; extras/scripts/travis_ci_install_linux.sh
     os: linux
-    script: export OS=linux; export COMPILER='gcc-8'; export UBUNTU='18.04'; extras/scripts/postsubmit.sh
+    script: export OS=linux; export COMPILER='gcc-8'; export UBUNTU='18.10'; extras/scripts/postsubmit.sh
       ReleasePlain
   - compiler: gcc
-    env: COMPILER=gcc-8 UBUNTU=18.04 TEST=DebugPlain
-    install: export OS=linux; export COMPILER='gcc-8'; export UBUNTU='18.04'; extras/scripts/travis_ci_install_linux.sh
+    env: COMPILER=gcc-8 UBUNTU=18.10 TEST=DebugPlain
+    install: export OS=linux; export COMPILER='gcc-8'; export UBUNTU='18.10'; extras/scripts/travis_ci_install_linux.sh
     os: linux
-    script: export OS=linux; export COMPILER='gcc-8'; export UBUNTU='18.04'; extras/scripts/postsubmit.sh
+    script: export OS=linux; export COMPILER='gcc-8'; export UBUNTU='18.10'; extras/scripts/postsubmit.sh
       DebugPlain
   - compiler: clang
-    env: COMPILER=clang-6.0 STL=libstdc++ UBUNTU=18.04 TEST=ReleasePlain
-    install: export OS=linux; export COMPILER='clang-6.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/travis_ci_install_linux.sh
+    env: COMPILER=clang-7.0 STL=libstdc++ UBUNTU=18.10 TEST=ReleasePlain
+    install: export OS=linux; export COMPILER='clang-7.0'; export STL='libstdc++';
+      export UBUNTU='18.10'; extras/scripts/travis_ci_install_linux.sh
     os: linux
-    script: export OS=linux; export COMPILER='clang-6.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/postsubmit.sh ReleasePlain
+    script: export OS=linux; export COMPILER='clang-7.0'; export STL='libstdc++';
+      export UBUNTU='18.10'; extras/scripts/postsubmit.sh ReleasePlain
   - compiler: clang
-    env: COMPILER=clang-6.0 STL=libstdc++ UBUNTU=18.04 TEST=DebugAsanUbsan
-    install: export OS=linux; export COMPILER='clang-6.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/travis_ci_install_linux.sh
+    env: COMPILER=clang-7.0 STL=libstdc++ UBUNTU=18.10 TEST=DebugAsanUbsan
+    install: export OS=linux; export COMPILER='clang-7.0'; export STL='libstdc++';
+      export UBUNTU='18.10'; extras/scripts/travis_ci_install_linux.sh
     os: linux
-    script: export OS=linux; export COMPILER='clang-6.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/postsubmit.sh DebugAsanUbsan
+    script: export OS=linux; export COMPILER='clang-7.0'; export STL='libstdc++';
+      export UBUNTU='18.10'; extras/scripts/postsubmit.sh DebugAsanUbsan
   - compiler: clang
-    env: COMPILER=clang-6.0 STL=libstdc++ UBUNTU=18.04 TEST=DebugPlain
-    install: export OS=linux; export COMPILER='clang-6.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/travis_ci_install_linux.sh
+    env: COMPILER=clang-7.0 STL=libstdc++ UBUNTU=18.10 TEST=DebugPlain
+    install: export OS=linux; export COMPILER='clang-7.0'; export STL='libstdc++';
+      export UBUNTU='18.10'; extras/scripts/travis_ci_install_linux.sh
     os: linux
-    script: export OS=linux; export COMPILER='clang-6.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/postsubmit.sh DebugPlain
+    script: export OS=linux; export COMPILER='clang-7.0'; export STL='libstdc++';
+      export UBUNTU='18.10'; extras/scripts/postsubmit.sh DebugPlain
   - compiler: gcc
     env: COMPILER=bazel UBUNTU=16.04
     install: export OS=linux; export COMPILER='bazel'; export UBUNTU='16.04'; extras/scripts/travis_ci_install_linux.sh
@@ -70,33 +70,19 @@
     script: export OS=osx; export COMPILER='clang-default'; export STL='libc++'; extras/scripts/postsubmit.sh
       DebugPlain
   - compiler: clang
-    env: COMPILER=clang-4.0 STL=libstdc++ UBUNTU=18.04 TEST=ReleasePlain
+    env: COMPILER=clang-4.0 STL=libstdc++ UBUNTU=18.10 TEST=ReleasePlain
     install: export OS=linux; export COMPILER='clang-4.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/travis_ci_install_linux.sh
+      export UBUNTU='18.10'; extras/scripts/travis_ci_install_linux.sh
     os: linux
     script: export OS=linux; export COMPILER='clang-4.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/postsubmit.sh ReleasePlain
+      export UBUNTU='18.10'; extras/scripts/postsubmit.sh ReleasePlain
   - compiler: clang
-    env: COMPILER=clang-4.0 STL=libstdc++ UBUNTU=18.04 TEST=DebugAsanUbsan
+    env: COMPILER=clang-4.0 STL=libstdc++ UBUNTU=18.10 TEST=DebugAsanUbsan
     install: export OS=linux; export COMPILER='clang-4.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/travis_ci_install_linux.sh
+      export UBUNTU='18.10'; extras/scripts/travis_ci_install_linux.sh
     os: linux
     script: export OS=linux; export COMPILER='clang-4.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/postsubmit.sh DebugAsanUbsan
-  - compiler: clang
-    env: COMPILER=clang-5.0 STL=libstdc++ UBUNTU=18.04 TEST=ReleasePlain
-    install: export OS=linux; export COMPILER='clang-5.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/travis_ci_install_linux.sh
-    os: linux
-    script: export OS=linux; export COMPILER='clang-5.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/postsubmit.sh ReleasePlain
-  - compiler: clang
-    env: COMPILER=clang-5.0 STL=libstdc++ UBUNTU=18.04 TEST=DebugAsanUbsan
-    install: export OS=linux; export COMPILER='clang-5.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/travis_ci_install_linux.sh
-    os: linux
-    script: export OS=linux; export COMPILER='clang-5.0'; export STL='libstdc++';
-      export UBUNTU='18.04'; extras/scripts/postsubmit.sh DebugAsanUbsan
+      export UBUNTU='18.10'; extras/scripts/postsubmit.sh DebugAsanUbsan
   - compiler: gcc
     env: COMPILER=gcc-5 UBUNTU=14.04 TEST=ReleasePlain
     install: export OS=linux; export COMPILER='gcc-5'; export UBUNTU='14.04'; extras/scripts/travis_ci_install_linux.sh
diff --git a/extras/dockerfiles/Dockerfile.ubuntu-18.10 b/extras/dockerfiles/Dockerfile.ubuntu-18.10
new file mode 100644
index 0000000..09bd008
--- /dev/null
+++ b/extras/dockerfiles/Dockerfile.ubuntu-18.10
@@ -0,0 +1,9 @@
+FROM ubuntu:18.10
+MAINTAINER Marco Poletti <poletti.marco@gmail.com>
+
+COPY ubuntu-18.10_custom.list /etc/apt/sources.list.d/
+COPY common_install.sh common_cleanup.sh ubuntu-18.10_install.sh /
+
+RUN bash -x /common_install.sh && \
+    bash -x /ubuntu-18.10_install.sh && \
+    bash -x /common_cleanup.sh
diff --git a/extras/dockerfiles/common_install.sh b/extras/dockerfiles/common_install.sh
index cb4398a..1215ebd 100644
--- a/extras/dockerfiles/common_install.sh
+++ b/extras/dockerfiles/common_install.sh
@@ -33,3 +33,4 @@
 pip3 install pytest
 pip3 install pytest-xdist
 pip3 install sh
+pip3 install bidict
diff --git a/extras/dockerfiles/ubuntu-18.10_custom.list b/extras/dockerfiles/ubuntu-18.10_custom.list
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/extras/dockerfiles/ubuntu-18.10_custom.list
diff --git a/extras/dockerfiles/ubuntu-18.10_install.sh b/extras/dockerfiles/ubuntu-18.10_install.sh
new file mode 100644
index 0000000..f21f41d
--- /dev/null
+++ b/extras/dockerfiles/ubuntu-18.10_install.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+set -e
+
+apt-get install -y --allow-unauthenticated --no-install-recommends \
+    g++-7 \
+    g++-8 \
+    clang-6.0 \
+    clang-7 \
+    python \
+    python3-sh \
+    python3-typed-ast \
+    clang-format
diff --git a/extras/scripts/postsubmit-helper.sh b/extras/scripts/postsubmit-helper.sh
index 82fb980..8188681 100755
--- a/extras/scripts/postsubmit-helper.sh
+++ b/extras/scripts/postsubmit-helper.sh
@@ -81,6 +81,11 @@
     export CXX=clang++-6.0
     ;;
 
+clang-7.0)
+    export CC=clang-7
+    export CXX=clang++-7
+    ;;
+
 clang-default)
     export CC=clang
     export CXX=clang++
diff --git a/extras/scripts/travis_yml_generator.py b/extras/scripts/travis_yml_generator.py
index e9077b5..9188269 100755
--- a/extras/scripts/travis_yml_generator.py
+++ b/extras/scripts/travis_yml_generator.py
@@ -138,10 +138,9 @@
     build_matrix_rows.append(test_environment)
 
 # TODO: re-enable ASan/UBSan once they work in Travis CI. ATM (as of 18 November 2017) they fail due to https://github.com/google/sanitizers/issues/837
-add_ubuntu_tests(ubuntu_version='18.04', compiler='gcc-8', asan=False, ubsan=False, smoke_tests=['DebugPlain', 'ReleasePlain'])
-add_ubuntu_tests(ubuntu_version='18.04', compiler='clang-4.0', stl='libstdc++')
-add_ubuntu_tests(ubuntu_version='18.04', compiler='clang-5.0', stl='libstdc++')
-add_ubuntu_tests(ubuntu_version='18.04', compiler='clang-6.0', stl='libstdc++', smoke_tests=['DebugPlain', 'DebugAsanUbsan', 'ReleasePlain'])
+add_ubuntu_tests(ubuntu_version='18.10', compiler='gcc-8', asan=False, ubsan=False, smoke_tests=['DebugPlain', 'ReleasePlain'])
+add_ubuntu_tests(ubuntu_version='18.10', compiler='clang-4.0', stl='libstdc++')
+add_ubuntu_tests(ubuntu_version='18.10', compiler='clang-7.0', stl='libstdc++', smoke_tests=['DebugPlain', 'DebugAsanUbsan', 'ReleasePlain'])
 
 add_bazel_tests(ubuntu_version='16.04', smoke_tests=['DebugPlain'])