devbuild #1572
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
name: devbuild | |
on: | |
push: | |
pull_request: | |
schedule: | |
- cron: '34 17 * * *' | |
jobs: | |
standalone_buffer: | |
if: ${{ github.event_name != 'schedule' || (github.event_name == 'schedule' && vars.MMGH_NIGHTLY == 'enable') }} | |
name: standalone_buffer_${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-22.04] | |
cmake_build_type: [Release] | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
fetch-depth: 1 | |
- name: event name | |
run: | | |
echo "github.event_name: ${{ github.event_name }}" | |
- name: dependency by apt | |
run: | | |
sudo apt-get -qqy update | |
sudo apt-get -qy install \ | |
sudo curl git build-essential make cmake libc6-dev gcc g++ \ | |
python3 python3-dev python3-venv | |
- name: dependency by pip | |
run: | | |
sudo pip3 install setuptools | |
sudo pip3 install numpy pytest flake8 | |
- name: dependency by manual script | |
run: sudo ${GITHUB_WORKSPACE}/contrib/dependency/install.sh pybind11 | |
- name: show dependency | |
# 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)" | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2 | |
with: | |
key: ${{ runner.os }}-standalone-buffer-${{ matrix.cmake_build_type }} | |
restore-keys: ${{ runner.os }}-standalone-buffer-${{ matrix.cmake_build_type }} | |
create-symlink: true | |
- name: make standalone_buffer | |
run: | | |
make standalone_buffer_setup | |
make standalone_buffer | |
build_ubuntu: | |
if: ${{ github.event_name != 'schedule' || (github.event_name == 'schedule' && vars.MMGH_NIGHTLY == 'enable') }} | |
name: build_${{ matrix.os }}_${{ matrix.cmake_build_type }} | |
runs-on: ${{ matrix.os }} | |
env: | |
QT_DEBUG_PLUGINS: 1 | |
QT_QPA_PLATFORM: offscreen | |
# Fix issue: https://github.com/solvcon/modmesh/issues/366 | |
# Use custom config for jurplel/install-qt-action@v4 | |
AQT_CONFIG: "thirdparty/aqt_settings.ini" | |
strategy: | |
matrix: | |
# ubuntu-20.04 does not have built-in qt6 | |
os: [ubuntu-22.04] | |
cmake_build_type: [Release] | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
fetch-depth: 1 | |
- name: event name | |
run: | | |
echo "github.event_name: ${{ github.event_name }}" | |
- name: dependency by apt | |
run: | | |
sudo apt-get -qqy update | |
sudo apt-get -qy install \ | |
sudo curl git build-essential make cmake libc6-dev gcc g++ \ | |
python3 python3-dev python3-venv | |
# Install qt6 only with ubuntu-22.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-22.04" ] ; then \ | |
# sudo apt-get -qy install \ | |
# qt6-3d-dev xvfb \ | |
# libgl1-mesa-dev | |
# fi | |
- name: install qt | |
uses: jurplel/install-qt-action@v4 | |
with: | |
aqtversion: '==3.1.*' | |
version: '6.6.3' | |
host: 'linux' | |
target: 'desktop' | |
arch: 'gcc_64' | |
modules: 'qt3d' | |
setup-python: 'false' | |
cache: true | |
- name: dependency by pip | |
run: | | |
sudo pip3 install setuptools | |
sudo pip3 install numpy pytest flake8 jsonschema | |
sudo pip3 install pyside6==$(qmake6 -query QT_VERSION) | |
- name: dependency by manual script | |
run: sudo ${GITHUB_WORKSPACE}/contrib/dependency/install.sh pybind11 | |
- name: show dependency | |
# 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)" | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2 | |
with: | |
key: ${{ runner.os }}-${{ matrix.cmake_build_type }} | |
restore-keys: ${{ runner.os }}-${{ matrix.cmake_build_type }} | |
create-symlink: true | |
- name: make gtest BUILD_QT=OFF | |
run: | | |
make gtest \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=OFF | |
- name: make buildext BUILD_QT=OFF | |
run: | | |
rm -f build/*/Makefile | |
make cmake \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=OFF \ | |
CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \ | |
CMAKE_ARGS="-DPYTHON_EXECUTABLE=$(which python3) -DUSE_PYTEST_HELPER_BINDING=ON" | |
make buildext VERBOSE=1 | |
- name: make pytest BUILD_QT=OFF | |
run: | | |
python3 -c "import modmesh; assert modmesh.HAS_VIEW == False" | |
make pytest VERBOSE=1 | |
- name: make buildext BUILD_QT=ON USE_PYTEST_HELPER_BINDING=OFF | |
run: | | |
rm -f build/*/Makefile | |
make cmake \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=ON \ | |
CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \ | |
CMAKE_ARGS="-DPYTHON_EXECUTABLE=$(which python3)" | |
make buildext VERBOSE=1 | |
# build with pytest helper binding for testing | |
- name: make buildext BUILD_QT=ON USE_PYTEST_HELPER_BINDING=ON | |
run: | | |
rm -f build/*/Makefile | |
make cmake \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=ON \ | |
CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \ | |
CMAKE_ARGS="-DPYTHON_EXECUTABLE=$(which python3) -DUSE_PYTEST_HELPER_BINDING=ON" | |
make buildext VERBOSE=1 | |
- name: make pytest BUILD_QT=ON USE_PYTEST_HELPER_BINDING=ON | |
run: | | |
python3 -c "import modmesh; assert modmesh.HAS_VIEW == True" | |
make pytest VERBOSE=1 | |
- name: make viewer | |
run: | | |
rm -f build/*/Makefile | |
make viewer \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=ON \ | |
CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \ | |
CMAKE_ARGS="-DPYTHON_EXECUTABLE=$(which python3) -DUSE_PYTEST_HELPER_BINDING=ON" | |
- name: make run_viewer_pytest | |
run: | | |
export LD_LIBRARY_PATH=$(python3 -c "import sys, os, shiboken6; sys.stdout.write(os.path.dirname(shiboken6.__file__))") | |
make run_viewer_pytest VERBOSE=0 | |
# FIXME: turn off until all issues resolved | |
- name: make cmake USE_SANITIZER=ON & make pytest | |
run: | | |
export ASAN_OPTIONS=verify_asan_link_order=0 | |
rm -f build/*/Makefile | |
make cmake \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=OFF \ | |
CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \ | |
CMAKE_ARGS="-DPYTHON_EXECUTABLE=$(which python3) -DUSE_SANITIZER=OFF -DUSE_PYTEST_HELPER_BINDING=ON" | |
make buildext VERBOSE=1 | |
make pytest VERBOSE=1 | |
build_macos: | |
if: ${{ github.event_name != 'schedule' || (github.event_name == 'schedule' && vars.MMGH_NIGHTLY == 'enable') }} | |
name: build_${{ matrix.os }}_${{ matrix.cmake_build_type }} | |
runs-on: ${{ matrix.os }} | |
env: | |
QT_DEBUG_PLUGINS: 1 | |
PIP_BREAK_SYSTEM_PACKAGES: 1 # disabling PEP668 | |
# Fix issue: https://github.com/solvcon/modmesh/issues/366 | |
# Use custom config for jurplel/install-qt-action@v4 | |
AQT_CONFIG: "thirdparty/aqt_settings.ini" | |
strategy: | |
matrix: | |
# https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md | |
# https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md | |
os: [macos-13, macos-14] | |
cmake_build_type: [Release] | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
fetch-depth: 1 | |
- name: event name | |
run: | | |
echo "github.event_name: ${{ github.event_name }}" | |
# Some mac runner does not have /usr/local/include and cmake sometimes crashes | |
sudo mkdir -p /usr/local/include | |
- name: dependency by homebrew | |
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 qt6 | |
- name: install qt | |
uses: jurplel/install-qt-action@v4 | |
with: | |
aqtversion: '==3.1.*' | |
version: '6.6.3' | |
host: 'mac' | |
target: 'desktop' | |
arch: 'clang_64' | |
modules: 'qt3d' | |
setup-python: 'false' | |
cache: true | |
- name: dependency by pip | |
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 | |
python3 -m pip -v install --upgrade pip | |
python3 -m pip -v install --upgrade numpy 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 by manual script | |
run: | | |
sudo NO_INSTALL_PREFIX=1 ${GITHUB_WORKSPACE}/contrib/dependency/install.sh pybind11 | |
thirdparty/metal-cpp.sh | |
- name: show dependency | |
# 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)" | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2 | |
with: | |
key: ${{ runner.os }}-${{ matrix.cmake_build_type }} | |
restore-keys: ${{ runner.os }}-${{ matrix.cmake_build_type }} | |
create-symlink: true | |
- name: make gtest BUILD_QT=OFF | |
run: | | |
make gtest \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=OFF | |
- name: make buildext BUILD_QT=OFF | |
run: | | |
rm -f build/*/Makefile | |
make cmake \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=OFF \ | |
CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \ | |
CMAKE_ARGS="-DPYTHON_EXECUTABLE=$(which python3) -DUSE_PYTEST_HELPER_BINDING=ON" | |
make buildext VERBOSE=1 | |
- name: make pytest BUILD_QT=OFF | |
run: | | |
JOB_MAKE_ARGS="VERBOSE=1" | |
if [ "${{ matrix.os }}" == "macos-13" ] || [ "${{ matrix.os }}" == "macos-14" ] ; then \ | |
JOB_MAKE_ARGS="${JOB_MAKE_ARGS} BUILD_METAL=ON" ; \ | |
fi | |
make pytest ${JOB_MAKE_ARGS} | |
- name: make buildext BUILD_QT=ON USE_PYTEST_HELPER_BINDING=OFF | |
run: | | |
rm -f build/*/Makefile | |
make cmake \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=ON \ | |
CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \ | |
CMAKE_ARGS="-DPYTHON_EXECUTABLE=$(which python3)" | |
make buildext VERBOSE=1 | |
# build with pytest helper binding for testing | |
- name: make buildext BUILD_QT=ON USE_PYTEST_HELPER_BINDING=ON | |
run: | | |
rm -f build/*/Makefile | |
make cmake \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=ON \ | |
CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \ | |
CMAKE_ARGS="-DPYTHON_EXECUTABLE=$(which python3) -DUSE_PYTEST_HELPER_BINDING=ON" | |
make buildext VERBOSE=1 | |
- name: make pytest BUILD_QT=ON USE_PYTEST_HELPER_BINDING=ON | |
run: | | |
# PySide6 installed by pip will bundle with a prebuilt Qt, | |
# this will cause duplicated symbol. | |
# Solve this issue by removed PySide6 prebuilt Qt library | |
PYSIDE6_PATH=$(python3 -c "import sys, os, PySide6; sys.stdout.write(os.path.dirname(PySide6.__file__))") | |
echo "pyside6 path: ${PYSIDE6_PATH}" | |
rm -rf ${PYSIDE6_PATH}/Qt/lib/*.framework | |
# maunally add homebrew's Qt rpath to PySide6 | |
install_name_tool -add_rpath $(qtpaths --install-prefix)/lib ${PYSIDE6_PATH}/QtWidgets.abi3.so | |
install_name_tool -add_rpath $(qtpaths --install-prefix)/lib ${PYSIDE6_PATH}/QtGui.abi3.so | |
install_name_tool -add_rpath $(qtpaths --install-prefix)/lib ${PYSIDE6_PATH}/QtCore.abi3.so | |
JOB_MAKE_ARGS="VERBOSE=1" | |
if [ "${{ matrix.os }}" == "macos-13" ] || [ "${{ matrix.os }}" == "macos-14" ] ; then \ | |
JOB_MAKE_ARGS="${JOB_MAKE_ARGS} BUILD_METAL=ON" ; \ | |
fi | |
make pytest ${JOB_MAKE_ARGS} | |
- name: make viewer | |
run: | | |
rm -f build/*/Makefile | |
make viewer \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=ON \ | |
CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \ | |
CMAKE_ARGS="-DPYTHON_EXECUTABLE=$(which python3) -DUSE_PYTEST_HELPER_BINDING=ON" | |
- name: make run_viewer_pytest | |
run: | | |
make run_viewer_pytest VERBOSE=1 | |
# FIXME: turn off until all issues resolved | |
- name: make cmake USE_SANITIZER=ON & make pytest | |
run: | | |
export ASAN_OPTIONS=verify_asan_link_order=0 | |
rm -f build/*/Makefile | |
make cmake \ | |
VERBOSE=1 USE_CLANG_TIDY=OFF \ | |
BUILD_QT=OFF \ | |
CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \ | |
CMAKE_ARGS="-DPYTHON_EXECUTABLE=$(which python3) -DUSE_SANITIZER=OFF -DUSE_PYTEST_HELPER_BINDING=ON" | |
make buildext VERBOSE=1 | |
make pytest VERBOSE=1 | |
build_windows: | |
if: ${{ github.event_name != 'schedule' || (github.event_name == 'schedule' && vars.MMGH_NIGHTLY == 'enable') }} | |
name: build_${{ matrix.os }}_${{ matrix.cmake_build_type }} | |
runs-on: ${{ matrix.os }} | |
env: | |
QT_DEBUG_PLUGINS: 1 | |
# Fix issue: https://github.com/solvcon/modmesh/issues/366 | |
# Use custom config for jurplel/install-qt-action@v4 | |
AQT_CONFIG: "thirdparty/aqt_settings.ini" | |
strategy: | |
matrix: | |
os: [windows-2022] | |
# Build Debug because there is not a job for windows in lint.yml (which uses the Debug build type) | |
cmake_build_type: [Release, Debug] | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
- uses: ilammy/msvc-dev-cmd@v1 | |
- name: event name | |
run: | | |
echo "github.event_name: ${{ github.event_name }}" | |
- name: install qt | |
uses: jurplel/install-qt-action@v4 | |
with: | |
aqtversion: '==3.1.*' | |
version: '6.6.3' | |
host: 'windows' | |
target: 'desktop' | |
arch: 'win64_msvc2019_64' | |
modules: 'qt3d' | |
cache: true | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: dependency by pip | |
run: | | |
pip3 install -U numpy pytest jsonschema flake8 pybind11 pyside6==$(qmake -query QT_VERSION) | |
# Add PySide6 and Shiboken6 path into system path, that allow exe file can find | |
# dll during runtime | |
# If user needs to modified system path in github actions container | |
# user should use GITHUB_PATH | |
# ref: https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-system-path | |
# But the way of update GITHUB_PATH in github action document does not work, there is a other way to update it. | |
# ref: https://stackoverflow.com/questions/60169752/how-to-update-the-path-in-a-github-action-workflow-file-for-a-windows-latest-hos | |
$pyside6_path = $(python3 -c "import sys, os, PySide6; sys.stdout.write(os.path.dirname(PySide6.__file__))") | |
$shiboken6_path = $(python3 -c "import sys, os, shiboken6; sys.stdout.write(os.path.dirname(shiboken6.__file__))") | |
echo "$pyside6_path;$shiboken6_path" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
- name: show dependency | |
run: | | |
Get-Command cl | |
Get-Command cmake | |
Get-Command python3 | |
Get-Command pip3 | |
python3 -c 'import numpy as np; print("np.__version__:", np.__version__, np.get_include())' | |
python3 -c "import pybind11 ; print('pybind11.__version__:', pybind11.__version__)" | |
pybind11-config --cmakedir | |
Get-Command pytest | |
Get-Command clang-tidy | |
Get-Command flake8 | |
- name: cmake ALL_BUILD USE_PYTEST_HELPER_BINDING=OFF | |
run: | | |
cmake ` | |
-DCMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} ` | |
-Dpybind11_DIR="$(pybind11-config --cmakedir)" ` | |
-S${{ github.workspace }} ` | |
-B${{ github.workspace }}/build | |
cmake --build ${{ github.workspace }}/build ` | |
--config ${{ matrix.cmake_build_type }} ` | |
--target ALL_BUILD | |
- name: cmake ALL_BUILD USE_PYTEST_HELPER_BINDING=ON | |
run: | | |
Remove-Item -Path ${{ github.workspace }}/build -Recurse -Force | |
cmake ` | |
-DCMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} ` | |
-Dpybind11_DIR="$(pybind11-config --cmakedir)" ` | |
-DUSE_PYTEST_HELPER_BINDING=ON ` | |
-S${{ github.workspace }} ` | |
-B${{ github.workspace }}/build | |
cmake --build ${{ github.workspace }}/build ` | |
--config ${{ matrix.cmake_build_type }} ` | |
--target ALL_BUILD | |
- name: cmake run_gtest | |
run: | | |
cmake --build ${{ github.workspace }}/build ` | |
--config ${{ matrix.cmake_build_type }} ` | |
--target run_gtest | |
- name: cmake run_viewer_pytest | |
run: | | |
cmake --build ${{ github.workspace }}/build ` | |
--config ${{ matrix.cmake_build_type }} ` | |
--target run_viewer_pytest | |
- name: generate portable | |
if: ${{ matrix.cmake_build_type == 'Release' }} | |
run: | | |
# Get the Python version installed and extract the major+minor version components | |
$py_ver=$(python3 -V | awk '{print $2}') | |
$py_main_ver=$(echo $py_ver | awk -F. '{print $1$2}') | |
$destination=".\modmesh-viewer-win64\modmesh-viewer-win64" | |
$py_exec="$destination\python.exe" | |
# Create the destination directory | |
New-Item -ItemType Directory -Path $destination | |
# Download and extract the Python embeddable package | |
$pyembed_url="https://www.python.org/ftp/python/$py_ver/python-$py_ver-embed-amd64.zip" | |
$pyembed_dl="python-$py_ver-embed-amd64.zip" | |
Invoke-WebRequest -Uri $pyembed_url -OutFile $pyembed_dl | |
Expand-Archive -Path $pyembed_dl -DestinationPath $destination | |
# Patch the .pth file to enable 'site' package (required for using pip) | |
$pth_file="$destination\python$py_main_ver._pth" | |
(Get-Content $pth_file) -replace '#import site', 'import site' | Set-Content $pth_file | |
# Download and setup pip installation script | |
$get_pip_url="https://bootstrap.pypa.io/get-pip.py" | |
$get_pip_script="$destination\get-pip.py" | |
Invoke-WebRequest -Uri $get_pip_url -OutFile $get_pip_script | |
& $py_exec $get_pip_script | |
# Install necessary packages for the viewer | |
$qt_ver=$(qmake -query QT_VERSION) | |
& $py_exec -m pip install numpy matplotlib PySide6==$qt_ver shiboken6-generator==$qt_ver | |
# Copy pyside6 and shiboken6 DLLs alongside the viewer executable | |
$pyside6_path=$(& $py_exec -c "import sys, os, PySide6; sys.stdout.write(os.path.dirname(PySide6.__file__))") | |
$shiboken6_path=$(& $py_exec -c "import sys, os, shiboken6; sys.stdout.write(os.path.dirname(shiboken6.__file__))") | |
copy "$pyside6_path\pyside6.abi3.dll" $destination | |
copy "$shiboken6_path\shiboken6.abi3.dll" $destination | |
# Remove redundant Qt DLLs from PySide6 | |
Remove-Item -Path $pyside6_path\Qt*.dll | |
# Configure and build the viewer | |
cmake -Dpybind11_DIR="$(pybind11-config --cmakedir)" -S . -B build | |
cmake --build build --config Release --target viewer | |
# Deploy the Qt environment for the viewer executable and copy necessary files | |
Copy-Item -Path ".\build\cpp\binary\viewer\Release\viewer.exe" -Destination $destination | |
windeployqt --release "$destination\viewer.exe" | |
Copy-Item -Path ".\modmesh" -Destination $destination -Recurse | |
# PUI is necessary | |
Copy-Item -Path ".\thirdparty" -Destination $destination -Recurse | |
- name: archive portable artifacts | |
if: ${{ matrix.cmake_build_type == 'Release' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: modmesh-viewer-win64 | |
path: modmesh-viewer-win64/ |