name: full compatibility check on: [push] permissions: issues: write pull-requests: write jobs: lib_mingw: strategy: fail-fast: false matrix: coin: [monero, wownero] runs-on: ubuntu-latest container: image: ubuntu:24.04 steps: - name: Install dependencies run: | apt update apt install -y pigz build-essential pkg-config autoconf libtool ccache make cmake gcc g++ git curl lbzip2 gperf gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 gcc-mingw-w64-i686 g++-mingw-w64-i686 - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive - name: Patch sources run: | git config --global --add safe.directory '*' git config --global user.email "ci@mrcyjanek.net" git config --global user.name "CI mrcyjanek.net" ./apply_patches.sh ${{ matrix.coin }} - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: ${{ github.job }}-${{ matrix.coin }} - name: Cache built if: ${{ !startsWith(github.ref, 'refs/tags/v') }} uses: actions/cache@v4 with: path: | contrib/depends/built/* key: depends-${{ github.job }}-${{ hashFiles('contrib/depends/packages/*.mk') }} - name: ${{ matrix.coin }}/x86_64-w64-mingw32 run: ./build_single.sh ${{ matrix.coin }} x86_64-w64-mingw32 -j$(nproc) - name: ${{ matrix.coin }}/i686-w64-mingw32 run: ./build_single.sh ${{ matrix.coin }} i686-w64-mingw32 -j$(nproc) - name: rename artifacts run: | mkdir release/gh/ for i in release/${{ matrix.coin }}/* do cp "$i" "release/gh/${{ matrix.coin }}_$(basename $i)" done - name: Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: files: release/gh/* token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} - name: Upload lib uses: actions/upload-artifact@v4 with: name: mingw ${{ matrix.coin }} path: release/${{ matrix.coin }} lib_android: strategy: fail-fast: false matrix: coin: [monero, wownero] runs-on: ubuntu-24.04 # container: # image: debian:bookworm steps: - name: Free Disk Space if: ${{ !startsWith(github.ref, 'refs/tags/v') }} uses: jlumbroso/free-disk-space@main with: tool-cache: false android: true dotnet: true haskell: true large-packages: true docker-images: true swap-storage: true - name: Install dependencies run: | sudo apt update sudo apt install -y llvm pigz build-essential pkg-config autoconf libtool ccache make cmake gcc g++ git curl lbzip2 libtinfo6 gperf unzip python-is-python3 - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive - name: Patch sources run: | git config --global --add safe.directory '*' git config --global user.email "ci@mrcyjanek.net" git config --global user.name "CI mrcyjanek.net" ./apply_patches.sh ${{ matrix.coin }} - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: ${{ github.job }}-${{ matrix.coin }} - name: Cache built if: ${{ !startsWith(github.ref, 'refs/tags/v') }} uses: actions/cache@v4 with: path: | contrib/depends/built/* key: depends-${{ github.job }}-${{ hashFiles('contrib/depends/packages/*.mk') }} - name: ${{ matrix.coin }}/x86_64-linux-android run: ./build_single.sh ${{ matrix.coin }} x86_64-linux-android -j$(nproc) - name: ${{ matrix.coin }}/aarch64-linux-android run: ./build_single.sh ${{ matrix.coin }} aarch64-linux-android -j$(nproc) - name: ${{ matrix.coin }}/armv7a-linux-androideabi run: ./build_single.sh ${{ matrix.coin }} armv7a-linux-androideabi -j$(nproc) - name: rename artifacts run: | mkdir release/gh/ for i in release/${{ matrix.coin }}/* do cp "$i" "release/gh/${{ matrix.coin }}_$(basename $i)" done - name: Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: files: release/gh/* token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} - name: Upload lib uses: actions/upload-artifact@v4 with: name: android ${{ matrix.coin }} path: release/${{ matrix.coin }} - name: remove android_ndk run: | rm -rf contrib/depends/built/*/android_ndk rm -rf contrib/depends/sources/android-ndk-r26d-linux.zip lib_linux: strategy: fail-fast: false matrix: coin: [monero, wownero] runs-on: ubuntu-latest container: image: debian:bullseye steps: - name: Install dependencies run: | apt update apt install -y pigz build-essential pkg-config autoconf libtool ccache make cmake gcc g++ git curl lbzip2 libtinfo5 gperf gcc-aarch64-linux-gnu g++-aarch64-linux-gnu gcc-i686-linux-gnu g++-i686-linux-gnu - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive - name: Patch sources run: | git config --global --add safe.directory '*' git config --global user.email "ci@mrcyjanek.net" git config --global user.name "CI mrcyjanek.net" ./apply_patches.sh ${{ matrix.coin }} - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: ${{ github.job }}-${{ matrix.coin }} - name: Cache built if: ${{ !startsWith(github.ref, 'refs/tags/v') }} uses: actions/cache@v4 with: path: | contrib/depends/built/* key: depends-${{ github.job }}-${{ hashFiles('contrib/depends/packages/*.mk') }} - name: ${{ matrix.coin }}/x86_64-linux-gnu run: ./build_single.sh ${{ matrix.coin }} x86_64-linux-gnu -j$(nproc) - name: ${{ matrix.coin }}/aarch64-linux-gnu run: ./build_single.sh ${{ matrix.coin }} aarch64-linux-gnu -j$(nproc) - name: ${{ matrix.coin }}/i686-linux-gnu run: ./build_single.sh ${{ matrix.coin }} i686-linux-gnu -j$(nproc) - name: rename artifacts run: | mkdir release/gh/ for i in release/${{ matrix.coin }}/* do cp "$i" "release/gh/${{ matrix.coin }}_$(basename $i)" done - name: Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: files: release/gh/* token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} - name: Upload lib uses: actions/upload-artifact@v4 with: name: linux ${{ matrix.coin }} path: release/${{ matrix.coin }} lib_macos: strategy: fail-fast: false matrix: coin: [monero, wownero] name: macos build runs-on: macos-14 steps: - name: Checkout monero_c repo uses: actions/checkout@v4 with: repository: MrCyjaneK/monero_c fetch-depth: 0 submodules: recursive - uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: '15.4' - name: install dependencies run: | brew install ccache binutils pigz autoconf automake libtool - name: Patch sources run: | git config --global --add safe.directory '*' git config --global user.email "ci@mrcyjanek.net" git config --global user.name "CI mrcyjanek.net" ./apply_patches.sh ${{ matrix.coin }} - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: ${{ github.job }}-${{ matrix.coin }} - name: Cache built if: ${{ !startsWith(github.ref, 'refs/tags/v') }} uses: actions/cache@v4 with: path: | contrib/depends/built/* key: depends-${{ github.job }}-${{ hashFiles('contrib/depends/packages/*.mk') }} - name: build (aarch64-apple-darwin) run: | ./build_single.sh ${{ matrix.coin }} aarch64-apple-darwin -j$(sysctl -n hw.logicalcpu) - name: build (x86_64-apple-darwin) run: | ./build_single.sh ${{ matrix.coin }} x86_64-apple-darwin -j$(sysctl -n hw.logicalcpu) - name: rename artifacts run: | mkdir release/gh/ for i in release/${{ matrix.coin }}/* do cp "$i" "release/gh/${{ matrix.coin }}_$(basename $i)" done - name: Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: files: release/gh/* token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} - name: Upload lib uses: actions/upload-artifact@v4 with: name: macos ${{ matrix.coin }} path: release/${{ matrix.coin }} lib_ios: strategy: fail-fast: false matrix: coin: [monero, wownero] name: ios build runs-on: macos-14 steps: - name: Checkout monero_c repo uses: actions/checkout@v4 with: repository: MrCyjaneK/monero_c fetch-depth: 0 submodules: recursive - uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: '15.4' - name: install dependencies run: | brew install ccache unbound zmq autoconf automake libtool - name: Patch sources run: | git config --global --add safe.directory '*' git config --global user.email "ci@mrcyjanek.net" git config --global user.name "CI mrcyjanek.net" ./apply_patches.sh ${{ matrix.coin }} - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: ${{ github.job }}-${{ matrix.coin }} - name: Cache built if: ${{ !startsWith(github.ref, 'refs/tags/v') }} uses: actions/cache@v4 with: path: | contrib/depends/built/* key: depends-${{ github.job }}-${{ hashFiles('contrib/depends/packages/*.mk') }} - name: build run: | ./build_single.sh ${{ matrix.coin }} aarch64-apple-ios -j$(sysctl -n hw.logicalcpu) - name: rename artifacts run: | mkdir release/gh/ for i in release/${{ matrix.coin }}/* do cp "$i" "release/gh/${{ matrix.coin }}_$(basename $i)" done - name: Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: files: release/gh/* token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} - name: Upload lib uses: actions/upload-artifact@v4 with: name: ios ${{ matrix.coin }} path: release/${{ matrix.coin }} bulk_lib_release: name: create single release file runs-on: ubuntu-latest needs: [ lib_mingw, lib_android, lib_linux, lib_macos, lib_ios ] steps: - uses: actions/download-artifact@v4 with: name: android monero path: release/monero - uses: actions/download-artifact@v4 with: name: android wownero path: release/wownero - uses: actions/download-artifact@v4 with: name: ios monero path: release/monero - uses: actions/download-artifact@v4 with: name: ios wownero path: release/wownero - uses: actions/download-artifact@v4 with: name: linux monero path: release/monero - uses: actions/download-artifact@v4 with: name: linux wownero path: release/wownero - uses: actions/download-artifact@v4 with: name: macos monero path: release/monero - uses: actions/download-artifact@v4 with: name: macos wownero path: release/wownero - uses: actions/download-artifact@v4 with: name: mingw monero path: release/monero - uses: actions/download-artifact@v4 with: name: mingw wownero path: release/wownero - name: zip release dir run: zip -r release-bundle.zip release - name: Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: files: release-bundle.zip token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} - name: Upload lib uses: actions/upload-artifact@v4 with: name: release-bulk path: release deno_monerots_test_linux: name: test ts library runs-on: ubuntu-24.04 needs: [ lib_linux ] steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive - uses: actions/download-artifact@v4 with: name: linux monero path: release/monero - name: unpack and move monero_c run: | unxz -f -k release/*/*.xz - uses: denoland/setup-deno@v1 with: deno-version: vx.x.x - name: Create symlink run: | cd impls/monero.ts mkdir lib cd lib ln -s ../../../release/monero/x86_64-linux-gnu_libwallet2_api_c.so mv x86_64-linux-gnu_libwallet2_api_c.so monero_libwallet2_api_c.so cd .. - name: Run tests run: | cd impls/monero.ts deno run --unstable-ffi --allow-ffi checksum.ts regression_tests_linux: name: linux regression tests strategy: fail-fast: false matrix: coin: [monero, wownero] needs: [ lib_linux ] runs-on: ubuntu-24.04 steps: - uses: denoland/setup-deno@v2 with: deno-version: v2.x - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive - uses: actions/download-artifact@v4 with: name: linux ${{ matrix.coin }} path: release/${{ matrix.coin }} - name: Run regression tests run: COIN="${{ matrix.coin }}" deno test -A tests/regression.test.ts regression_tests_macos: name: macos regression tests strategy: matrix: coin: [monero, wownero] needs: [ lib_macos ] runs-on: macos-14 steps: - uses: denoland/setup-deno@v2 with: deno-version: canary - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive - uses: actions/download-artifact@v4 with: name: macos ${{ matrix.coin }} path: release/${{ matrix.coin }} - name: Run regression tests run: COIN="${{ matrix.coin }}" deno test -A tests/regression.test.ts integration_tests_linux: name: linux integration tests strategy: matrix: coin: [monero, wownero] needs: [ lib_linux ] runs-on: ubuntu-24.04 steps: - uses: denoland/setup-deno@v2 with: deno-version: v2.x - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive - uses: actions/download-artifact@v4 with: name: linux ${{ matrix.coin }} path: release/${{ matrix.coin }} - name: Run integration tests run: COIN="${{ matrix.coin }}" deno test -A tests/integration.test.ts env: SECRET_WALLET_PASSWORD: ${{ secrets.SECRET_WALLET_PASSWORD }} SECRET_WALLET_MNEMONIC: ${{ secrets.SECRET_WALLET_MNEMONIC }} SECRET_WALLET_RESTORE_HEIGHT: ${{ secrets.SECRET_WALLET_RESTORE_HEIGHT }} integration_tests_macos: name: macos integration tests strategy: matrix: coin: [monero, wownero] needs: [ lib_macos ] runs-on: macos-14 steps: - uses: denoland/setup-deno@v2 with: deno-version: v2.x - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: recursive - uses: actions/download-artifact@v4 with: name: macos ${{ matrix.coin }} path: release/${{ matrix.coin }} - name: Run integration tests run: COIN="${{ matrix.coin }}" deno test -A tests/integration.test.ts env: SECRET_WALLET_PASSWORD: ${{ secrets.SECRET_WALLET_PASSWORD }} SECRET_WALLET_MNEMONIC: ${{ secrets.SECRET_WALLET_MNEMONIC }} SECRET_WALLET_RESTORE_HEIGHT: ${{ secrets.SECRET_WALLET_RESTORE_HEIGHT }} comment_pr: name: comment on pr runs-on: ubuntu-latest needs: [ lib_mingw, lib_android, lib_linux, lib_macos, lib_ios, ] steps: - uses: actions/github-script@v7 continue-on-error: true id: get_issue_number with: script: | if (context.issue.number) { // Return issue number if present return context.issue.number; } else { // Otherwise return issue number from commit return ( await github.rest.repos.listPullRequestsAssociatedWithCommit({ commit_sha: context.sha, owner: context.repo.owner, repo: context.repo.repo, }) ).data[0].number; } result-encoding: string - name: Find Comment continue-on-error: true uses: peter-evans/find-comment@v3 id: fc with: issue-number: ${{steps.get_issue_number.outputs.result}} comment-author: 'github-actions[bot]' body-includes: download artifacts - name: Update comment continue-on-error: true if: steps.fc.outcome == 'success' uses: peter-evans/create-or-update-comment@v4 with: comment-id: ${{ steps.fc.outputs.comment-id }} issue-number: ${{steps.get_issue_number.outputs.result}} body: | [download artifacts #${{github.run_id}}](https://nightly.link/MrCyjaneK/monero_c/actions/runs/${{github.run_id}}) edit-mode: replace - name: Create comment continue-on-error: true if: steps.fc.outcome == 'failure' uses: peter-evans/create-or-update-comment@v4 with: issue-number: ${{steps.get_issue_number.outputs.result}} body: | [download artifacts #${{github.run_id}}](https://nightly.link/MrCyjaneK/monero_c/actions/runs/${{github.run_id}}) (this comment will update whenever you push)