diff --git a/.env-defaults b/.env-defaults
deleted file mode 100644
index 4af7939366bb1665c965a3628b5447ede0068dc0..0000000000000000000000000000000000000000
--- a/.env-defaults
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-declare -A CONTEXTS
-declare -A ARCH_MAP
-
-ARCH_MAP[amd64]=linux/amd64
-ARCH_MAP[arm32v7]=linux/arm/v7
-ARCH_MAP[arm64]=linux/arm64
-ARCH_MAP[windows-amd64]=windows/amd64
-
-ABCL_VERSION=1.7.0
-
-REPO=daewok/abcl
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c5357fea8b55dd5564ce6f8ee5fe75ca0a196a60
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,87 @@
+include:
+  - template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml'
+
+stages:
+  - build
+  - push
+  - put shared
+  - readme
+
+# Set these vars:
+# - CANONICAL_NAMESPACE
+# - CL_DOCKER_IMAGES_AMD64
+# - CL_DOCKER_IMAGES_ARM64V8
+# - CL_DOCKER_IMAGES_ARM32V7
+
+##############################################################################
+# Build Templates
+
+.Bashbrew build Linux:
+  stage: build
+  variables:
+    BASHBREW_NAMESPACE: $CANONICAL_NAMESPACE
+    BASHBREW_LIBRARY: $CI_PROJECT_DIR
+    BASHBREW_CACHE: $CI_PROJECT_DIR/cache/bashbrew
+    BASHBREW_DEBUG: "true"
+  script:
+    - docker info
+    - mkdir -p cache
+    - |
+      parents="$(bashbrew cat --format '{{- range $.Entries -}}
+                                          {{- if not ($.SkipConstraints .) -}}
+                                            {{- $.DockerFroms . | join "\n" -}}
+                                            {{- "\n" -}}
+                                          {{- end -}}
+                                        {{- end -}}' $REPO \
+                 | { grep -vE '^$|^scratch$|^'"$CANONICAL_NAMESPACE/$CI_PROJECT_NAME"'(:|$)' || true; } \
+                 | sort -u)"
+    - echo "$parents"
+    - |
+      for parent in $parents; do
+        echo "Pulling $parent"
+        docker pull --platform=$DOCKER_PLATFORM "$parent"
+      done
+    - retry -t 3 -d 60 bashbrew build $CI_PROJECT_NAME
+    - docker images
+    - bashbrew tag --target-namespace=$CANONICAL_NAMESPACE$ARCH $REPO
+  cache:
+    paths:
+      - cache
+    key: $ARCH
+
+.Bashbrew build - amd64:
+  extends: .Bashbrew build Linux
+  variables:
+    ARCH: amd64
+    BASHBREW_ARCH: amd64
+    BASHBREW_TARGET_NAMESPACE: mitmersamd64
+    DOCKER_PLATFORM: linux/amd64
+  rules:
+    - if: $CL_DOCKER_IMAGES_AMD64
+  tags:
+    - bashbrew-amd64
+
+
+.Bashbrew build - arm64:
+  extends: .Bashbrew build Linux
+  variables:
+    ARCH: arm64v8
+    BASHBREW_ARCH: arm64v8
+    BASHBREW_TARGET_NAMESPACE: mitmersarm64v8
+    DOCKER_PLATFORM: linux/arm64
+  rules:
+    - if: $CL_DOCKER_IMAGES_ARM64V8
+  tags:
+    - bashbrew-arm64v8
+
+.Bashbrew build - arm32v7:
+  extends: .Bashbrew build Linux
+  variables:
+    ARCH: arm32v7
+    BASHBREW_ARCH: arm32v7
+    BASHBREW_TARGET_NAMESPACE: mitmersarm32v7
+    DOCKER_PLATFORM: linux/arm/v7
+  rules:
+    - if: $CL_DOCKER_IMAGES_ARM32V7
+  tags:
+    - bashbrew-arm32v7
diff --git a/.gitmodules b/.gitmodules
index c7d6ad297252e97dc91e111c5900c39f737fe89e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +0,0 @@
-[submodule "cl-docker-images-build"]
-	path = cl-docker-images-build
-	url = ../cl-docker-images-build.git
diff --git a/1.8.0/buster/11/amd64/Dockerfile b/1.8.0/buster/11/amd64/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..704d317e2bfd9003d878c5c34b5a7e04499c7f71
--- /dev/null
+++ b/1.8.0/buster/11/amd64/Dockerfile
@@ -0,0 +1,40 @@
+FROM openjdk:11-buster
+
+LABEL maintainer="etimmons@mit.edu"
+
+ENV ABCL_VERSION=1.8.0
+
+WORKDIR /usr/local/src/
+
+ARG ABCL_SIGNING_KEY=5491D207FF9ECDE0BEA277772A9641104DB1773D
+
+# hadolint ignore=DL3003,DL3008
+RUN set -x \
+    && apt-get update \
+    && apt-get install -y --no-install-recommends curl ca-certificates gnupg dirmngr ant \
+    && curl -L https://abcl.org/releases/${ABCL_VERSION}/abcl-src-${ABCL_VERSION}.tar.gz > abcl-src-${ABCL_VERSION}.tar.gz \
+    && curl -L https://abcl.org/releases/${ABCL_VERSION}/abcl-src-${ABCL_VERSION}.tar.gz.asc > abcl-src-${ABCL_VERSION}.tar.gz.asc \
+    && GNUPGHOME="$(mktemp -d)" \
+    && export GNUPGHOME \
+    && (gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver keyserver.ubuntu.com --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver pgp.mit.edu --recv-keys ${ABCL_SIGNING_KEY}) \
+    && gpg --batch --verify "abcl-src-${ABCL_VERSION}.tar.gz.asc" "abcl-src-${ABCL_VERSION}.tar.gz" \
+    && gunzip "abcl-src-${ABCL_VERSION}.tar.gz" \
+    && tar xf "abcl-src-${ABCL_VERSION}.tar" \
+    && ( cd "abcl-src-${ABCL_VERSION}" && bash ./ci/create-abcl-properties.bash "openjdk${JAVA_VERSION%%.*}" && ant abcl ) \
+    && ln -s "/usr/local/src/abcl-src-$ABCL_VERSION/abcl" /usr/local/bin/abcl \
+    && rm -rf "abcl-src-${ABCL_VERSION}.tar.gz.asc" "abcl-src-${ABCL_VERSION}.tar" "$GNUPGHOME" \
+    && apt-get remove -y curl ca-certificates gnupg dirmngr ant \
+    && apt-get autoremove -y \
+    && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /
+
+COPY docker-entrypoint /usr/local/bin/docker-entrypoint
+
+ENTRYPOINT ["docker-entrypoint"]
+
+CMD ["abcl"]
diff --git a/1.7.1/debian/buster/amd64/docker-entrypoint b/1.8.0/buster/11/amd64/docker-entrypoint
similarity index 100%
rename from 1.7.1/debian/buster/amd64/docker-entrypoint
rename to 1.8.0/buster/11/amd64/docker-entrypoint
diff --git a/1.8.0/buster/11/arm64/Dockerfile b/1.8.0/buster/11/arm64/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..704d317e2bfd9003d878c5c34b5a7e04499c7f71
--- /dev/null
+++ b/1.8.0/buster/11/arm64/Dockerfile
@@ -0,0 +1,40 @@
+FROM openjdk:11-buster
+
+LABEL maintainer="etimmons@mit.edu"
+
+ENV ABCL_VERSION=1.8.0
+
+WORKDIR /usr/local/src/
+
+ARG ABCL_SIGNING_KEY=5491D207FF9ECDE0BEA277772A9641104DB1773D
+
+# hadolint ignore=DL3003,DL3008
+RUN set -x \
+    && apt-get update \
+    && apt-get install -y --no-install-recommends curl ca-certificates gnupg dirmngr ant \
+    && curl -L https://abcl.org/releases/${ABCL_VERSION}/abcl-src-${ABCL_VERSION}.tar.gz > abcl-src-${ABCL_VERSION}.tar.gz \
+    && curl -L https://abcl.org/releases/${ABCL_VERSION}/abcl-src-${ABCL_VERSION}.tar.gz.asc > abcl-src-${ABCL_VERSION}.tar.gz.asc \
+    && GNUPGHOME="$(mktemp -d)" \
+    && export GNUPGHOME \
+    && (gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver keyserver.ubuntu.com --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver pgp.mit.edu --recv-keys ${ABCL_SIGNING_KEY}) \
+    && gpg --batch --verify "abcl-src-${ABCL_VERSION}.tar.gz.asc" "abcl-src-${ABCL_VERSION}.tar.gz" \
+    && gunzip "abcl-src-${ABCL_VERSION}.tar.gz" \
+    && tar xf "abcl-src-${ABCL_VERSION}.tar" \
+    && ( cd "abcl-src-${ABCL_VERSION}" && bash ./ci/create-abcl-properties.bash "openjdk${JAVA_VERSION%%.*}" && ant abcl ) \
+    && ln -s "/usr/local/src/abcl-src-$ABCL_VERSION/abcl" /usr/local/bin/abcl \
+    && rm -rf "abcl-src-${ABCL_VERSION}.tar.gz.asc" "abcl-src-${ABCL_VERSION}.tar" "$GNUPGHOME" \
+    && apt-get remove -y curl ca-certificates gnupg dirmngr ant \
+    && apt-get autoremove -y \
+    && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /
+
+COPY docker-entrypoint /usr/local/bin/docker-entrypoint
+
+ENTRYPOINT ["docker-entrypoint"]
+
+CMD ["abcl"]
diff --git a/1.8.0/buster/11/arm64/docker-entrypoint b/1.8.0/buster/11/arm64/docker-entrypoint
new file mode 100755
index 0000000000000000000000000000000000000000..7f6b5a34d7349c9fbeb8f116018e075bb257005d
--- /dev/null
+++ b/1.8.0/buster/11/arm64/docker-entrypoint
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# If the first arg starts with a hyphen, prepend abcl to arguments.
+if [ "${1#-}" != "$1" ]; then
+	set -- abcl "$@"
+fi
+
+exec "$@"
diff --git a/1.8.0/buster/15/amd64/Dockerfile b/1.8.0/buster/15/amd64/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..ca3bfdddf12212fdf319fc48a905b3706a692f89
--- /dev/null
+++ b/1.8.0/buster/15/amd64/Dockerfile
@@ -0,0 +1,40 @@
+FROM openjdk:15-buster
+
+LABEL maintainer="etimmons@mit.edu"
+
+ENV ABCL_VERSION=1.8.0
+
+WORKDIR /usr/local/src/
+
+ARG ABCL_SIGNING_KEY=5491D207FF9ECDE0BEA277772A9641104DB1773D
+
+# hadolint ignore=DL3003,DL3008
+RUN set -x \
+    && apt-get update \
+    && apt-get install -y --no-install-recommends curl ca-certificates gnupg dirmngr ant \
+    && curl -L https://abcl.org/releases/${ABCL_VERSION}/abcl-src-${ABCL_VERSION}.tar.gz > abcl-src-${ABCL_VERSION}.tar.gz \
+    && curl -L https://abcl.org/releases/${ABCL_VERSION}/abcl-src-${ABCL_VERSION}.tar.gz.asc > abcl-src-${ABCL_VERSION}.tar.gz.asc \
+    && GNUPGHOME="$(mktemp -d)" \
+    && export GNUPGHOME \
+    && (gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver keyserver.ubuntu.com --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver pgp.mit.edu --recv-keys ${ABCL_SIGNING_KEY}) \
+    && gpg --batch --verify "abcl-src-${ABCL_VERSION}.tar.gz.asc" "abcl-src-${ABCL_VERSION}.tar.gz" \
+    && gunzip "abcl-src-${ABCL_VERSION}.tar.gz" \
+    && tar xf "abcl-src-${ABCL_VERSION}.tar" \
+    && ( cd "abcl-src-${ABCL_VERSION}" && bash ./ci/create-abcl-properties.bash "openjdk${JAVA_VERSION%%.*}" && ant abcl ) \
+    && ln -s "/usr/local/src/abcl-src-$ABCL_VERSION/abcl" /usr/local/bin/abcl \
+    && rm -rf "abcl-src-${ABCL_VERSION}.tar.gz.asc" "abcl-src-${ABCL_VERSION}.tar" "$GNUPGHOME" \
+    && apt-get remove -y curl ca-certificates gnupg dirmngr ant \
+    && apt-get autoremove -y \
+    && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /
+
+COPY docker-entrypoint /usr/local/bin/docker-entrypoint
+
+ENTRYPOINT ["docker-entrypoint"]
+
+CMD ["abcl"]
diff --git a/1.8.0/buster/15/amd64/docker-entrypoint b/1.8.0/buster/15/amd64/docker-entrypoint
new file mode 100755
index 0000000000000000000000000000000000000000..7f6b5a34d7349c9fbeb8f116018e075bb257005d
--- /dev/null
+++ b/1.8.0/buster/15/amd64/docker-entrypoint
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# If the first arg starts with a hyphen, prepend abcl to arguments.
+if [ "${1#-}" != "$1" ]; then
+	set -- abcl "$@"
+fi
+
+exec "$@"
diff --git a/1.8.0/buster/15/arm64/Dockerfile b/1.8.0/buster/15/arm64/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..ca3bfdddf12212fdf319fc48a905b3706a692f89
--- /dev/null
+++ b/1.8.0/buster/15/arm64/Dockerfile
@@ -0,0 +1,40 @@
+FROM openjdk:15-buster
+
+LABEL maintainer="etimmons@mit.edu"
+
+ENV ABCL_VERSION=1.8.0
+
+WORKDIR /usr/local/src/
+
+ARG ABCL_SIGNING_KEY=5491D207FF9ECDE0BEA277772A9641104DB1773D
+
+# hadolint ignore=DL3003,DL3008
+RUN set -x \
+    && apt-get update \
+    && apt-get install -y --no-install-recommends curl ca-certificates gnupg dirmngr ant \
+    && curl -L https://abcl.org/releases/${ABCL_VERSION}/abcl-src-${ABCL_VERSION}.tar.gz > abcl-src-${ABCL_VERSION}.tar.gz \
+    && curl -L https://abcl.org/releases/${ABCL_VERSION}/abcl-src-${ABCL_VERSION}.tar.gz.asc > abcl-src-${ABCL_VERSION}.tar.gz.asc \
+    && GNUPGHOME="$(mktemp -d)" \
+    && export GNUPGHOME \
+    && (gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver keyserver.ubuntu.com --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys ${ABCL_SIGNING_KEY} \
+       || gpg --batch --keyserver pgp.mit.edu --recv-keys ${ABCL_SIGNING_KEY}) \
+    && gpg --batch --verify "abcl-src-${ABCL_VERSION}.tar.gz.asc" "abcl-src-${ABCL_VERSION}.tar.gz" \
+    && gunzip "abcl-src-${ABCL_VERSION}.tar.gz" \
+    && tar xf "abcl-src-${ABCL_VERSION}.tar" \
+    && ( cd "abcl-src-${ABCL_VERSION}" && bash ./ci/create-abcl-properties.bash "openjdk${JAVA_VERSION%%.*}" && ant abcl ) \
+    && ln -s "/usr/local/src/abcl-src-$ABCL_VERSION/abcl" /usr/local/bin/abcl \
+    && rm -rf "abcl-src-${ABCL_VERSION}.tar.gz.asc" "abcl-src-${ABCL_VERSION}.tar" "$GNUPGHOME" \
+    && apt-get remove -y curl ca-certificates gnupg dirmngr ant \
+    && apt-get autoremove -y \
+    && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /
+
+COPY docker-entrypoint /usr/local/bin/docker-entrypoint
+
+ENTRYPOINT ["docker-entrypoint"]
+
+CMD ["abcl"]
diff --git a/1.8.0/buster/15/arm64/docker-entrypoint b/1.8.0/buster/15/arm64/docker-entrypoint
new file mode 100755
index 0000000000000000000000000000000000000000..7f6b5a34d7349c9fbeb8f116018e075bb257005d
--- /dev/null
+++ b/1.8.0/buster/15/arm64/docker-entrypoint
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# If the first arg starts with a hyphen, prepend abcl to arguments.
+if [ "${1#-}" != "$1" ]; then
+	set -- abcl "$@"
+fi
+
+exec "$@"
diff --git a/1.7.1/debian/buster/amd64/Dockerfile b/1.8.0/buster/8/amd64/Dockerfile
similarity index 95%
rename from 1.7.1/debian/buster/amd64/Dockerfile
rename to 1.8.0/buster/8/amd64/Dockerfile
index faeefe310927ba730474d7ba3d221e10942dd128..3e0176e065485c1fdfb1aa8a7a4ddcb8de992a0b 100644
--- a/1.7.1/debian/buster/amd64/Dockerfile
+++ b/1.8.0/buster/8/amd64/Dockerfile
@@ -2,7 +2,7 @@ FROM openjdk:8-buster
 
 LABEL maintainer="etimmons@mit.edu"
 
-ENV ABCL_VERSION=1.7.1
+ENV ABCL_VERSION=1.8.0
 
 WORKDIR /usr/local/src/
 
@@ -24,7 +24,7 @@ RUN set -x \
     && gpg --batch --verify "abcl-src-${ABCL_VERSION}.tar.gz.asc" "abcl-src-${ABCL_VERSION}.tar.gz" \
     && gunzip "abcl-src-${ABCL_VERSION}.tar.gz" \
     && tar xf "abcl-src-${ABCL_VERSION}.tar" \
-    && ( cd "abcl-src-${ABCL_VERSION}" && bash ./ci/create-abcl-properties.bash openjdk8 && ant abcl ) \
+    && ( cd "abcl-src-${ABCL_VERSION}" && bash ./ci/create-abcl-properties.bash "openjdk${JAVA_VERSION%%.*}" && ant abcl ) \
     && ln -s "/usr/local/src/abcl-src-$ABCL_VERSION/abcl" /usr/local/bin/abcl \
     && rm -rf "abcl-src-${ABCL_VERSION}.tar.gz.asc" "abcl-src-${ABCL_VERSION}.tar" "$GNUPGHOME" \
     && apt-get remove -y curl ca-certificates gnupg dirmngr ant \
diff --git a/1.8.0/buster/8/amd64/docker-entrypoint b/1.8.0/buster/8/amd64/docker-entrypoint
new file mode 100755
index 0000000000000000000000000000000000000000..7f6b5a34d7349c9fbeb8f116018e075bb257005d
--- /dev/null
+++ b/1.8.0/buster/8/amd64/docker-entrypoint
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# If the first arg starts with a hyphen, prepend abcl to arguments.
+if [ "${1#-}" != "$1" ]; then
+	set -- abcl "$@"
+fi
+
+exec "$@"
diff --git a/abcl b/abcl
new file mode 100644
index 0000000000000000000000000000000000000000..9f3ea158483522cd7271519011d26389e55f3d3c
--- /dev/null
+++ b/abcl
@@ -0,0 +1,21 @@
+Maintainers: Eric Timmons <etimmons@mit.edu> (@daewok)
+GitRepo: https://gitlab.common-lisp.net/cl-docker-images/abcl.git
+
+# Debian Buster
+
+Tags: 1.8.0-buster-15, 1.8.0-buster, 1.8.0-debian-15, 1.8.0-debian
+SharedTags: 1.8.0, latest, 1.8.0-15
+Architectures: amd64, arm64v8
+amd64-Directory: 1.8.0/buster/15/amd64
+arm64v8-Directory: 1.8.0/buster/15/arm64
+
+Tags: 1.8.0-buster-11, 1.8.0-debian-11
+SharedTags: 1.8.0-11
+Architectures: amd64, arm64v8
+amd64-Directory: 1.8.0/buster/11/amd64
+arm64v8-Directory: 1.8.0/buster/11/arm64
+
+Tags: 1.8.0-buster-8, 1.8.0-debian-8
+SharedTags: 1.8.0-8
+Architectures: amd64
+amd64-Directory: 1.8.0/buster/8/amd64
diff --git a/cl-docker-images-build b/cl-docker-images-build
deleted file mode 160000
index 75ed003d3fdebf97efbcb14a19f870d4e8fc50c8..0000000000000000000000000000000000000000
--- a/cl-docker-images-build
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 75ed003d3fdebf97efbcb14a19f870d4e8fc50c8
diff --git a/default-values.env b/default-values.env
deleted file mode 100644
index 2ce17df409cc6ea8e9757d623afef3e9a4663a61..0000000000000000000000000000000000000000
--- a/default-values.env
+++ /dev/null
@@ -1,12 +0,0 @@
-ARCHES=amd64
-DEBIAN_LATEST=buster
-DEBIAN_VERSIONS=buster
-DEFAULT_LINUX_OS=debian
-IMAGE_NAME=abcl
-IMAGE_BUILD_NAMESPACE=daewok
-IMAGE_TARGET_NAMESPACE=daewok
-INCLUDE_WINDOWS_IN_MANIFEST=no
-LATEST_VERSION=1.7.1
-OSES=debian
-WINDOWSSERVERCORE_LATEST=ltsc2019
-WINDOWSSERVERCORE_VERSIONS=ltsc2019