Skip to content

Conversation

@imichaelmoore
Copy link
Collaborator

@imichaelmoore imichaelmoore commented Nov 29, 2025

Summary

Expand CI test matrix to cover multiple Linux distributions, compilers, and architectures. Add local Docker test script for development on macOS/Windows. Add weekly scheduled runs with automatic issue creation on failures.

CI Matrix (18 jobs)

Distro libc GCC Clang Notes
Alpine 3.22 musl
Debian bookworm glibc
Ubuntu 24.04 glibc
Fedora 41 glibc
Rocky Linux 9 glibc RHEL compatible
Oracle Linux 10 glibc Oracle Cloud
Amazon Linux 2023 glibc AWS
Arch Linux glibc Rolling release
Gentoo glibc Binary packages via getuto
Alpine ARM64 (QEMU) musl Emulated

Plus: Coverage job (Ubuntu)

Scheduled Runs

  • Weekly: Sundays at 00:00 UTC
  • Failure notification: Automatically creates GitHub issue per failed distro/compiler
  • Deduplication: Uses unique labels (ci:<distro>-<compiler>) to prevent duplicate issues

Docker Script

./scripts/test-in-docker.sh [distro] [compiler] [build_type]

# Examples
./scripts/test-in-docker.sh                      # alpine + gcc + Coverage
./scripts/test-in-docker.sh debian clang Debug   # debian + clang + Debug  
./scripts/test-in-docker.sh --list               # show all platforms

Supports: alpine, debian, ubuntu, fedora, rocky, oraclelinux, amazonlinux, arch, gentoo

Docker script (scripts/test-in-docker.sh):
- Add distro parameter: alpine, debian, ubuntu, fedora, rocky
- Add compiler parameter: gcc, clang
- Add --help and --list options
- Generate appropriate Dockerfile per distro/package manager

GitHub Actions CI (.github/workflows/ci.yml):
- Convert test job to matrix strategy with 10 combinations
- Test across 5 distros: Alpine (musl), Debian, Ubuntu, Fedora, Rocky (glibc)
- Test both GCC and Clang compilers on all distros
- Add ARM64 testing via QEMU emulation
- Add timeout-minutes to prevent hung jobs
- Use fail-fast: false to run all jobs even if one fails
- Keep coverage job separate (unchanged)
Fix build failures by adding missing sanitizer libraries:
- Alpine gcc: gcc-sanitizer
- Debian/Ubuntu clang: libclang-rt-dev
- Fedora gcc: libasan libubsan
- Fedora clang: compiler-rt
- Rocky gcc: libasan libubsan
- Alpine gcc: Use Debug build (no sanitizer support on musl)
- Add procps/procps-ng for pgrep command used by e2e tests
- Use matrix.build_type to allow per-job build type configuration
- Add procps/procps-ng for pgrep (needed by e2e tests)
- Add sanitizer packages: libclang-rt-dev, libasan, libubsan, compiler-rt
- Auto-switch Alpine + gcc + Sanitize to Debug (musl limitation)
- Update help notes
CI additions:
- Amazon Linux 2023: gcc + Sanitize (AWS environment)
- Arch Linux: gcc + clang + Sanitize (rolling release, latest compilers)
- Gentoo: gcc + Debug (source-based, slower build)

Docker script additions:
- Support for amazonlinux, arch, gentoo distros
- Warning for Gentoo + clang (requires manual setup)
- Updated help text and platform list
@imichaelmoore imichaelmoore changed the title Add multi-platform and multi-compiler CI testing ci: add multi-platform and multi-compiler testing Nov 29, 2025
- Runs every Sunday at 00:00 UTC
- Creates GitHub issue on failure (only for scheduled runs)
- Uses unique label per distro/compiler to prevent duplicate issues
- Only creates issue if no open issue with same label exists
@imichaelmoore imichaelmoore merged commit f98f083 into troydhanson:master Nov 29, 2025
18 checks passed
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