* tests: add script to download test dependencies from fallback mirrors * tests: use the new download_deps script, run tests on macos * ci: download proper artifact for macos * chore: make download_deps script download everything to dir named `monero_c` when ran directly * tests: await downloading deps * tests download proper monero_c version in prepareMoneroC * tests: fix typos * tests: add file data for more targets * tests: print why retrieving tags failed * chore: change mirror url endpoint from `monero_c` to `download_mirror` * tests: use cached releases endpoint to prevent ratelimits * ci: remove brew@1.76 dependency * tests: fix macos dylib path * feat!(monero.ts): make `createTransactionMultDest` optionally return `null` * feat(monero.ts): make `Wallet_reconnectDevice` symbol optional * tests: don't try to extract file if out already exists * tests: remove unnecesary directory rm calls * ci: set regression tests to use canary
578 lines
18 KiB
YAML
578 lines
18 KiB
YAML
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)
|