diff mbox series

[ovs-dev,6/6] github: Add a job to build on ubuntu-14.04.

Message ID 20251009092228.382349-7-i.maximets@ovn.org
State Accepted
Commit 9434a69e030a60ce794d2c366ea1834f3ba1fe2f
Headers show
Series Build fixes for OVS on old distributions. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/cirrus-robot success cirrus build: passed
ovsrobot/github-robot-_Build_and_Test success github build: passed

Commit Message

Ilya Maximets Oct. 9, 2025, 9:21 a.m. UTC
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 <i.maximets@ovn.org>
---
 .github/workflows/build-and-test.yml | 39 ++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

Comments

Kevin Traynor Oct. 10, 2025, 11:25 a.m. UTC | #1
On 09/10/2025 10:21, Ilya Maximets wrote:
> 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 <i.maximets@ovn.org>
> ---
>  .github/workflows/build-and-test.yml | 39 ++++++++++++++++++++++++++++
>  1 file changed, 39 insertions(+)

Thanks Ilya, I ran on GHA and it's passing.

Acked-by: Kevin Traynor <ktraynor@redhat.com>
Eelco Chaudron Oct. 10, 2025, 11:51 a.m. UTC | #2
On 9 Oct 2025, at 11:21, Ilya Maximets wrote:

> 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 <i.maximets@ovn.org>

Thanks for adding this, Ilya! At first, I was drawn to the fact that all but the `name:`, `runs-on`, etc., were not aligned like the rest, but it looks like the whole file is like this :(

So the changes look good to me!

Acked-by: Eelco Chaudron <echaudro@redhat.com>
Ilya Maximets Oct. 10, 2025, 8:08 p.m. UTC | #3
On 10/10/25 1:51 PM, Eelco Chaudron wrote:
> 
> 
> On 9 Oct 2025, at 11:21, Ilya Maximets wrote:
> 
>> 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 <i.maximets@ovn.org>
> 
> Thanks for adding this, Ilya! At first, I was drawn to the fact that all
> but the `name:`, `runs-on`, etc., were not aligned like the rest, but it
> looks like the whole file is like this :(

Making yaml look nice is an exercise in futility... :)

> 
> So the changes look good to me!
> 
> Acked-by: Eelco Chaudron <echaudro@redhat.com>
>
diff mbox series

Patch

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: |