Skip to content
Open
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
147 changes: 147 additions & 0 deletions .github/actions/setup_linux/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
name: Set up modmesh CI dependencies on Linux
description: Set up the necessary dependencies for running CI tests on Github action Linux runners

inputs:
workflow:
description: The name of the workflow that will use this action
required: true

runs:
using: composite
steps:
- name: Add 8G swap
# Prevent hitting runner's resource limits when running clang-tidy
shell: bash
run: |
# Remove /swapfile first to avoid "fallocate: Text file busy" error
sudo swapoff -a
sudo rm -f /swapfile
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
free -h

- name: Cache Qt download
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/Qt
key: ${{ runner.os }}-qt-6.8.1-linux_gcc_64
# fallback to any previous Qt cache on this OS
restore-keys: |
${{ runner.os }}-qt-6.8.1-

- name: dependency by apt
shell: bash
run: |
# To update the cmake version > 4, install the latest cmake by kitware apt repository.
# Reference: https://apt.kitware.com/
sudo apt-get -y update
sudo apt-get -qy install ca-certificates gpg wget
test -f /usr/share/doc/kitware-archive-keyring/copyright || \
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | \
gpg --dearmor - | \
sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ noble main' | \
sudo tee /etc/apt/sources.list.d/kitware.list >/dev/null
sudo apt-get -qqy update
test -f /usr/share/doc/kitware-archive-keyring/copyright || \
sudo rm /usr/share/keyrings/kitware-archive-keyring.gpg
sudo apt-get -qy install kitware-archive-keyring
sudo apt-get -qy install \
sudo curl git build-essential make cmake libc6-dev gcc g++ \
python3 python3-dev python3-venv
# The path of apt-get cmake is `/usr/bin/cmake`,
# but the path of built-in cmake of runner image is `/usr/local/bin/cmake`.
# We remove the built-in cmake.
sudo rm -rf /usr/local/bin/cmake

# Install qt6 only with ubuntu-24.04
# This page explains why we need libgl1-mesa-dev
# https://doc-snapshots.qt.io/qt6-dev/linux.html
#
# In short, OpenGL libraries and headers are required. Without
# installing this package, cmake won't find the correct lib path.
# This has been replaced by the 'install qt' section below to manage
# qt6 versioning independently from the OS.

# if [ "${{ matrix.os }}" == "ubuntu-24.04" ] ; then \
# sudo apt-get -qy install \
# qt6-3d-dev xvfb \
# libgl1-mesa-dev
# fi

- name: Install clang-tidy for lint
if: ${{ inputs.workflow == 'lint' }}
shell: bash
run: |
# Install clang-tidy-21 from LLVM repository for full C++23 support
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
echo "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-21 main" | sudo tee /etc/apt/sources.list.d/llvm.list
sudo apt-get -qqy update
sudo apt-get -qy install clang-tidy-21 silversearcher-ag
sudo ln -fs "$(which clang-tidy-21)" "/usr/local/bin/clang-tidy"

- name: Install and configure gcc-14
shell: bash
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get -qqy update
sudo apt-get -qy install gcc-14 g++-14
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-14 100
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-14 100

- name: install qt
uses: jurplel/install-qt-action@v4
with:
version: '6.8.1'
host: 'linux'
target: 'desktop'
arch: 'linux_gcc_64'
modules: 'qt3d'
setup-python: 'false'
cache: false

- name: dependency by pip (common)
shell: bash
run: |
sudo pip3 install setuptools
sudo pip3 install numpy pytest flake8

- name: dependency by pip (lint & build)
if: "${{ inputs.workflow == 'lint' || inputs.workflow == 'build' }}"
shell: bash
run: |
sudo pip3 install matplotlib jsonschema
sudo pip3 install pyside6==$(qmake6 -query QT_VERSION)

- name: dependency (manual)
shell: bash
run: sudo ${GITHUB_WORKSPACE}/contrib/dependency/install.sh pybind11

- name: show dependency
shell: bash
# Copy the commands from contrib/dependency/showdep.sh
run: |
echo "gcc path: $(which gcc)"
echo "gcc version: $(gcc --version)"
echo "cmake path: $(which cmake)"
echo "cmake version: $(cmake --version)"
echo "python3 path: $(which python3)"
echo "python3 version: $(python3 --version)"
echo "python3-config --prefix: $(python3-config --prefix)"
echo "python3-config --exec-prefix: $(python3-config --exec-prefix)"
echo "python3-config --includes: $(python3-config --includes)"
echo "python3-config --libs: $(python3-config --libs)"
echo "python3-config --cflags: $(python3-config --cflags)"
echo "python3-config --ldflags: $(python3-config --ldflags)"
echo "pip3 path: $(which pip3)"
python3 -c 'import numpy as np; print("np.__version__:", np.__version__, np.get_include())'
echo "pytest path: $(which pytest)"
echo "pytest version: $(pytest --version)"
echo "clang-tidy path: $(which clang-tidy)"
echo "clang-tidy version: $(clang-tidy -version)"
echo "flake8 path: $(which flake8)"
echo "flake8 version: $(flake8 --version)"
86 changes: 86 additions & 0 deletions .github/actions/setup_macos/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Set up modmesh CI dependencies on MacOS
description: Set up the necessary dependencies for running CI tests on Github action MacOS runners

inputs:
workflow:
description: The name of the workflow that will use this action
required: true

runs:
using: composite
steps:
- name: Creates /usr/local/include for macos runner
shell: bash
run: |
# Some mac runner does not have /usr/local/include and cmake sometimes crashes
sudo mkdir -p /usr/local/include

- name: dependency by homebrew
shell: bash
run: |
export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
# This has been replaced by the 'install qt' section below to manage
# qt6 versioning independently from the OS.
# brew install llvm@21 qt6
brew install llvm@21
ln -s "$(brew --prefix llvm@21)/bin/clang-format" "/usr/local/bin/clang-format"
ln -s "$(brew --prefix llvm@21)/bin/clang-tidy" "/usr/local/bin/clang-tidy"

- name: install qt
uses: jurplel/install-qt-action@v4
with:
version: '6.8.1'
host: 'mac'
target: 'desktop'
arch: 'clang_64'
modules: 'qt3d'
setup-python: 'false'
cache: true

- name: dependency by pip
shell: bash
run: |
echo "which python3: $(which python3)"
ls -al $(which python3)
# suppress the warning of pip because brew forces PEP668 since python3.12
python3 -m pip -v install --upgrade setuptools --break-system-packages
python3 -m pip -v install --upgrade numpy matplotlib pytest flake8 jsonschema
# For now (2024/10/22), pyside6 6.6.3 does not support Python 3.13.
# Use --ignore-requires-python to force installation.
python3 -m pip -v install --upgrade pyside6==$(qmake -query QT_VERSION) --ignore-requires-python

- name: dependency (manual)
shell: bash
run: sudo NO_INSTALL_PREFIX=1 ${GITHUB_WORKSPACE}/contrib/dependency/install.sh pybind11

- name: dependency (manual) for build
if: ${{ inputs.workflow == 'build' }}
shell: bash
run: |
thirdparty/metal-cpp.sh

- name: show dependency
shell: bash
# Copy the commands from contrib/dependency/showdep.sh
run: |
echo "gcc path: $(which gcc)"
echo "gcc version: $(gcc --version)"
echo "cmake path: $(which cmake)"
echo "cmake version: $(cmake --version)"
echo "python3 path: $(which python3)"
echo "python3 version: $(python3 --version)"
echo "python3-config --prefix: $(python3-config --prefix)"
echo "python3-config --exec-prefix: $(python3-config --exec-prefix)"
echo "python3-config --includes: $(python3-config --includes)"
echo "python3-config --libs: $(python3-config --libs)"
echo "python3-config --cflags: $(python3-config --cflags)"
echo "python3-config --ldflags: $(python3-config --ldflags)"
echo "pip3 path: $(which pip3)"
python3 -c 'import numpy as np; print("np.__version__:", np.__version__, np.get_include())'
echo "pytest path: $(which pytest)"
echo "pytest version: $(pytest --version)"
echo "clang-tidy path: $(which clang-tidy)"
echo "clang-tidy version: $(clang-tidy -version)"
echo "flake8 path: $(which flake8)"
echo "flake8 version: $(flake8 --version)"
Loading
Loading