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

Improve ci #6

Closed
wants to merge 18 commits into from
29 changes: 0 additions & 29 deletions .ci/docker/rockylinux.Dockerfile

This file was deleted.

28 changes: 0 additions & 28 deletions .ci/docker/ubuntu.Dockerfile

This file was deleted.

156 changes: 85 additions & 71 deletions .github/workflows/cxx.yml
Original file line number Diff line number Diff line change
@@ -1,83 +1,97 @@
# Copyright © 2024 Bret Brown
# SPDX-License-Identifier: MIT

Copy link
Member

@neatudarius neatudarius Sep 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do you want to remove these lines? I think we should keep them.

btw, @camio , should we add a mention for YAML files into https://github.com/beman-project/beman/blob/main/docs/beman-standard.md#file-contents?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

btw, @camio , should we add a mention for YAML files into https://github.com/beman-project/beman/blob/main/docs/beman-standard.md#file-contents?

Sounds like a promising idea. Would you be willing to create a PR or issue for it?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. I will do it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

name: Test
name: Test Multi-Platform

on:
push:
branches: [ main ]
paths:
- "src/**"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

- "test/**"
- "CMakeLists.txt"
pull_request:
branches: [ main ]
paths:
- "src/**"
- "test/**"
- "CMakeLists.txt"

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

jobs:
test:
runs-on: ubuntu-latest
build:
runs-on: ${{ matrix.os }}

strategy:
fail-fast: false

