Skip to content

Fix version to v0.9.0 #342

Fix version to v0.9.0

Fix version to v0.9.0 #342

Workflow file for this run

name: 'Tests'
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
permissions:
contents: read
jobs:
linux:
runs-on: ubuntu-24.04
name: linux (pytest)
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Determine monero submodule version
run: git submodule status --recursive > .monero-submodule-version
- name: Cache monero/monero-cpp build
id: cache-monero
uses: actions/cache@v4
with:
path: |
external/monero-cpp/external/monero-project/build
external/monero-cpp/build
key: monero-build-linux-${{ hashFiles('.monero-submodule-version') }}
restore-keys: |
monero-build-linux-
- name: Install dependencies
run: |
sudo apt update
sudo apt install -y build-essential cmake pkg-config libssl-dev libzmq3-dev libunbound-dev libsodium-dev libunwind8-dev liblzma-dev libreadline6-dev libexpat1-dev libpgm-dev qttools5-dev-tools libhidapi-dev libusb-1.0-0-dev libprotobuf-dev protobuf-compiler libudev-dev libboost-chrono-dev libboost-date-time-dev libboost-filesystem-dev libboost-locale-dev libboost-program-options-dev libboost-regex-dev libboost-serialization-dev libboost-system-dev libboost-thread-dev python3 ccache doxygen graphviz git curl autoconf libtool gperf nettle-dev libevent-dev debhelper python3-all python3-pip python3-pybind11 python3-pytest python3-pytest-rerunfailures python3-pytest-cov lcov python3-scikit-build-core
pip3 install pybind11-stubgen pytest pyproject-metadata --break-system-packages
- name: Install expat
run: |
wget https://github.com/libexpat/libexpat/releases/download/R_2_7_1/expat-2.7.1.tar.bz2
echo "45c98ae1e9b5127325d25186cf8c511fa814078e9efeae7987a574b482b79b3d expat-2.7.1.tar.bz2" | sha256sum -c
tar -xf expat-2.7.1.tar.bz2
cd expat-2.7.1
./configure --enable-static --disable-shared --with-pic
make
sudo make install
cd ../
- name: Install unbound
run: |
wget https://www.nlnetlabs.nl/downloads/unbound/unbound-1.22.0.tar.gz
echo "c5dd1bdef5d5685b2cedb749158dd152c52d44f65529a34ac15cd88d4b1b3d43 unbound-1.22.0.tar.gz" | sha256sum -c
tar xzf unbound-1.22.0.tar.gz
cd unbound-1.22.0
./configure --with-libexpat=/usr/local --with-ssl=/usr --enable-static --disable-shared --with-pic
make
sudo make install
cd ../
- name: Build monero
if: steps.cache-monero.outputs.cache-hit != 'true'
run: |
cd external/monero-cpp/external/monero-project
mkdir -p build/release
cd build/release
cmake -DSTATIC=ON -DBUILD_64=ON -DCMAKE_BUILD_TYPE=Release ../../
make -j3 wallet cryptonote_protocol
cd ../../../../../../
- name: Build monero-cpp
if: steps.cache-monero.outputs.cache-hit != 'true'
run: |
cd external/monero-cpp
mkdir -p build
cd build
cmake .. -DENABLE_COVERAGE=ON
cmake --build .
make -j3
cd ../../../
- name: Install monero-python
run: |
mkdir -p build
cmake -B build -DENABLE_COVERAGE=ON
cmake --build build
cp build/monero.cpython-312-x86_64-linux-gnu.so ~/.local/lib/python3.12/site-packages/
- name: Setup test environment
run: |
docker compose -f tests/docker-compose.yml up -d node_1 node_2 xmr_wallet_1 xmr_wallet_2 xmr_wallet_3
sleep 10
- name: Reset coverage counters
run: |
lcov --directory . --zerocounters
- name: Run unit & integration tests
env:
IN_CONTAINER: "true"
run: |
pytest --cov=tests --cov-report=xml
- name: Dump container logs
if: always()
run: |
mkdir -p container-logs
for svc in node_1 node_2 xmr_wallet_1 xmr_wallet_2 xmr_wallet_3; do
docker compose -f tests/docker-compose.yml logs --no-color --timestamps "$svc" > "container-logs/$svc.log" 2>&1 || true
done
- name: Upload container logs
if: always()
uses: actions/upload-artifact@v4
with:
name: container-logs-linux
path: container-logs/
- name: Cleanup test environment
if: always()
run: docker compose -f tests/docker-compose.yml down -v
- name: Upload tests logs
if: always()
uses: actions/upload-artifact@v4
with:
name: test-logs
path: monero_tests_*.log
- name: Generate coverage report
if: always()
run: |
lcov --capture --directory build --ignore-errors mismatch,mismatch,inconsistent,source,source,gcov,gcov --output-file coverage_full.info
lcov --ignore-errors unused,unused --remove coverage_full.info '/usr/*' '*/external/*' '*/pybind11/*' '*monero-cpp/*' '*monero-project/*' --output-file coverage.info
sed -i "s|$(pwd)/||g" coverage.info
lcov --summary coverage.info
- name: Generate monero-cpp coverage report
if: always()
run: |
lcov --capture --directory external/monero-cpp/build --ignore-errors mismatch,mismatch,inconsistent,source,source,gcov,gcov --output-file coverage_monero_cpp_full.info
lcov --ignore-errors unused,unused --extract coverage_monero_cpp_full.info '*/monero-cpp/src/*' --output-file coverage_monero_cpp.info
sed -i "s|$(pwd)/||g" coverage_monero_cpp.info
genhtml coverage_monero_cpp.info --output-directory coverage_monero_cpp_html --ignore-errors mismatch,inconsistent,source,corrupt --title "monero-cpp coverage @ ${GITHUB_SHA::7}"
lcov --summary coverage_monero_cpp.info
- name: Upload coverage report
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-reports-linux
path: |
coverage.info
coverage.xml
coverage_monero_cpp.info
coverage_monero_cpp_html/
windows:
name: windows (pytest)
runs-on: windows-latest
defaults:
run:
shell: msys2 {0}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Determine monero submodule version
shell: bash
run: git submodule status --recursive > .monero-submodule-version
- name: Cache monero/monero-cpp build
id: cache-monero
uses: actions/cache@v4
with:
path: |
external/monero-cpp/external/monero-project/build
external/monero-cpp/build
key: monero-build-windows-${{ hashFiles('.monero-submodule-version') }}
restore-keys: |
monero-build-windows-
- name: Setup Python 3.13
uses: actions/setup-python@v5
with:
python-version: '3.13'
architecture: 'x64'
- name: Install pytest and dependencies
shell: bash
run: |
python -m pip install pytest pytest-rerunfailures typing_extensions scikit-build-core
- name: Setup MSYS2 MINGW64
uses: msys2/setup-msys2@66cd2cce69caa17b53920067426061ca1de3a884 # v2.32.0
with:
msystem: MINGW64
update: true
install: >-
mingw-w64-x86_64-toolchain
mingw-w64-x86_64-cmake
mingw-w64-x86_64-openssl
mingw-w64-x86_64-zeromq
mingw-w64-x86_64-libsodium
mingw-w64-x86_64-hidapi
mingw-w64-x86_64-unbound
mingw-w64-x86_64-protobuf
mingw-w64-x86_64-libusb
mingw-w64-x86_64-ntldd
git
make
gettext
base-devel
wget
- name: Install ICU v75.1
run: |
wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-icu-75.1-2-any.pkg.tar.zst
echo "bf57882d43efcdfd746463613ea982c69b64aa4ba9bed4cb24c02a81ad06c3a9 mingw-w64-x86_64-icu-75.1-2-any.pkg.tar.zst" | sha256sum -c
pacman -U --noconfirm mingw-w64-x86_64-icu-75.1-2-any.pkg.tar.zst
- name: Install boost v1.87.0
run: |
wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-boost-1.87.0-3-any.pkg.tar.zst
echo "241919a5885a9270d0e0937e71cf5e146c2a8cabecc2714f09248350181cb1b6 mingw-w64-x86_64-boost-1.87.0-3-any.pkg.tar.zst" | sha256sum -c
pacman -U --noconfirm mingw-w64-x86_64-boost-1.87.0-3-any.pkg.tar.zst
- name: Install pybind11 v2.13.6
run: |
wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-pybind11-2.13.6-2-any.pkg.tar.zst
echo "5b56ad87bc544336b2d51edb8bb0614f46542571362daf4d7e53bf23120175a1 mingw-w64-x86_64-pybind11-2.13.6-2-any.pkg.tar.zst" | sha256sum -c
pacman -U --noconfirm mingw-w64-x86_64-pybind11-2.13.6-2-any.pkg.tar.zst
- name: Build monero
if: steps.cache-monero.outputs.cache-hit != 'true'
run: |
cd external/monero-cpp/external/monero-project
mkdir -p build/release
cd build/release
cmake -G "MSYS Makefiles" \
-D STATIC=ON \
-D ARCH="x86-64" \
-D BUILD_64=ON \
-D CMAKE_BUILD_TYPE=Release \
-D BUILD_TAG="win-x64" \
-D CMAKE_TOOLCHAIN_FILE="../../cmake/64-bit-toolchain.cmake" \
-D MSYS2_FOLDER=$(cd $MINGW_PREFIX/.. && pwd -W) \
../../
make wallet cryptonote_protocol
- name: Build monero-cpp
if: steps.cache-monero.outputs.cache-hit != 'true'
run: |
cd external/monero-cpp
mkdir -p build
cd build
cmake ..
cmake --build .
- name: Build monero-python
run: |
mkdir -p build
cd build
export WIN_PYTHON_EXE=$(cygpath -u "$pythonLocation/python.exe")
cmake .. -DPython3_EXECUTABLE="$WIN_PYTHON_EXE" \
-DPython3_FIND_STRATEGY=LOCATION \
-DPython3_FIND_REGISTRY=NEVER
cmake --build .
mkdir -p ../dist
cp *.pyd ../dist/monero.pyd
cd ../dist
ntldd -R *.pyd | grep mingw64 | awk '{print $3}' | while read -r line; do
cp "$(cygpath -u "$line")" .
done
cd ..
- name: Run unit tests
shell: bash
env:
IN_CONTAINER: "true"
PYTHONPATH: ${{ github.workspace }}/dist
PATH: "${{ github.workspace }}/dist:/usr/bin:$PATH"
run: |
python -m pytest -m unit
macos:
name: ${{ matrix.os }} (pytest)
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-14, macos-15, macos-15-intel]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Determine monero submodule version
run: git submodule status --recursive > .monero-submodule-version
- name: Cache monero/monero-cpp build
id: cache-monero
uses: actions/cache@v4
with:
path: |
external/monero-cpp/external/monero-project/build
external/monero-cpp/build
key: monero-build-macos-${{ matrix.os }}-${{ hashFiles('.monero-submodule-version') }}
restore-keys: |
monero-build-macos-${{ matrix.os }}-
- name: Install dependencies
run: |
HOMEBREW_NO_AUTO_UPDATE=1 brew install python boost@1.85 hidapi openssl zmq libpgm miniupnpc expat libunwind-headers protobuf unbound
brew unlink boost || true
brew link boost@1.85 --force
pip3 install pytest pytest-rerunfailures pytest-cov setuptools wheel scikit-build-core --break-system-packages
- name: Install pybind11 v2.13.6
run: |
pip3 install pybind11==2.13.6 pybind11-stubgen --break-system-packages
- name: Build monero
if: steps.cache-monero.outputs.cache-hit != 'true'
run: |
cd external/monero-cpp/external/monero-project
mkdir -p build/release
cd build/release
cmake -DSTATIC=ON -DBUILD_64=ON -DCMAKE_BUILD_TYPE=Release ../../
make -j3 wallet cryptonote_protocol
cd ../../../../../../
- name: Build monero-cpp
if: steps.cache-monero.outputs.cache-hit != 'true'
run: |
cd external/monero-cpp
mkdir -p build
cd build
cmake ..
cmake --build .
make -j3
cd ../../../
- name: Install monero-python
run: |
mkdir -p build
pip3 install --no-build-isolation -vvv . --break-system-packages
- name: Run unit tests
run: |
pytest -m unit