Skip to content

CI Refactor#211

Merged
ednolan merged 1 commit intomainfrom
enolan_newci5
Jul 6, 2025
Merged

CI Refactor#211
ednolan merged 1 commit intomainfrom
enolan_newci5

Conversation

@ednolan
Copy link
Copy Markdown
Member

@ednolan ednolan commented Jul 6, 2025

This refactor is based on the idea that CI for beman repositories should only contain configuration, and the logic powering the CI should live in reusable workflow files that can be deduplicated using infra (the move to infra will happen in a follow-on commit).

After this commit, CI for exemplar is configured via a JSON file whose contents are processed by the new reusable-beman-build-and-test.yml workflow file.

For the GCC and Clang builds, the configuration dispatches to the new containers provided by bemanproject/infra-containers. Otherwise, it uses GitHub runners.

The configuration chosen for exemplar is intended to provide a sane default for other projects. Most configurations only run a default build, in release mode so that the tests execute quickly. Debug and sanitizer builds are performed on the latest compiler version and C++ standard for each compiler, to ensure the most robust results.

Although a reflection build is not provided here, I've tested it using the following configuration:

"clang-p2996": [
  { "versions": ["trunk"],
    "tests": [
      { "cxxversions": ["c++26"],
        "tests": [{"stdlibs": ["libc++"], "tests": ["Release.-DCMAKE_CXX_FLAGS='-freflection-latest'"]}]
      }
    ]
  }
],

This uses the ability to provide custom parameters to CMake after the '.' separator to provide the reflection flag.

This refactor is based on the idea that CI for beman repositories
should only contain configuration, and the logic powering the CI
should live in reusable workflow files that can be deduplicated using
infra (the move to infra will happen in a follow-on commit).

After this commit, CI for exemplar is configured via a JSON file whose
contents are processed by the new reusable-beman-build-and-test.yml
workflow file.

For the GCC and Clang builds, the configuration dispatches to the new
containers provided by bemanproject/infra-containers. Otherwise, it
uses GitHub runners.

The configuration chosen for exemplar is intended to provide a sane
default for other projects. Most configurations only run a default
build, in release mode so that the tests execute quickly. Debug and
sanitizer builds are performed on the latest compiler version and C++
standard for each compiler, to ensure the most robust results.

Although a reflection build is not provided here, I've tested it using
the following configuration:

"clang-p2996": [
  { "versions": ["trunk"],
    "tests": [
      { "cxxversions": ["c++26"],
        "tests": [{"stdlibs": ["libc++"], "tests": ["Release.-DCMAKE_CXX_FLAGS='-freflection-latest'"]}]
      }
    ]
  }
],

This uses the ability to provide custom parameters to CMake after the
'.' separator to provide the reflection flag.
@ednolan ednolan merged commit 5cb81c5 into main Jul 6, 2025
84 checks passed
@ednolan ednolan deleted the enolan_newci5 branch July 6, 2025 15:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant