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

Update CI #1

Merged
merged 2 commits into from
Oct 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .github/patches/gcc_14_2.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
From c9e05b03c18e898be604ab90401476e9c473cc52 Mon Sep 17 00:00:00 2001
From: Jonathan Wakely <[email protected]>
Date: Thu, 16 May 2024 17:15:55 +0100
Subject: [PATCH] libstdc++: Fix typo in _Grapheme_cluster_view::_Iterator
[PR115119]

libstdc++-v3/ChangeLog:

PR libstdc++/115119
* include/bits/unicode.h (_Iterator::operator++(int)): Fix typo
in increment expression.
* testsuite/ext/unicode/grapheme_view.cc: Check post-increment
on view's iterator.

Source: https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=c9e05b03c18e898be604ab90401476e9c473cc52
Modified paths, to make it work
---
bits/unicode.h | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/bits/unicode.h b/bits/unicode.h
index 46238143fb61..a14a17c5dfcf 100644
--- a/bits/unicode.h
+++ b/bits/unicode.h
@@ -34,10 +34,12 @@
#include <array>
#include <bit> // bit_width
#include <charconv> // __detail::__from_chars_alnum_to_val_table
+#include <string_view>
#include <cstdint>
#include <bits/stl_algo.h>
#include <bits/stl_iterator.h>
-#include <bits/ranges_base.h>
+#include <bits/ranges_base.h> // iterator_t, sentinel_t, input_range, etc.
+#include <bits/ranges_util.h> // view_interface

namespace std _GLIBCXX_VISIBILITY(default)
{
@@ -802,7 +804,7 @@ inline namespace __v15_1_0
operator++(int)
{
auto __tmp = *this;
- ++this;
+ ++*this;
return __tmp;
}

93 changes: 59 additions & 34 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Build CI

on:
push:
branches: ["main"]
branches: ['main']
pull_request:
workflow_dispatch:

Expand All @@ -26,14 +26,14 @@ jobs:
os-version: 2022
environment: mingw
architecture: x86_64
shell: "msys2 {0}"
shell: 'msys2 {0}'

- name: Windows UCRT Release
os: windows
os-version: 2022
environment: ucrt
architecture: ucrt-x86_64
shell: "msys2 {0}"
shell: 'msys2 {0}'

- name: Linux Release
os: ubuntu
Expand Down Expand Up @@ -74,17 +74,17 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
fetch-depth: "0"
fetch-depth: '0'

- uses: actions/checkout@v4
name: Checkout OOPetris main repo
name: Checkout OOPetris main repo
with:
fetch-depth: "0"
fetch-depth: '0'
repository: OpenBrickProtocolFoundation/oopetris
ref: main
path: ./oopetris
submodules: false

- name: Setup MSVC (Windows)
if: matrix.config.os == 'windows' && matrix.config.environment == 'msvc'
uses: TheMrMilchmann/setup-msvc-dev@v3
Expand All @@ -107,31 +107,46 @@ jobs:
mingw-w64-${{matrix.config.architecture}}-ca-certificates
mingw-w64-${{matrix.config.architecture}}-cmake
git

- name: Setup Clang (Linux)
if: matrix.config.os == 'ubuntu' && matrix.config.use-clang == true

- name: Setup Clang (Linux) (libc++)
if: matrix.config.os == 'ubuntu' && matrix.config.use-clang == true && matrix.config.use-clang_stdlib
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 19
sudo apt-get install libc++-19* libc++abi*19* -y --no-install-recommends
echo "CC=clang-19" >> "$GITHUB_ENV"
echo "CXX=clang++-19" >> "$GITHUB_ENV"
echo "OBJC=clang-19" >> "$GITHUB_ENV"

- name: Setup Clang (Linux) (libstdc++)
if: matrix.config.os == 'ubuntu' && matrix.config.use-clang == true && (! matrix.config.use-clang_stdlib)
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 18
sudo apt-get install libc++-18* libc++abi*18* -y
echo "CC=clang-18" >> "$GITHUB_ENV"
echo "CXX=clang++-18" >> "$GITHUB_ENV"
echo "OBJC=clang-18" >> "$GITHUB_ENV"


sudo ./llvm.sh 19
echo "CC=clang-19" >> "$GITHUB_ENV"
echo "CXX=clang++-19" >> "$GITHUB_ENV"
echo "OBJC=clang-19" >> "$GITHUB_ENV"
# Patch the libstd++ library, see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115119
# This is a dirty workaround, but it is needed, since gcc 14.2 (where this was patched usptream) is not easily available
# If we use the oracular (Ubuntu 24.10) repos, we could install gcc 14.2, but clang-19 isn't compatible with that
# TODO: remove this, after it works again
sudo patch -p1 /usr/include/c++/14/bits/unicode.h .github/patches/gcc_14_2.diff

- name: Setup GCC (Linux)
if: matrix.config.os == 'ubuntu' && matrix.config.use-clang == false
uses: egor-tensin/setup-gcc@v1
with:
version: 14
platform: x64

- name: Setup Clang (MacOS)
if: matrix.config.os == 'macos'
run: |
brew update
brew install llvm@18
# TODO annotate with lld@19, after that is accepted, we don't want to use lld@20 without manually updating it !
brew install llvm@19 lld
echo "$(brew --prefix)/opt/llvm/bin" >> $GITHUB_PATH
echo "LDFLAGS=-L$(brew --prefix)/opt/llvm/lib -L$(brew --prefix)/opt/llvm/lib/c++ -Wl,-rpath,$(brew --prefix)/opt/llvm/lib/c++" >> "$GITHUB_ENV"
echo "CPPFLAGS=-I$(brew --prefix)/opt/llvm/include" >> "$GITHUB_ENV"
Expand All @@ -142,12 +157,22 @@ jobs:
echo "CXX_LD=lld" >> "$GITHUB_ENV"
echo "OBJC_LD=lld" >> "$GITHUB_ENV"

- name: Unbreak Python in GHA (MacOS 13 image)
if: matrix.config.os == 'macos' && matrix.config.os-version == 13
run: |
# TODO: remove this, after it works again
# A workaround for "The `brew link` step did not complete successfully" error.
# See e.g. https://github.com/Homebrew/homebrew-core/issues/165793#issuecomment-1991817938
find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete
sudo rm -rf /Library/Frameworks/Python.framework/
brew install --force python3 && brew unlink python3 && brew unlink python3 && brew link --overwrite python3

- name: Setup meson (MacOS)
if: matrix.config.os == 'macos'
if: matrix.config.os == 'macos'
run: |
brew update
brew install meson

# NOTE: meson has no dependencies, so --break-system-packages doesn't really break anything!
- name: Setup meson
if: matrix.config.os != 'macos'
Expand All @@ -158,7 +183,7 @@ jobs:
if: matrix.config.os == 'ubuntu'
run: |
sudo apt-get update
sudo apt-get install ninja-build libreadline-dev -y
sudo apt-get install ninja-build libreadline-dev -y --no-install-recommends
sudo pip install meson --break-system-packages

- name: Fix pkg-config (Windows MSVC)
Expand All @@ -168,24 +193,24 @@ jobs:
choco install pkgconfiglite
echo "PKG_CONFIG_PATH=C:/lib/pkgconfig" | Out-File -FilePath $env:GITHUB_ENV -Append

- name: Configure
run: |
cd oopetris
meson setup build -Dbuildtype=release -Ddefault_library=static -Dclang_libcpp=${{ ( ( matrix.config.os == 'ubuntu' && matrix.config.use-clang == true && matrix.config.use-clang_stdlib ) || matrix.config.os == 'macos' ) && 'enabled' || 'disabled' }} -Donly_build_libs=true ${{ matrix.config.os == 'windows' && '-Db_vscrt=from_buildtype' || '' }} ${{ (matrix.config.os == 'windows' && ( matrix.config.environment == 'mingw' || matrix.config.environment == 'ucrt' )) && '-Dprefix=$RUNNER_TEMP/msys64${MINGW_PREFIX}/' || ''}}
- name: Configure OOPetris
run: |
cd oopetris
meson setup build -Dbuildtype=release -Ddefault_library=static -Dclang_libcpp=${{ ( ( matrix.config.os == 'ubuntu' && matrix.config.use-clang == true && matrix.config.use-clang_stdlib ) || matrix.config.os == 'macos' ) && 'enabled' || 'disabled' }} -Donly_build_libs=true ${{ matrix.config.os == 'windows' && '-Db_vscrt=from_buildtype' || '' }} ${{ (matrix.config.os == 'windows' && ( matrix.config.environment == 'mingw' || matrix.config.environment == 'ucrt' )) && '-Dprefix=$RUNNER_TEMP/msys64${MINGW_PREFIX}/' || ''}}

- name: Build and install Libs
if: matrix.config.os != 'ubuntu'
run: |
cd oopetris
meson install -C build
run: |
cd oopetris
meson install -C build

- name: Build and install Libs (Linux)
if: matrix.config.os == 'ubuntu'
run: |
cd oopetris
sudo meson install -C build
run: |
cd oopetris
sudo meson install -C build

- name: Build Wrapper
run: |
meson setup -Dtests=false -Dexample=true build -Dbuildtype=release -Ddefault_library=static -Dclang_libcpp=${{ ( ( matrix.config.os == 'ubuntu' && matrix.config.use-clang == true && matrix.config.use-clang_stdlib ) || matrix.config.os == 'macos' ) && 'enabled' || 'disabled' }} ${{ matrix.config.os == 'windows' && '-Db_vscrt=from_buildtype' || '' }}
run: |
meson setup -Dtests=false -Dexample=true build -Dbuildtype=release -Ddefault_library=static -Dclang_libcpp=${{ ( ( matrix.config.os == 'ubuntu' && matrix.config.use-clang == true && matrix.config.use-clang_stdlib ) || matrix.config.os == 'macos' ) && 'enabled' || 'disabled' }} ${{ matrix.config.os == 'windows' && '-Db_vscrt=from_buildtype' || '' }}
meson compile -C build
53 changes: 26 additions & 27 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,23 @@ name: Test CI

on:
push:
branches: ["main"]
branches: ['main']
pull_request:
workflow_dispatch:

jobs:
test:
name: Run Tests
name: Run Tests
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: "0"
fetch-depth: '0'

- uses: actions/checkout@v4
name: Checkout OOPetris main repo
with:
fetch-depth: "0"
fetch-depth: '0'
repository: OpenBrickProtocolFoundation/oopetris
ref: main
path: ./oopetris
Expand All @@ -28,11 +28,11 @@ jobs:
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 18
sudo apt-get install libc++-18* libc++abi*18* llvm-18 -y
echo "CC=clang-18" >> "$GITHUB_ENV"
echo "CXX=clang++-18" >> "$GITHUB_ENV"
sudo ./llvm.sh 19
sudo apt-get install libc++-19* libc++abi*19* llvm-19 -y --no-install-recommends
echo "CC=clang-19" >> "$GITHUB_ENV"
echo "CXX=clang++-19" >> "$GITHUB_ENV"

# NOTE: meson has no dependencies, so --break-system-packages doesn't really break anything!
- name: Setup meson
run: |
Expand All @@ -41,20 +41,20 @@ jobs:
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install ninja-build valgrind gcovr libcriterion-dev libreadline-dev -y
sudo apt-get install ninja-build valgrind gcovr libcriterion-dev libreadline-dev -y --no-install-recommends

- name: Configure
run: |
cd oopetris
meson setup build -Db_coverage=true -Dbuildtype=debugoptimized -Ddefault_library=shared -Dclang_libcpp=enabled -Donly_build_libs=true -Dprefix=/usr
- name: Configure OOPetris
run: |
cd oopetris
meson setup build -Db_coverage=true -Dbuildtype=debugoptimized -Ddefault_library=shared -Dclang_libcpp=enabled -Donly_build_libs=true -Dprefix=/usr

- name: Build and install Libs
run: |
cd oopetris
sudo meson install -C build
cd oopetris
sudo meson install -C build

- name: Build Wrapper
run: |
run: |
meson setup build -Db_coverage=true -Dbuildtype=debugoptimized -Ddefault_library=shared -Dclang_libcpp=enabled -Dtests=true -Dexample=true -Dprefix=/usr
meson compile -C build

Expand All @@ -70,20 +70,19 @@ jobs:
path: ./build/meson-logs/coverage.xml
fail: true
publish: true
coverage-summary-title: "Code Coverage Summary"
coverage-summary-title: 'Code Coverage Summary'
togglable-report: true

- name: Upload test coverage artifacts
uses: actions/upload-artifact@v4
with:
name: Tests coverage artifacts
path: |
./build/meson-logs/coverage.xml
./build/meson-logs/coveragereport/

name: Tests coverage artifacts
path: |
./build/meson-logs/coverage.xml
./build/meson-logs/coveragereport/

- name: Test for leaks with valgrind (Linux)
run: |
valgrind --tool=memcheck --leak-check=full --error-exitcode=1 ./build/example/example r ./tests/files/correct.rec
valgrind --tool=memcheck --leak-check=full --error-exitcode=1 cat ./tests/files/example.rec_text | ./build/example/example w ./test.rec
valgrind --tool=memcheck --leak-check=full --error-exitcode=1 ./build/example/example r ./test.rec
run: |
valgrind --tool=memcheck --leak-check=full --error-exitcode=1 ./build/example/example r ./tests/files/correct.rec
valgrind --tool=memcheck --leak-check=full --error-exitcode=1 cat ./tests/files/example.rec_text | ./build/example/example w ./test.rec
valgrind --tool=memcheck --leak-check=full --error-exitcode=1 ./build/example/example r ./test.rec
Loading