[PATCH v2 0/8] ci: wire up support for Meson

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

this small patch series wires up Meson into our CI systems. The intent
is to ensure that it does not regress in functionality as the Git code
base evolves.

To help with keeping it up-to-date, both Meson and our Makefiles learn
to detect missing or superseded test files in "t/meson.build". This
should give users an early notification in case they have to add a newly
added or removed test to these build instructions. Overall I think that
this shouldn't be too much of a burden given that adding a new test is
trivial.

One gap that still exists is newly added code files. Due to many sources
being added to the build conditionally it's hard to have generic checks
for these. So I refrain from doing so in this series -- the build would
already fail anyway when we're missing code, so at least we will know
that something is up.

Changes in v2:

  - Improve a couple of commit messages.
  - Explain why we remove `-x` from the unit-test driver.
  - Remove unneeded `CC_PACKAGE` variable.
  - Improve error messages when tests weren't found.
  - Link to v1: https://lore.kernel.org/r/20241211-pks-meson-ci-v1-0-28d18b494374@xxxxxx

The series is built on top of caacdb5dfd (The fifteenth batch,
2024-12-10) with ps/build at 904339edbd (Introduce support for the Meson
build system, 2024-12-06) and cw/worktree-extension at 2037ca85ad
(worktree: refactor `repair_worktree_after_gitdir_move()`, 2024-11-29)
merged into it.

Thanks!

Patrick

---
Patrick Steinhardt (8):
      ci/lib: support custom output directories when creating test artifacts
      Makefile: drop -DSUPPRESS_ANNOTATED_LEAKS
      t/unit-tests: rename clar-based unit tests to have a common prefix
      meson: detect missing tests at configure time
      Makefile: detect missing Meson tests
      t: fix out-of-tree tests for some git-p4 tests
      t: introduce compatibility options to clar-based tests
      ci: wire up Meson builds

 .github/workflows/main.yml                  |  7 ++++
 .gitlab-ci.yml                              |  8 +++++
 Makefile                                    |  5 ++-
 ci/install-dependencies.sh                  |  7 ++++
 ci/lib.sh                                   | 14 ++++----
 ci/print-test-failures.sh                   |  2 +-
 ci/run-build-and-tests.sh                   | 31 ++++++++++++++----
 meson.build                                 |  1 -
 parse-options.h                             | 12 +++++++
 t/Makefile                                  | 18 ++++++++++-
 t/meson.build                               | 40 +++++++++++++++++++++--
 t/t9835-git-p4-metadata-encoding-python2.sh | 50 ++++++++++++++---------------
 t/t9836-git-p4-metadata-encoding-python3.sh | 50 ++++++++++++++---------------
 t/unit-tests/generate-clar-decls.sh         |  5 ++-
 t/unit-tests/{ctype.c => u-ctype.c}         |  0
 t/unit-tests/{strvec.c => u-strvec.c}       |  0
 t/unit-tests/unit-test.c                    | 19 ++++++++++-
 17 files changed, 195 insertions(+), 74 deletions(-)

Range-diff versus v1:

1:  329404a926 = 1:  43562781da ci/lib: support custom output directories when creating test artifacts
2:  71a8cbc131 = 2:  f1655e9338 Makefile: drop -DSUPPRESS_ANNOTATED_LEAKS
3:  29e75b59e5 ! 3:  f5403a7ce0 t/unit-tests: rename clar-based unit tests to have a common prefix
    @@ Commit message
         t/unit-tests: rename clar-based unit tests to have a common prefix
     
         All of the code files for unit tests using the self-grown unit testing
    -    framework have have a "t-" prefix to their name. This makes it easy to
    +    framework have a "t-" prefix to their name. This makes it easy to
         identify them and use globbing in our Makefile and in other places. On
         the other hand though, our clar-based unit tests have no prefix at all
         and thus cannot easily be discerned from other files in the unit test
4:  644903d148 ! 4:  99a4ffdc2a meson: detect missing tests at configure time
    @@ t/meson.build: integration_tests = [
     +      endif
     +    endforeach
     +    if missing_tests.length() > 0
    -+      error('Missing tests:\n\n - ' + '\n - '.join(missing_tests))
    ++      error('Test files found, but not configured:\n\n - ' + '\n - '.join(missing_tests))
     +    endif
     +
     +    superfluous_tests = [ ]
    @@ t/meson.build: integration_tests = [
     +      endif
     +    endforeach
     +    if superfluous_tests.length() > 0
    -+      error('Superfluous tests:\n\n - ' + '\n - '.join(superfluous_tests))
    ++      error('Test files configured, but not found:\n\n - ' + '\n - '.join(superfluous_tests))
     +    endif
     +  endif
     +endforeach
5:  afad056353 = 5:  ce27e9c1a6 Makefile: detect missing Meson tests
6:  e398d80f77 ! 6:  8c46997ba4 t: fix out-of-tree tests for some git-p4 tests
    @@ Commit message
     
         Both t9835 and t9836 exercise git-p4, but one exercises Python 2 whereas
         the other one uses Python 3. These tests do not exercise "git p4", but
    -    instead they use "git p4.py" so that the unbuilt version of "git-p4.py"
    -    is used that has "#!/usr/bin/env python" as shebang instead of the
    -    replaced shebang.
    +    instead they use "git p4.py". This calls the unbuilt version of
    +    "git-p4.py" that still has the "#!/usr/bin/env python" shebang, which
    +    allows the test to modify which Python version comes first in $PATH,
    +    making it possible to force a Python version.
     
         But "git-p4.py" is not in our PATH during out-of-tree builds, and thus
         we cannot locate "git-p4.py". The tests thus break with CMake and Meson.
    @@ Commit message
         Signed-off-by: Patrick Steinhardt <ps@xxxxxx>
     
      ## t/t9835-git-p4-metadata-encoding-python2.sh ##
    -@@ t/t9835-git-p4-metadata-encoding-python2.sh: python_target_version='2'
    +@@ t/t9835-git-p4-metadata-encoding-python2.sh: failing, and produces maximally sane output in git.'
    + 
    + . ./lib-git-p4.sh
    + 
    +-python_target_version='2'
    +-
    + ###############################
      ## SECTION REPEATED IN t9836 ##
      ###############################
      
7:  efa4698fee ! 7:  357f8e7e67 t: introduce compatibility options to clar-based tests
    @@ Commit message
         fail in case it is passed an unknown option. Stub out these options with
         no-ops to make our life a bit easier.
     
    +    Note that this also requires us to remove the `-x` short option for
    +    `--exclude`. This is because `-x` has another meaning in our integration
    +    tests, as it enables shell tracing. I doubt there are a lot of people
    +    out there using it as we only got a small hand full of clar tests in the
    +    first place. So better change it now so that we can in the long run
    +    improve compatibility between the two different test drivers.
    +
         Signed-off-by: Patrick Steinhardt <ps@xxxxxx>
     
      ## parse-options.h ##
8:  d6f7685eca ! 8:  c1c27341eb ci: wire up Meson builds
    @@ .gitlab-ci.yml: test:linux:
     +      - jobname: linux-meson
     +        image: ubuntu:latest
     +        CC: gcc
    -+        CC_PACKAGE: gcc
        artifacts:
          paths:
            - t/failed-test-artifacts

---
base-commit: 2fcbf72f13e8ce3bf1cda9a689f392f8f6e5c65d
change-id: 20241129-pks-meson-ci-ba1e40652fbe





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux