While adding new code we frequently miss that certain compiler features
may be relatively new, or more often that some system headers are not
available or do not have certain definitions in them.  This results in
builds failing on older systems.

Adding a new CI job that runs inside Ubuntu 14.04 container, which is
the oldest Ubuntu that is in the "legacy support" mode:
  https://ubuntu.com/about/release-cycle

This image has GCC 4.8 that is missing a lot of modern features and
it's based on Linux v3.13 kernel that also has a lot of definitions
missing in uAPI headers, compared to modern ones.  This makes this
image a good candidate for a baseline "old distribution" testing.

This job can't cover everything and there will be different
configurations and distributions that may still fail, especially if
they have custom backports or some packages much newer than others.
But it should cover the vast majority of potential issues.

Since we're running inside a very old container, we can't use any of
the pre-defined GitHub workflows like 'checkout' or 'cache', as they
are based on Node.js that is built for much newer version of Ubuntu
and so requires much newer glibc to run.  Hence doing everything
manually.

Need to disable SSL, as we require OpenSSL 1.1.1+, which can probably
be built, but it seems like a bit of a waste of time to re-build so
many large things from sources.  Need to build a newer python though,
as python >= 3.7 is required in order to build OVS.

Building python 3.12 because it's the same as in other tests.  We could
also find and choose the latest 3.12.z release automatically, but it's
much less code to just manually stick to the current latest 3.12.11.
There should be no reason to update it frequently.

Signed-off-by: Ilya Maximets <[email protected]>
---
 .github/workflows/build-and-test.yml | 39 ++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/.github/workflows/build-and-test.yml 
b/.github/workflows/build-and-test.yml
index 1e70231f7..f7ca4d1f0 100644
--- a/.github/workflows/build-and-test.yml
+++ b/.github/workflows/build-and-test.yml
@@ -582,6 +582,45 @@ jobs:
         name: logs-osx-clang---disable-ssl
         path: config.log
 
+  build-old-linux-distribution:
+    env:
+      dependencies:   git make automake libtool gcc libnuma-dev zlib1g-dev
+      python_version: 3.12.11
+
+    name: linux gcc (ubuntu-14.04)
+    runs-on:   ubuntu-24.04
+    container: ubuntu:14.04
+    timeout-minutes: 30
+
+    strategy:
+      fail-fast: false
+
+    steps:
+    - name: update APT cache
+      run:  sudo apt update || true
+
+    - name: install dependencies
+      run:  sudo apt install -y ${{ env.dependencies }}
+
+    - name: build python
+      run:  |
+        git clone --branch v${{ env.python_version }} --depth 1 \
+            https://github.com/python/cpython cpython
+        cd cpython && ./configure && sudo make -j4 install
+        python3 --version
+
+    - name: checkout
+      run:  |
+        SHA=${{ github.event.pull_request.head.sha || github.sha }}
+        git clone https://github.com/${{ github.repository }}.git ovs
+        cd ovs && git fetch origin $SHA && git checkout $SHA
+
+    - name: prepare
+      run:  cd ovs && ./boot.sh && ./configure --disable-ssl --enable-Werror
+
+    - name: build
+      run:  cd ovs && make -j4
+
   build-linux-deb:
     env:
       deb_dependencies: |
-- 
2.51.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to