diff --git a/.github/README.md b/.github/README.md
new file mode 100644
index 00000000..255d9a27
--- /dev/null
+++ b/.github/README.md
@@ -0,0 +1,7 @@
+# Github automations
+
+Github provides several CI/CD features that some people find
+useful. This directory enables those features for people who want to
+use them. More information about the layout of this directory and how
+to make use of these features can be found here:
+https://docs.github.com/en/actions
diff --git a/.github/workflows/build-container.yaml b/.github/workflows/build-container.yaml
new file mode 100644
index 00000000..5b2737ba
--- /dev/null
+++ b/.github/workflows/build-container.yaml
@@ -0,0 +1,99 @@
+name: Build Deploy Container
+
+on:
+
+  # Always have a base image ready to go - this is a nightly build
+  schedule:
+    - cron: 0 3 * * *
+
+  # Allow manual trigger of a build
+  workflow_dispatch:
+    inputs:
+      whatever:
+        description: 'This variable does not matter, its a GHA bug.'
+
+  # On push to main we build and deploy images
+  push:
+    branches:
+      - develop
+
+  # Do build to test works on PR
+  pull_request: []
+
+  # Publish packages on release
+  release:
+    types: [published]
+
+jobs:
+  build:
+    permissions:
+      packages: write
+    strategy:
+      fail-fast: false
+      matrix:
+
+        # Dockerfiles to build, container names to use, and to tag as libabigail:latest?
+        container: [["Dockerfile.fedora", "ghcr.io/woodard/libabigail-fedora", true],
+                    ["Dockerfile.ubuntu", "ghcr.io/woodard/libabigail-ubuntu-22.04", false],
+                    ["Dockerfile.fedora-base", "ghcr.io/woodard/libabigail-fedora-base", false]]
+
+    runs-on: ubuntu-latest
+    name: Build
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+
+      - name: Make Space For Build
+        run: |
+          sudo rm -rf /usr/share/dotnet
+          sudo rm -rf /opt/ghc
+
+       # It's easier to reference named variables than indexes of the matrix
+      - name: Set Environment
+        env:
+          dockerfile: ${{ matrix.container[0] }}
+          uri: ${{ matrix.container[1] }}
+          isLatest: ${{ matrix.container[2] }}
+        run: |
+          echo "dockerfile=$dockerfile" >> $GITHUB_ENV
+          echo "uri=$uri" >> $GITHUB_ENV
+          echo "isLatest=$isLatest" >> $GITHUB_ENV
+
+      - name: Pull previous layers for cache
+        run: docker pull ${uri}:latest || echo "No container to pull"
+
+      - name: Build Container
+        run: |
+           container=$uri:latest
+           docker build -f docker/${dockerfile} -t ${container} .
+           if [[ "${isLatest}" == "true" ]]; then               docker tag ${container} ghcr.io/woodard/libabigail:latest
+           fi
+           echo "container=$container" >> $GITHUB_ENV
+
+      - name: GHCR Login
+        if: (github.event_name != 'pull_request')
+        uses: docker/login-action@v1
+        with:
+          registry: ghcr.io
+          username: ${{ github.actor }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Deploy
+        if: (github.event_name != 'pull_request')
+        run: |
+            docker push ${container}
+            if [[ "${isLatest}" == "true" ]]; then
+               docker push ghcr.io/woodard/libabigail:latest
+            fi
+
+      - name: Tag and Push Release
+        if: (github.event_name == 'release')
+        run: |
+            tag=${GITHUB_REF#refs/tags/}
+            echo "Tagging and releasing ${uri}:${tag}"
+            docker tag ${uri}:latest ${uri}:${tag}
+            docker push ${uri}:${tag}
+            if [[ "${isLatest}" == "true" ]]; then
+                docker tag ${uri}:latest ghcr.io/woodard/libabigail:${tag}
+                docker push ghcr.io/woodard/libabigail:${tag}
+            fi
diff --git a/.github/workflows/libabigail.yaml b/.github/workflows/libabigail.yaml
new file mode 100644
index 00000000..a7c40d27
--- /dev/null
+++ b/.github/workflows/libabigail.yaml
@@ -0,0 +1,126 @@
+name: Libabigail ABI Checks
+on:
+  pull_request: []
+
+jobs:
+
+#  get-release:
+#    container: ghcr.io/woodard/libabigail-ubuntu-22.04:latest
+#    runs-on: ubuntu-latest
+#    steps:
+#    - name: Organize Files
+#      run: |
+#        mkdir -p /abi
+#        cp /opt/abigail-env/.spack-env/view/lib/libabigail.so /abi/
+#        cp /lib/x86_64-linux-gnu/libc.so.6 /abi/
+#        cp /lib/x86_64-linux-gnu/libstdc++.so.6 /abi/
+#        cp /lib/x86_64-linux-gnu/libsystemd.so.0 /abi/
+
+#    - name: Upload Libs
+#      uses: actions/upload-artifact@v3
+#      with:
+#        name: release-libs
+#        path: |
+#          /abi/libabigail.so
+#          /abi/libc.so.6
+#          /abi/libstdc++.so.6
+#          /abi/libsystemd.so.0
+
+
+  get-latest:
+    container: ghcr.io/woodard/libabigail-ubuntu-22.04:latest
+    runs-on: ubuntu-latest
+    steps:
+    - name: Organize Files
+      run: |
+        mkdir -p /abi
+        cp /opt/abigail-env/.spack-env/view/lib/libabigail.so /abi/
+        cp /lib/x86_64-linux-gnu/libc.so.6 /abi/
+        cp /lib/x86_64-linux-gnu/libstdc++.so.6 /abi/
+        cp /lib/x86_64-linux-gnu/libsystemd.so.0 /abi/
+
+    - name: Upload Libs
+      uses: actions/upload-artifact@v3
+      with:
+        name: latest-libs
+        path: |
+          /abi/libabigail.so
+          /abi/libc.so.6
+          /abi/libstdc++.so.6
+          /abi/libsystemd.so.0
+
+  get-pr:
+    container: ghcr.io/woodard/libabigail-ubuntu-22.04:latest
+    runs-on: ubuntu-latest
+    steps:
+    - name: Build Pull Request
+      uses: actions/checkout@v3
+    - name: Build
+      run: |
+         rm -rf /src
+         cp -R $PWD /src
+         ls /src
+         . /opt/spack/share/spack/setup-env.sh
+         cd /opt/abigail-env
+         spack install
+
+    - name: Organize Files
+      run: |
+        mkdir -p /abi
+        cp /opt/abigail-env/.spack-env/view/lib/libabigail.so /abi/
+        cp /lib/x86_64-linux-gnu/libc.so.6 /abi/
+        cp /lib/x86_64-linux-gnu/libstdc++.so.6 /abi/
+        cp /lib/x86_64-linux-gnu/libsystemd.so.0 /abi/
+
+    - name: Upload Libs
+      uses: actions/upload-artifact@v3
+      with:
+        name: pr-libs
+        path: |
+          /abi/libabigail.so
+          /abi/libc.so.6
+          /abi/libstdc++.so.6
+          /abi/libsystemd.so.0
+
+  abi:
+    runs-on: ubuntu-latest
+    needs: [get-latest, get-pr] # get-release
+    strategy:
+      fail-fast: false
+      matrix:
+
+        # Testing every paired library for release vs pr and main vs. pr
+        libs: ["libabigail.so",
+               "libc.so.6",
+               "libstdc++.so.6",
+               "libsystemd.so.0"]
+
+        # Artifact pairs (named) for comparison)
+        artifacts: [["pr-libs", "latest-libs"]]
+                    #["pr-libs", "release-libs"]]
+
+    steps:
+    - name: Download Previous Version
+      uses: actions/download-artifact@v2
+      with:
+        name: ${{ matrix.artifacts[1] }}
+        path: previous/
+
+    - name: Download Pull Request Version
+      uses: actions/download-artifact@v2
+      with:
+        name: ${{ matrix.artifacts[0] }}
+        path: current/
+
+    - name: Show Files
+      run: |
+        ls current/
+        ls previous/
+
+    - name: Run Libabigail
+      uses: buildsi/libabigail-action@0.0.11
+      env:
+        lib: ${{ matrix.libs }}
+      with:
+        abidiff: previous/${{ env.lib }} current/${{ env.lib }}
+        abidw: "--abidiff current/${{ env.lib }}"
diff --git a/.github/workflows/test-fedora.yaml b/.github/workflows/test-fedora.yaml
new file mode 100644
index 00000000..a0d2583f
--- /dev/null
+++ b/.github/workflows/test-fedora.yaml
@@ -0,0 +1,65 @@
+name: Libabigail ABI Diff Checks
+on:
+  pull_request: []
+
+jobs:
+  abi:
+    runs-on: ubuntu-latest
+    container: ghcr.io/woodard/libabigail
+    strategy:
+      fail-fast: false
+      matrix:
+
+        # Pairs of path and install command
+        libs: [["/lib64/libabigail.so", "libabigail"],
+               ["/lib64/libadwaitaqtpriv.so", "libadwaita-qt5"],
+               ["/lib64/libaspell.so", "aspell"],
+               ["/lib64/libboost_log.so", "boost-log"],
+               ["/lib64/libclucene-core.so", "clucene-core"],
+               ["/lib64/libdap.so", "libdap"],
+               ["/lib64/libdcerpc-samr.so", "samba-libs"],
+               ["/lib64/libdjvulibre.so", "djvulibre-libs"],
+               ["/lib64/dovecot/libdovecot-storage.so", "dovecot"],
+               ["/lib64/libexiv2.so", "exiv2-libs"],
+               ["/lib64/libgdal.so", "gdal-libs"],
+               ["/lib64/libgeos.so", "geos"],
+               ["/lib64/libglibmm-2.4.so", "glibmm24"],
+               ["/lib64/mozilla/plugins/gmp-gmpopenh264/system-installed/libgmpopenh264.so", "mozilla-openh264"],
+               ["/lib64/libhdf5_cpp.so", "hdf5"],
+               ["/lib64/libicui18n.so", "libicu67"],
+               ["/lib64/libicui18n.so", "libicu"],
+               ["/lib64/libicuuc.so", "libicu67"],
+               ["/lib64/libicuuc.so", "libicu"],
+               ["/lib64/dyninst/libinstructionAPI.so", "dyninst"],
+               ["/lib64/libjavascriptcoregtk-4.0.so", "webkit2gtk3-jsc"],
+               ["/lib64/libjxl.so", "libjxl"],
+               ["/lib64/libkmldom.so", "libkml"],
+               ["/lib64/libmusicbrainz5.so", "libmusicbrainz5"],
+               ["/lib64/libOpenEXRUtil-3_1.so", "openexr-libs"],
+               ["/lib64/libopenh264.so", "openh264"],
+               ["/lib64/libOSMesa.so", "mesa-libOSMesa"],
+               ["/lib64/libproj.so", "proj"],
+               ["/lib64/libQt5WaylandClient.so", "qt5-qtwayland"],
+               ["/lib64/libQt5WaylandCompositor.so", "qt5-qtwayland"],
+               ["/lib64/libQt5XmlPatterns.so", "qt5-qtxmlpatterns"],
+               ["/lib64/libSDL2_image-2.0.so", "SDL2_image"],
+               ["/lib64/libstdc++.so", "libstdc++"],
+               ["/lib64/libtag.so", "taglib"],
+               ["/lib64/libreoffice/program/libuno_cppuhelpergcc3.so", "libreoffice-ure"],
+               ["/lib64/libvtkRenderingCore.so", "vtk"],
+               ["/lib64/libwebrtc_audio_processing.so", "webrtc-audio-processing"]]
+    steps:
+    - name: Install Library
+      env:
+        lib: ${{ matrix.libs[1] }}
+      run: dnf install -y ${lib} findutils
+
+    - name: Run abidw abidiff
+      env:
+        libpath: ${{ matrix.libs[0] }}
+      run: |
+        for name in $(find -type f $libpath*); do
+          printf "abidw --abidiff ${name}\n"
+          abidw --abidiff ${name}
+          echo $?
+        done
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
new file mode 100644
index 00000000..1b16ea12
--- /dev/null
+++ b/.github/workflows/test.yaml
@@ -0,0 +1,34 @@
+name: Test Libabigail
+
+on:
+  pull_request: []
+  push:
+    branches:
+      - develop
+
+jobs:
+  build:
+    permissions:
+      packages: read
+    strategy:
+      fail-fast: false
+      matrix:
+
+        # Testing containers (build and run make check)
+        dockerfile: ["Dockerfile.test"]
+
+    runs-on: ubuntu-latest
+    name: Build
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+
+      - name: Make Space For Build
+        run: |
+          sudo rm -rf /usr/share/dotnet
+          sudo rm -rf /opt/ghc
+
+      - name: Build Test Container
+        env:
+          dockerfile: ${{ matrix.dockerfile }}
+        run: docker build -f docker/${dockerfile} -t libabigail-test .
diff --git a/README-DOCKER.md b/README-DOCKER.md
new file mode 100644
index 00000000..ad2dd8e1
--- /dev/null
+++ b/README-DOCKER.md
@@ -0,0 +1,66 @@
+# Libabigail Docker
+
+Libabigail comes with two Dockerfile in [docker](docker) to build each of:
+
+ - a Fedora base image (recommended)
+ - an Ubuntu base image.
+
+These containers are built and deployed on merges to the main branch and releases.
+
+### Usage
+
+Here is how to build the containers. Note that we build so it belongs to the same
+namespace as the repository here. "ghcr.io" means "GitHub Container Registry" and
+is the [GitHub packages](https://github.com/features/packages) registry that supports
+ Docker images and other OCI artifacts.
+
+```bash
+$ docker build -f docker/Dockerfile.fedora -t ghcr.io/woodard/libabigail-fedora .
+```
+```bash
+$ docker build -f docker/Dockerfile.ubuntu -t ghcr.io/woodard/libabigail-ubuntu-22.04 .
+```
+
+Note that currently the fedora image is deployed to `ghcr.io/woodard/libabigail:latest`.
+
+### Shell
+
+To shell into a container (here is an example with ubuntu):
+
+```bash
+$ docker run -it ghcr.io/woodard/libabigail-ubuntu-22.04 bash
+```
+
+Off the bat, you can find the abi executables:
+
+```bash
+# which abidiff
+/opt/abigail-env/.spack-env/view/bin/abidiff
+```
+
+Since the ubuntu base uses spack, you can interact with spack.
+You can go to the environment in `/opt/abigail-env` and (given you
+have the source code bound to `/src`) build and test again.
+
+```bash
+$ spack install
+```
+
+And that's it! This workflow should make it easy to install development versions of libabigail with spack.
+We will also use the "production" containers to grab libraries in:
+
+```
+$ ls /opt/abigail-env/.spack-env/view/
+bin  include  lib  share
+```
+
+Note that the fedora container does not come with spack.
+
+### Testing
+
+We provide a testing container, which will use a fedora base and add new code to
+compile, and then run `make check`. You can do this as follows on your local machine:
+
+```bash
+$ docker build -f docker/Dockerfile.test -t test .
+```
diff --git a/docker/Dockerfile.fedora b/docker/Dockerfile.fedora
new file mode 100644
index 00000000..0257e99e
--- /dev/null
+++ b/docker/Dockerfile.fedora
@@ -0,0 +1,38 @@
+FROM ghcr.io/woodard/libabigail-fedora-base as builder
+
+# docker build -f docker/Dockerfile.fedora -t ghcr.io/woodard/libabigail-fedora .
+
+WORKDIR /code
+COPY . /code
+
+RUN mkdir -p build && \
+    autoreconf -i && \
+    cd build && \
+    CXXFLAGS="-g3 -fvar-tracking-assignments \
+    -gstatement-frontiers -gvariable-location-views -grecord-gcc-switches -pipe -Wall \
+    -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -Wp,-D_GLIBCXX_ASSERTIONS \
+    -fstack-protector-strong -fstack-clash-protection -fcf-protection \
+    -fasynchronous-unwind-tables -O2" CFLAGS="-g3 -fvar-tracking-assignments \
+    -gstatement-frontiers -gvariable-location-views -grecord-gcc-switches -pipe -Wall \
+    -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -Wp,-D_GLIBCXX_ASSERTIONS \
+    -fstack-protector-strong -fstack-clash-protection -fcf-protection \
+    -fasynchronous-unwind-tables -O2" LDFLAGS="-Wl,--no-undefined" \
+    ../configure --prefix=/opt/libabigail --enable-rpm=yes && \
+    make -j4 && \
+    make install
+
+FROM fedora:latest
+COPY --from=builder /opt/libabigail /opt/libabigail
+ENV PATH=/opt/libabigail/bin:$PATH
+
+# Runtime dependencies
+RUN dnf install -y \
+    python3-koji \
+    python3-mock \
+    python3-pyxdg \
+    elfutils-libelf \
+    elfutils-libs \
+    libstdc++ \
+    lbzip2 \
+    shared-mime-info \
+    six
diff --git a/docker/Dockerfile.fedora-base b/docker/Dockerfile.fedora-base
new file mode 100644
index 00000000..f803dd7f
--- /dev/null
+++ b/docker/Dockerfile.fedora-base
@@ -0,0 +1,21 @@
+ARG fedora_version=latest
+# ARG fedora_version=35
+FROM fedora:${fedora_version} as builder
+
+# docker build -f docker/Dockerfile.fedora-base -t ghcr.io/woodard/libabigail-fedora-base .
+
+RUN dnf install -y \
+    autoconf \
+    automake \
+    cpio \
+    elfutils-devel \
+    gcc-c++ \
+    lbzip2 \
+    libtool \
+    libxml2-devel \
+    python3-koji \
+    python3-mock \
+    python3-pyxdg \
+    shared-mime-info \
+    six \
+    wget
diff --git a/docker/Dockerfile.test b/docker/Dockerfile.test
new file mode 100644
index 00000000..f25739a6
--- /dev/null
+++ b/docker/Dockerfile.test
@@ -0,0 +1,28 @@
+FROM ghcr.io/woodard/libabigail-fedora-base
+
+# docker build -f docker/Dockerfile.test -t test .
+
+RUN dnf install -y \
+    file \
+    diffutils \
+    lbzip2 \
+    elfutils-libs
+
+WORKDIR /code
+COPY . /code
+
+RUN mkdir -p build && \
+    autoreconf -i && \
+    cd build && \
+    CXXFLAGS="-g3 -fvar-tracking-assignments \
+    -gstatement-frontiers -gvariable-location-views -grecord-gcc-switches -pipe -Wall \
+    -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -Wp,-D_GLIBCXX_ASSERTIONS \
+    -fstack-protector-strong -fstack-clash-protection -fcf-protection \
+    -fasynchronous-unwind-tables -O2" CFLAGS="-g3 -fvar-tracking-assignments \
+    -gstatement-frontiers -gvariable-location-views -grecord-gcc-switches -pipe -Wall \
+    -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -Wp,-D_GLIBCXX_ASSERTIONS \
+    -fstack-protector-strong -fstack-clash-protection -fcf-protection \
+    -fasynchronous-unwind-tables -O2" LDFLAGS="-Wl,--no-undefined" \
+    ../configure --prefix=/opt/libabigail --enable-rpm=yes && \
+    make -j4 && \
+    make check ENABLE_SLOW_TEST=yes || (cat tests/test-suite.log && exit 1)
diff --git a/docker/Dockerfile.ubuntu b/docker/Dockerfile.ubuntu
new file mode 100644
index 00000000..cb1dc166
--- /dev/null
+++ b/docker/Dockerfile.ubuntu
@@ -0,0 +1,30 @@
+ARG ubuntu_version=22.04
+ARG gcc_version=10.3.0
+FROM ghcr.io/rse-ops/gcc-ubuntu-${ubuntu_version}:gcc-${gcc_version}
+
+# docker build -t ghcr.io/woodard/libabigail-ubuntu-22.04 .
+
+# Install Libabigail to its own view
+WORKDIR /opt/abigail-env
+RUN . /opt/spack/share/spack/setup-env.sh && \
+    spack env create -d . && \
+    spack env activate . && \
+    spack add libabigail@master  && \
+    spack --debug install
+
+# Prepare a source extraction of libabigail at /src (intended to be overwritten by user)
+COPY . /src
+
+# Second run - should have deps cached
+RUN . /opt/spack/share/spack/setup-env.sh && \
+
+    # This adds metadata for libabigail to spack.yaml
+    spack develop --path /src libabigail@master && \
+    spack --debug install
+    # At this point you can spack install, and bind the code to /code to develop
+
+# ensure libabigail stuffs always on the path
+RUN cd /opt/abigail-env && \
+    spack env activate --sh -d . >> /etc/profile.d/z10_spack_environment.sh
+
+ENTRYPOINT ["/bin/bash", "--rcfile", "/etc/profile", "-l", "-c"]
