Skip to content

CI: add ubuntu26.04 to the workflow - #2096

Open
tuhaihe wants to merge 10 commits into
apache:mainfrom
tuhaihe:ci-add-ubuntu26.04-deb
Open

tuhaihe wants to merge 10 commits into
apache:mainfrom
tuhaihe:ci-add-ubuntu26.04-deb

Conversation

@tuhaihe

@tuhaihe tuhaihe commented Oct 8, 2026

Copy link
Copy Markdown
Member

Fixes #ISSUE_Number

What does this PR do?

Type of Change

  • Bug fix (non-breaking change)
  • New feature (non-breaking change)
  • Breaking change (fix or feature with breaking changes)
  • Documentation update

Breaking Changes

Test Plan

  • Unit tests added/updated
  • Integration tests added/updated
  • Passed make installcheck
  • Passed make -C src/test installcheck-cbdb-parallel

Impact

Performance:

User-facing changes:

Dependencies:

Checklist

Additional Context

CI Skip Instructions


@tuhaihe tuhaihe added the CI label Oct 8, 2026
@tuhaihe tuhaihe added this to the Ubuntu 26.04 Support milestone Oct 8, 2026
@tuhaihe

tuhaihe commented Oct 8, 2026

Copy link
Copy Markdown
Member Author

Need to rebase on #2082, #2081 and #2083

Add devops/build/packaging/deb/ubuntu26.04, copied from ubuntu24.04.
The package names in control change with each Ubuntu release, so
adjust these for 26.04 (resolute):
- gcc-13 and g++-13 become gcc-15 and g++-15, the compiler of the
  26.04 build image.
- libcgroup2 becomes libcgroup3, in Build-Depends and Depends.
- libxml2 becomes libxml2-16 in Depends. The libxml2 package no longer
  has an installable version.

The changelog distribution is now resolute.

Verified on Ubuntu 26.04 with the published build and test images: the
DEB builds, "apt-get install" of it succeeds in the test image, no
shared library of the installed files is unresolved, and a cluster
started with gpinitsystem from the installed package works.

Assisted-by: Claude Code
Run the DEB build, the DEB install test and the DEB test suites on
Ubuntu 26.04, using the cbdb-build-ubuntu26.04 and cbdb-test-ubuntu26.04
images.

Add 26.04 to the three places that list the Ubuntu versions: the build
matrix, the install test matrix, and the default of the test matrix
that is generated for the "all" case of workflow_dispatch.

The 26.04 jobs need the Ubuntu 26.04 fixes for PAX, contrib/xml2 and
the gpMgmt scripts, so they fail until those are merged.

Assisted-by: Claude Code
@tuhaihe
tuhaihe force-pushed the ci-add-ubuntu26.04-deb branch from 35ace91 to ae14a99 Compare October 10, 2026 02:05
GCC 15 compiles C as C23 by default. In C23, "void f()" means
"void f(void)", and not an unspecified parameter list as before, so a
function defined with empty parentheses no longer converts to a
function pointer type that has parameters. Together with GCC 14 making
-Wincompatible-pointer-types an error, "make unittest-check" fails on
Ubuntu 26.04 in 9 test files:

  error: passing argument 5 of '_will_return' from incompatible pointer
  type [-Wincompatible-pointer-types]
  error: initialization of 'void (*)(void **)' from incompatible
  pointer type 'void (*)(void)'

Give 11 functions the parameter list of the type they are used as:
- 9 side effect callbacks passed to will_return_with_sideeffect() and
  will_be_called_with_sideeffect(), of type void (*)(void *):
  _ExceptionalCondition (6 files), _errfinish_impl (2 files) and
  RedZoneHandler_DetectRunawaySession_TrackedBytesSanity. None of them
  is called directly. The use of _ExceptionalCondition in
  vmem_tracker_test.c is inside #ifdef USE_ASSERT_CHECKING, so it is
  only compiled in a build with --enable-cassert.
- 2 cmockery test functions in ginpostinglist_test.c, of type
  void (*)(void **).

Checked on Ubuntu 26.04 (GCC 15.2) with "make -k unittest-check". With
the CI configuration it had 21 errors in 9 files before, and now passes.
With --enable-cassert it has no compile errors, and all unit tests pass.

Assisted-by: Claude Code
Backpatch-through: REL_2_STABLE
(cherry picked from commit d0c3bbd)
On Ubuntu 26.04, "make installcheck-good" and "installcheck-cbdb-parallel"
stop before any test runs:

  scanning for flaky fault-injection tests...
  comm: file 1 is not in sorted order
  comm: input is not in sorted order
  make: *** [GNUmakefile:213: installcheck-good] Error 1

Ubuntu 26.04 replaces GNU coreutils with uutils coreutils. In the UTF-8
locale of the build images (en_US.UTF-8), its sort -u and comm do not
agree on the order of the two test lists, so comm rejects its input.
GNU coreutils 9.4 on Ubuntu 24.04 does not have this problem.

Make sort and comm use the same order by running the script in the C
locale. The test names are ASCII, so only the collation changes.

Checked on Ubuntu 26.04 in the build image: the script fails in the
default locale and passes with LC_ALL=C. It passes in both ways on
Ubuntu 24.04.

