Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

github: build with fedora 40 and add 2 build combinations back #2248

Merged
merged 3 commits into from
May 21, 2024

Conversation

tchaikov
Copy link
Contributor

in order to address the infra issues caused by unreliable connection to llvm's apt repo, and to bring the two missing build combinations back, in this series, we switch from setup-cpp action to fedora 40, and extract the test job into a reusable workflow.

@tchaikov
Copy link
Contributor Author

tchaikov commented May 17, 2024

please note, this change depends on #2246 .

a sample run can be found at https://github.com/tchaikov/seastar/actions/runs/9123831484/job/25086931644 . which tests a branch which includes both the this PR and #2246

@tchaikov
Copy link
Contributor Author

tchaikov commented May 17, 2024

@nyh hi Nadav, in case you are interested in this.

github's matrix machinery does not allow us to attach extra elements to
an existing matrix, for instance, we cannot add the combination of
`{compiler: clang-18, standard: 23, mode: release, enables: dpdk}` to a
matrix of `{compiler: [clang-18, gcc-13], mode: [debug, release], standard: [20, 23]}`,
without overwriting the combination of
`{compiler: clang-18, standard: 23, mode: release}` generated by the
matrix above. as the combination with "enables: dpdk" matches with
it.

to address this issue, we use the approach that we were using
when defining the circleci workflow: to define a parameterized workflow,
so that we can customize the behavior of the caller workflow
using either a matrix or a hardwired combination.

this change just extract the reuseable workflow out, and call it
in the parent workflow. we will replace the unrolled `inputs`
list with 3 different jobs, with which we will have

- 12 combinations generated with the matrix
- 1 combination for dpdk build
- 1 combination for C++20 build

instead of:

- 10 combinations
- 1 combination for dpdk build
- 1 combination for C++20 build

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
this change adds the combinations of

- {compiler: clang++-18, standard: 23, mode: release}
- {compiler: clang++-18, standard: 23, mode: debug}

back.

before this change, the `include` keyword instructs
github workflow to override these two combinations with
the ones which builds with dpdk and with C++20 modules.
this hurts the coverage of the test matrix.

after this change, instead of using `include` keyword,
we just add two more jobs which are dedicated for
testing these two combinations without overriding
the existing ones.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
instead of using ubuntu:jammy and setup-cpp action for prepearing
the building toolchain, use fedora:40 container for building and
testing.

after switching to the github workflow based CI, we've been
seeing test failures due to networking issue:

```
  Failed to install llvm via system package manager Error: Command failed with exit code 35: curl -LJO https://apt.llvm.org/llvm.sh
    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                   Dload  Upload   Total   Spent    Left  Speed

    0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    0     0    0     0    0     0      0      0 --:--:--  0:04:19 --:--:--     0
  curl: (35) OpenSSL SSL_connect: Broken pipe in connection to apt.llvm.org:443
```

since fedora 40 comes with all the dependencies we need, let's
build and test in a container with the fedora:40 image. with,
hopefully the better CDN of the docker, and more reliable mirrors
of fedora repositories, and the package retrievial machinary built
into fedora's package management tools, we should have a more
resilient CI.

please note, in this change, we also

* install git before checkout the repo. the reason is that, unlike
  the github-hosted runner, the fedora:40 image does not have `git`
  installed, so we have to install it manually before using
  "actions/checkout" action.
* install clang-tools-extra when building with C++ modules enabled,
  because cmake and clang depend on clang-scan-deps to analyze the
  dependencies in betweener of C++20 modules.
* use static library in "dev" build mode. this is to work around
  the issue where seastar allocator causes infinite recursive call
  if seastar is compiled as a shared library. this only happens when
  the tree is compiled with newer glibc. see also scylladb#2247

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
@tchaikov
Copy link
Contributor Author

@scylladb/seastar-maint hello maintainers, could you help review this change?

@tchaikov
Copy link
Contributor Author

the test failure due to "Error: Failed to install the clang++-18" was spotted again at https://github.com/scylladb/seastar/actions/runs/9169644191/job/25210438413?pr=2256

@nyh nyh closed this in 67a14f9 May 21, 2024
@nyh nyh merged commit 67a14f9 into scylladb:master May 21, 2024
14 checks passed
@tchaikov tchaikov deleted the build-with-f40 branch May 21, 2024 13:32
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.

None yet

2 participants