matrix:
cfg:
- { id: ubuntu-gcc-werror, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_FLAGS='-Werror=all -Werror=extra'"}
- { id: ubuntu-gcc-aubsan, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_FLAGS=-fsanitize=address -fsanitize=undefined"}
- { id: ubuntu-gcc-tsan, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_FLAGS=-fsanitize=thread"}
- { id: ubuntu-gcc-static, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: ""}
- { id: ubuntu-gcc-static-cxx98, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_STANDARD=98 -DCMAKE_CXX_STANDARD_REQUIRED=on"}
- { id: ubuntu-gcc-static-cxx11, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_STANDARD=11 -DCMAKE_CXX_STANDARD_REQUIRED=on"}
- { id: ubuntu-gcc-static-cxx14, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_STANDARD_REQUIRED=on"}
- { id: ubuntu-gcc-static-cxx17, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=on"}
- { id: ubuntu-gcc-static-cxx20, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=on"}
- { id: ubuntu-gcc-dynamic, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DBUILD_SHARED_LIBS=on"}
- { id: ubuntu-clang-static, platform: ubuntu, cc: clang, cpp: clang++, cmake_args: ""}
- { id: ubuntu-clang-dynamic, platform: ubuntu, cc: clang, cpp: clang++, cmake_args: "-DBUILD_SHARED_LIBS=on"}
# Disabling Rocky until it catches up on CMake versions or a way to sideload newer version of CMake
# is identified.
# - { id: rockylinux-gcc-static, platform: rockylinux, cc: gcc, cpp: g++, cmake_args: ""}
# - { id: rockylinux-clang-static, platform: rockylinux, cc: clang, cpp: clang++, cmake_args: ""}
include:
- os: windows-latest
build_type: Release
cmake_args: ""
preset: msvc-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_FLAGS='-Werror=all -Werror=extra'"
preset: gcc-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_FLAGS='-fsanitize=address -fsanitize=undefined'"
preset: gcc-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_FLAGS='-fsanitize=thread'"
preset: gcc-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_STANDARD=98 -DCMAKE_CXX_STANDARD_REQUIRED=on"
preset: gcc-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_STANDARD=11 -DCMAKE_CXX_STANDARD_REQUIRED=on"
preset: gcc-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_STANDARD_REQUIRED=on"
preset: gcc-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=on"
preset: gcc-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=on"
preset: gcc-debug
- os: ubuntu-latest
cmake_args: "-DBUILD_SHARED_LIBS=on"
preset: gcc-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_FLAGS='-Werror=all -Werror=extra'"
preset: clang-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_FLAGS='-fsanitize=address -fsanitize=undefined'"
preset: clang-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_FLAGS='-fsanitize=thread'"
preset: clang-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_STANDARD=98 -DCMAKE_CXX_STANDARD_REQUIRED=on"
preset: clang-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_STANDARD=11 -DCMAKE_CXX_STANDARD_REQUIRED=on"
preset: clang-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_STANDARD_REQUIRED=on"
preset: clang-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=on"
preset: clang-debug
- os: ubuntu-latest
cmake_args: "-DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=on"
preset: clang-debug
- os: ubuntu-latest
cmake_args: "-DBUILD_SHARED_LIBS=on"
preset: clang-debug
- os: macos-latest
cmake_args: ""
preset: clang-debug

steps:
- uses: actions/checkout@v2
# GitHub runners have updated the Ubuntu Linux Kernel to use strong ASLR,
# but LLVM is not configured for this change, and thus the address
# sanitizer breaks.
#
# The next image is supposed to fix this, so if the Ubuntu image has been
# updated, this work around is no longer required.
- name: get runner image version
id: runner-image-version
run: |
echo "image-version=$(echo $ImageVersion)" >> "$GITHUB_OUTPUT"
working-directory: .
- name: modify number of bits to use for ASLR entropy
if: ${{ steps.runner-image-version.outputs.ImageVersion }} == '20240310.1.0'
run: |
sudo sysctl -a | grep vm.mmap.rnd
sudo sysctl -w vm.mmap_rnd_bits=28
working-directory: .
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: false
load: true
tags: ${{ matrix.cfg.id }}
file: .ci/docker/${{ matrix.cfg.platform }}.Dockerfile
build-args: |
cc=${{ matrix.cfg.cc }}
cxx=${{ matrix.cfg.cpp }}
cmake_args=${{ matrix.cfg.cmake_args }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Run tests
run: |
docker run ${{ matrix.cfg.id }} ctest --test-dir build
- uses: actions/checkout@v3
- uses: seanmiddleditch/gha-setup-ninja@master

- name: Setup MSVC
if: startsWith(matrix.os, 'windows')
uses: TheMrMilchmann/setup-msvc-dev@v3
with:
arch: x64

- name: Configure CMake
run: cmake --preset ${{ matrix.preset }} -DBUILD_TESTING=on ${{ matrix.cmake_args }}

- name: Build
run: cmake --build --preset ${{ matrix.preset }}

- name: Test
run: ctest --preset ${{ matrix.preset }}
105 changes: 105 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
{
"version": 3,
"configurePresets": [
{
"name": "gcc-base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_C_COMPILER": "gcc",
"CMAKE_CXX_COMPILER": "g++",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "clang-base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_C_COMPILER": "clang",
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "msvc-base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_C_COMPILER": "cl",
"CMAKE_CXX_COMPILER": "cl",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "gcc-debug",
"displayName": "gcc-debug",
"inherits": "gcc-base"
},
{
"name": "clang-debug",
"displayName": "clang-debug",
"inherits": "clang-base"
},
{
"name": "msvc-debug",
"displayName": "msvc-debug",
"inherits": "msvc-base"
}
],
"buildPresets": [
{
"name": "gcc-debug",
"configurePreset": "gcc-debug"
},
{
"name": "clang-debug",
"configurePreset": "clang-debug"
},
{
"name": "msvc-debug",
"configurePreset": "msvc-debug"
}
],
"testPresets": [
{
"name": "gcc-debug",
"configurePreset": "gcc-debug",
"output": {
"outputOnFailure": true
},
"execution": {
"noTestsAction": "error",
"stopOnFailure": true
}
},
{
"name": "clang-debug",
"configurePreset": "clang-debug",
"output": {
"outputOnFailure": true
},
"execution": {
"noTestsAction": "error",
"stopOnFailure": true
}
},
{
"name": "msvc-debug",
"configurePreset": "msvc-debug",
"output": {
"outputOnFailure": true
},
"execution": {
"noTestsAction": "error",
"stopOnFailure": true
}
}
]
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}
}

Loading