Assisted-by: Claude Code
Backpatch-through: REL_2_STABLE
(cherry picked from commit ac6f417)
With Perl 5.40 (Getopt::Long 2.57, as in Ubuntu 26.04), every run of
gpdiff.pl prints a warning:

  Duplicate specification "verbose|Verbose" for option "verbose"

It is printed more than a thousand times in a test run, and it reaches
the test output.

Getopt::Long ignores case by default and gpdiff.pl does not turn that
off (it only sets pass_through), so "Verbose" is already matched by
"verbose". Use "verbose" alone. Both -verbose and -Verbose still work.

Checked on Ubuntu 26.04: the warning is gone with the new specification,
and Ubuntu 24.04 (Getopt::Long 2.54) is not affected either way.

Assisted-by: Claude Code
Backpatch-through: REL_2_STABLE
(cherry picked from commit a76a748eb10745a6c08a63632d6b11fdc91f87d8)
Every object of the backend unit tests is compiled with
-DDLSUFFIX=.so, and pg_config.h then defines DLSUFFIX as ".so":

  pg_config.h:47:9: warning: 'DLSUFFIX' redefined
     47 | #define DLSUFFIX ".so"
  <command-line>: note: this is the location of the previous definition

The two definitions differ, because the one from the command line is
not a string. The warning is printed more than a hundred times in a
unittest-check run, and the command line value is never the one that is
used.

Quote the value, as src/backend/utils/fmgr/Makefile already does. The
two definitions are then the same, and there is no warning.

Checked with GCC 13 and GCC 15: the unquoted form warns, and the quoted
form does not.

Assisted-by: Claude Code
Backpatch-through: REL_2_STABLE
(cherry picked from commit 00917fc)
Python 3.14 (PEP 765) warns at compile time about a return in a finally
block. Every gp* utility that imports gppylib.operations.buildMirrorSegments
prints it on stderr:

  buildMirrorSegments.py:293: SyntaxWarning: 'return' in a 'finally' block

This breaks tests that compare the output of those utilities, such as
contrib/sslinfo, where "gpstop -arf" is run from the test and the two
extra lines make the result differ from the expected file.

In _update_config(), "return backout_map" was in the finally block that
restores the SIGINT handler. A return there discards any exception from
the try block, so a failure of updateSystemConfig() was silently ignored
and None was returned. The caller then went on with the recovery, and
_revert_config_update() failed later with a TypeError from len(None).

Return after the finally block. The SIGINT handler is restored in the
same way, and an exception from updateSystemConfig() is now raised to
the caller with its own message, as every other step of the recovery does.

This is the only return, break or continue in a finally block in the
repository.

Assisted-by: Claude Code
Backpatch-through: REL_2_STABLE
(cherry picked from commit 4e1f55a)
Python 3.12 and later warn at compile time about a backslash that is not
a valid escape sequence in a normal string, and the warning is printed
every time such a script is run:

  mocker.py:245: SyntaxWarning: "\[" is an invalid escape sequence.
  Such sequences will not work in the future. Did you mean "\\["?

The warning of mocker.py is printed about sixty times in a
unittest-check run, once for every test directory, and the ones of
contrib/try_convert/scripts show up in the "make installcheck" of the
contrib modules. The warning is the same on Ubuntu 24.04 and 26.04.

Double the backslash of each invalid escape sequence, which gives the
same string value as before, in 12 files: mocker.py, gpcheckperf,
gpmemreport, gpssh-exkeys, two scripts in src/backend/gporca/scripts and
the scripts in contrib/try_convert/scripts.

Checked for each file that the syntax tree of the new source is the same
as the one of the old source, which means every string has the same
value, and that the file compiles without a warning. No Python file in
the repository has an invalid escape sequence now.

Assisted-by: Claude Code
Backpatch-through: REL_2_STABLE
(cherry picked from commit 4cb8cfa)
init_system.sh of the test images runs "sudo chown -R gpadmin.gpadmin
/data1". A dot between the user and the group is the old syntax, and
chown warns about it at the start of every test job and every
container start:

  chown: warning: '.' should be ':': 'gpadmin.gpadmin'

Use "gpadmin:gpadmin" in the six test images (Rocky 8, 9 and 10, Ubuntu
22.04, 24.04 and 26.04). It does the same, without the warning.

Checked with GNU coreutils 9.4 (Ubuntu 24.04) and uutils coreutils 0.10.0
(Ubuntu 26.04): both warn for the dot, and neither warns for the colon.

Assisted-by: Claude Code
(cherry picked from commit 5e1fcf34011359d6de4727131e67d24f3a47d4c7)
The test jobs of the build workflows list the files of the results
directory with:

  find "$results_dir" -type f -ls >> "$log_file" 2>&1 | tee -a ...

$log_file is not set in that step, so the redirection fails and the
job log gets an error instead of the list:

  line 102: : No such file or directory

The listing is lost, and the error appears in every test job that has a
results directory, on all Ubuntu versions.

Remove the redirection, so that the list goes to tee, which shows it
and appends it to the results log of the configuration, as the other
echo lines of the step already do.

Assisted-by: Claude Code
Backpatch-through: REL_2_STABLE
(cherry picked from commit fe0b10d496c7f74447f82fb7f3fa4e17beccf920)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant