Reorder CI tests #107
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This file is part of the Ssstr string library. | |
# Copyright 2022-2023 Board of Regents of the University of Wisconsin System | |
# SPDX-License-Identifier: MIT | |
name: CI | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- uses: pre-commit/action@v3.0.0 | |
test: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu | |
- macos | |
- windows | |
arch: | |
- x86_64 | |
- x86 | |
compiler: | |
- gcc | |
- clang | |
- clang-cl | |
- msvc | |
exclude: | |
- arch: x86 | |
compiler: clang-cl | |
- os: ubuntu | |
compiler: msvc | |
- os: ubuntu | |
compiler: clang-cl | |
- os: macos | |
arch: x86 | |
- os: macos | |
compiler: msvc | |
- os: macos | |
compiler: clang-cl | |
- os: windows | |
compiler: clang | |
- os: windows | |
arch: x86 | |
compiler: gcc | |
include: | |
- os: ubuntu | |
runner: ubuntu-latest | |
- os: macos | |
runner: macos-latest | |
- os: windows | |
runner: windows-latest | |
- arch: x86_64 | |
arch_flag: -m64 | |
vsenv_arch: amd64 | |
- arch: x86 | |
arch_flag: -m32 | |
vsenv_arch: amd64_x86 | |
- compiler: gcc | |
cc: gcc | |
cxx: g++ | |
- compiler: clang | |
cc: clang | |
cxx: clang++ | |
- compiler: clang-cl | |
cc: clang-cl | |
cxx: clang-cl | |
- compiler: msvc | |
arch_flag: "" | |
cc: cl | |
cxx: cl | |
- os: macos | |
compiler: gcc | |
# macOS has gcc/g++ pointing to clang/clang++ | |
cc: gcc-12 | |
cxx: g++-12 | |
name: test-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.compiler }} | |
runs-on: ${{ matrix.runner }} | |
env: # These are recognized by meson | |
CC: ${{ matrix.cc }} | |
CXX: ${{ matrix.cxx }} | |
CFLAGS: ${{ matrix.arch_flag }} | |
CXXFLAGS: ${{ matrix.arch_flag }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: Install tools | |
run: python -m pip install --upgrade pip meson ninja | |
- name: Install 32-bit toolchain | |
if: matrix.os == 'ubuntu' && matrix.arch == 'x86' | |
run: sudo apt-get install -y gcc-multilib g++-multilib | |
- uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: ${{ matrix.vsenv_arch }} | |
- name: Test release build | |
run: | | |
meson setup build-release --buildtype release -Dtest=enabled -Ddocs=auto | |
meson dist -C build-release | |
- name: Test with ASan/UBSan | |
if: matrix.os == 'ubuntu' && matrix.compiler == 'clang' | |
run: | | |
meson setup sanitize --buildtype debug -Db_lundef=false -Dtest=enabled | |
cd sanitize | |
meson configure -Db_sanitize=address,undefined | |
meson test | |
- name: Test with MSan/LSan | |
if: matrix.os == 'ubuntu' && matrix.arch == 'x86_64' && matrix.compiler == 'clang' | |
run: | | |
cd sanitize | |
meson configure -Db_sanitize=memory | |
meson test | |
meson configure -Db_sanitize=leak | |
meson test | |
- name: Test debug build | |
run: | | |
meson setup build-debug --buildtype debug -Dtest=enabled -Ddocs=auto | |
meson dist -C build-debug | |
- name: Test with different GCC dialects | |
if: matrix.compiler == 'gcc' | |
run: | | |
meson setup dialects --buildtype debug -Dtest=enabled | |
cd dialects | |
meson configure -Dc_std=c99 -Dcpp_std=c++03 | |
meson test | |
meson configure -Dc_std=c17 -Dcpp_std=c++20 | |
meson test | |
meson configure -Dc_std=gnu99 -Dcpp_std=gnu++03 | |
meson test | |
meson configure -Dc_std=gnu17 -Dcpp_std=gnu++20 | |
meson test | |
- name: Run benchmarks | |
# Exclude MinGW for now (crashes at runtime; needs investigation) | |
if: matrix.os != 'windows' || matrix.compiler != 'gcc' | |
run: | | |
cd build-release | |
meson configure -Dbenchmark=enabled | |
ninja benchmark | |
docs: | |
needs: | |
- lint | |
- test | |
concurrency: | |
group: publish-gh-pages | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: Install tools | |
run: | | |
python -m pip install --upgrade pip meson ninja | |
- name: Build man pages | |
run: | | |
meson setup builddir -Ddocs=enabled | |
cd builddir | |
ninja htmlman | |
- name: Publish to gh-pages | |
if: >- | |
github.repository == 'marktsuchida/ssstr' && | |
github.event_name == 'push' && | |
github.ref == 'refs/heads/main' | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: builddir/htmlman | |
commit_message: Deploy from main |