summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcyan <cyjan@mrcyjanek.net>2025-07-11 06:27:24 +0200
committerGitHub <noreply@github.com>2025-07-11 06:27:24 +0200
commit88ecdd81304b2f42983f5b64f727fb20d78c8efa (patch)
treeb99e846aadb5d571f8ab63841b79acd8865cd7a3
parenta27fbcb24d91143715ed930a05aaa4d853fba1f2 (diff)
feat: jenkins CI initial (#142)
* feat: jenkins CI initial * feat: publish over SSH * feat: more details regarding build-id generation * feat: prebuild download logic * feat: force fast_builds on GitHub CI runs * feat: add make clean to contrib/depends and invoke it on CI to reduce SSH upload step time * fix: correct linux save path * revert: make clean * separate builds * enhance sshPublisher * fix: github CI: depracate GitHub cache, fix DEPENDS_UNTRUSTED_FAST_BUILDS * fix: sha256sum logic * chore: refactor github actions and Jenkinsfile to only execute when required * ci: update ci to 15 and xcode to 16.4 * ci: cleanup builddir before starting
-rw-r--r--.github/workflows/full_check.yaml500
-rwxr-xr-xbuild_single.sh2
-rw-r--r--contrib/depends/Jenkinsfile208
-rw-r--r--contrib/depends/Makefile50
-rw-r--r--contrib/depends/funcs.mk154
-rw-r--r--impls/monero.dart/lib/src/checksum_monero.dart2
-rw-r--r--impls/monero.ts/checksum_monero.ts2
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/monero_checksum.h2
8 files changed, 594 insertions, 326 deletions
diff --git a/.github/workflows/full_check.yaml b/.github/workflows/full_check.yaml
index 8f54c8a..bca32d6 100644
--- a/.github/workflows/full_check.yaml
+++ b/.github/workflows/full_check.yaml
@@ -7,6 +7,9 @@ jobs:
lib_mingw:
strategy:
fail-fast: false
+ matrix:
+ coin: [monero, wownero]
+ target: [x86_64-w64-mingw32, i686-w64-mingw32]
runs-on: ubuntu-latest
container:
image: ubuntu:24.04
@@ -30,32 +33,16 @@ jobs:
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
- key: ${{ github.job }}
- - 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: x86_64-w64-mingw32
+ key: ${{ github.job }}-${{ matrix.coin }}-${{ matrix.target }}
+ - name: Build ${{ matrix.coin }} for ${{ matrix.target }}
run: |
- ./build_single.sh monero x86_64-w64-mingw32 -j$(nproc)
- ./build_single.sh wownero x86_64-w64-mingw32 -j$(nproc)
- - name: i686-w64-mingw32
- run: |
- ./build_single.sh monero i686-w64-mingw32 -j$(nproc)
- ./build_single.sh wownero i686-w64-mingw32 -j$(nproc)
+ env DEPENDS_UNTRUSTED_FAST_BUILDS=forced ./build_single.sh ${{ matrix.coin }} ${{ matrix.target }} -j$(nproc)
- name: rename artifacts
run: |
- mkdir release/gh/
- for i in release/monero/*
- do
- cp "$i" "release/gh/monero_$(basename $i)"
- done
- for i in release/wownero/*
+ mkdir -p release/gh/
+ for i in release/${{ matrix.coin }}/*
do
- cp "$i" "release/gh/wownero_$(basename $i)"
+ cp "$i" "release/gh/${{ matrix.coin }}_$(basename $i)"
done
- name: Release
uses: softprops/action-gh-release@v2
@@ -66,19 +53,16 @@ jobs:
- name: Upload lib
uses: actions/upload-artifact@v4
with:
- name: mingw monero
- path: release/monero
- - name: Upload lib wownero
- uses: actions/upload-artifact@v4
- with:
- name: mingw wownero
- path: release/wownero
+ name: mingw-${{ matrix.coin }}-${{ matrix.target }}
+ path: release/${{ matrix.coin }}
+
lib_android:
strategy:
fail-fast: false
+ matrix:
+ coin: [monero, wownero, zano]
+ target: [x86_64-linux-android, armv7a-linux-androideabi, aarch64-linux-android]
runs-on: ubuntu-22.04
- # container:
- # image: debian:bookworm
steps:
- name: Free Disk Space
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
@@ -110,43 +94,16 @@ jobs:
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
- key: ${{ github.job }}
- - 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: monero
- run: |
- ./build_single.sh monero x86_64-linux-android -j$(nproc)
- ./build_single.sh monero armv7a-linux-androideabi -j$(nproc)
- ./build_single.sh monero aarch64-linux-android -j$(nproc)
- - name: wownero
- run: |
- ./build_single.sh wownero aarch64-linux-android -j$(nproc)
- ./build_single.sh wownero x86_64-linux-android -j$(nproc)
- ./build_single.sh wownero armv7a-linux-androideabi -j$(nproc)
- - name: zano
+ key: ${{ github.job }}-${{ matrix.coin }}-${{ matrix.target }}
+ - name: Build ${{ matrix.coin }} for ${{ matrix.target }}
run: |
- ./build_single.sh zano x86_64-linux-android -j$(nproc)
- ./build_single.sh zano aarch64-linux-android -j$(nproc)
- ./build_single.sh zano armv7a-linux-androideabi -j$(nproc)
+ env DEPENDS_UNTRUSTED_FAST_BUILDS=forced ./build_single.sh ${{ matrix.coin }} ${{ matrix.target }} -j$(nproc)
- name: rename artifacts
run: |
- mkdir release/gh/
- for i in release/monero/*
+ mkdir -p release/gh/
+ for i in release/${{ matrix.coin }}/*
do
- cp "$i" "release/gh/monero_$(basename $i)"
- done
- for i in release/wownero/*
- do
- cp "$i" "release/gh/wownero_$(basename $i)"
- done
- for i in release/zano/*
- do
- cp "$i" "release/gh/zano_$(basename $i)"
+ cp "$i" "release/gh/${{ matrix.coin }}_$(basename $i)"
done
- name: Release
uses: softprops/action-gh-release@v2
@@ -154,28 +111,22 @@ jobs:
with:
files: release/gh/*
token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
- - name: Upload lib monero
- uses: actions/upload-artifact@v4
- with:
- name: android monero
- path: release/monero
- - name: Upload lib wownero
- uses: actions/upload-artifact@v4
- with:
- name: android wownero
- path: release/wownero
- - name: Upload lib zano
+ - name: Upload lib
uses: actions/upload-artifact@v4
with:
- name: android zano
- path: release/zano
+ name: android-${{ matrix.coin }}-${{ matrix.target }}
+ 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, zano]
+ target: [x86_64-linux-gnu, aarch64-linux-gnu, i686-linux-gnu]
runs-on: ubuntu-latest
container:
image: debian:bullseye
@@ -199,43 +150,16 @@ jobs:
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
- key: ${{ github.job }}
- - 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: x86_64-linux-gnu
- run: |
- ./build_single.sh monero x86_64-linux-gnu -j$(nproc)
- ./build_single.sh wownero x86_64-linux-gnu -j$(nproc)
- ./build_single.sh zano x86_64-linux-gnu -j$(nproc)
- - name: aarch64-linux-gnu
- run: |
- ./build_single.sh monero aarch64-linux-gnu -j$(nproc)
- ./build_single.sh wownero aarch64-linux-gnu -j$(nproc)
- ./build_single.sh zano aarch64-linux-gnu -j$(nproc)
- - name: i686-linux-gnu
+ key: ${{ github.job }}-${{ matrix.coin }}-${{ matrix.target }}
+ - name: Build ${{ matrix.coin }} for ${{ matrix.target }}
run: |
- ./build_single.sh monero i686-linux-gnu -j$(nproc)
- ./build_single.sh wownero i686-linux-gnu -j$(nproc)
- ./build_single.sh zano i686-linux-gnu -j$(nproc)
+ env DEPENDS_UNTRUSTED_FAST_BUILDS=forced ./build_single.sh ${{ matrix.coin }} ${{ matrix.target }} -j$(nproc)
- name: rename artifacts
run: |
- mkdir release/gh/
- for i in release/monero/*
+ mkdir -p release/gh/
+ for i in release/${{ matrix.coin }}/*
do
- cp "$i" "release/gh/monero_$(basename $i)"
- done
- for i in release/wownero/*
- do
- cp "$i" "release/gh/wownero_$(basename $i)"
- done
- for i in release/zano/*
- do
- cp "$i" "release/gh/zano_$(basename $i)"
+ cp "$i" "release/gh/${{ matrix.coin }}_$(basename $i)"
done
- name: Release
uses: softprops/action-gh-release@v2
@@ -246,23 +170,17 @@ jobs:
- name: Upload lib
uses: actions/upload-artifact@v4
with:
- name: linux monero
- path: release/monero
- - name: Upload lib wownero
- uses: actions/upload-artifact@v4
- with:
- name: linux wownero
- path: release/wownero
- - name: Upload lib zano
- uses: actions/upload-artifact@v4
- with:
- name: linux zano
- path: release/zano
+ name: linux-${{ matrix.coin }}-${{ matrix.target }}
+ path: release/${{ matrix.coin }}
+
lib_macos:
strategy:
fail-fast: false
+ matrix:
+ coin: [monero, wownero, zano]
+ target: [aarch64-apple-darwin, x86_64-apple-darwin]
name: macos build
- runs-on: macos-14
+ runs-on: macos-15
steps:
- name: Checkout monero_c repo
uses: actions/checkout@v4
@@ -272,7 +190,7 @@ jobs:
submodules: recursive
- uses: maxim-lobanov/setup-xcode@v1
with:
- xcode-version: '16.2'
+ xcode-version: '16.4'
- name: install dependencies
run: |
brew install ccache binutils pigz autoconf automake libtool pkg-config
@@ -287,38 +205,16 @@ jobs:
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
- key: ${{ github.job }}
- - 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)
+ key: ${{ github.job }}-${{ matrix.coin }}-${{ matrix.target }}
+ - name: Build ${{ matrix.coin }} for ${{ matrix.target }}
run: |
- ./build_single.sh monero aarch64-apple-darwin -j$(sysctl -n hw.logicalcpu)
- ./build_single.sh wownero aarch64-apple-darwin -j$(sysctl -n hw.logicalcpu)
- ./build_single.sh zano aarch64-apple-darwin -j$(sysctl -n hw.logicalcpu)
- - name: build (x86_64-apple-darwin)
- run: |
- ./build_single.sh monero x86_64-apple-darwin -j$(sysctl -n hw.logicalcpu)
- ./build_single.sh wownero x86_64-apple-darwin -j$(sysctl -n hw.logicalcpu)
- ./build_single.sh zano x86_64-apple-darwin -j$(sysctl -n hw.logicalcpu)
+ env DEPENDS_UNTRUSTED_FAST_BUILDS=forced ./build_single.sh ${{ matrix.coin }} ${{ matrix.target }} -j$(sysctl -n hw.logicalcpu)
- name: rename artifacts
run: |
- mkdir release/gh/
- for i in release/monero/*
- do
- cp "$i" "release/gh/monero_$(basename $i)"
- done
- for i in release/wownero/*
- do
- cp "$i" "release/gh/wownero_$(basename $i)"
- done
- for i in release/zano/*
+ mkdir -p release/gh/
+ for i in release/${{ matrix.coin }}/*
do
- cp "$i" "release/gh/zano_$(basename $i)"
+ cp "$i" "release/gh/${{ matrix.coin }}_$(basename $i)"
done
- name: Release
uses: softprops/action-gh-release@v2
@@ -329,21 +225,15 @@ jobs:
- name: Upload lib
uses: actions/upload-artifact@v4
with:
- name: macos monero
- path: release/monero
- - name: Upload lib wownero
- uses: actions/upload-artifact@v4
- with:
- name: macos wownero
- path: release/wownero
- - name: Upload lib zano
- uses: actions/upload-artifact@v4
- with:
- name: macos zano
- path: release/zano
+ name: macos-${{ matrix.coin }}-${{ matrix.target }}
+ path: release/${{ matrix.coin }}
+
lib_ios:
strategy:
fail-fast: false
+ matrix:
+ coin: [monero, wownero, zano]
+ target: [aarch64-apple-ios, aarch64-apple-iossimulator]
name: ios build
runs-on: macos-15
steps:
@@ -355,7 +245,7 @@ jobs:
submodules: recursive
- uses: maxim-lobanov/setup-xcode@v1
with:
- xcode-version: '16.2'
+ xcode-version: '16.4'
- name: install dependencies
run: |
brew install ccache cmake autoconf automake libtool
@@ -370,40 +260,16 @@ jobs:
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
- key: ${{ github.job }}
- - 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-ios)
+ key: ${{ github.job }}-${{ matrix.coin }}-${{ matrix.target }}
+ - name: Build ${{ matrix.coin }} for ${{ matrix.target }}
run: |
- ./build_single.sh monero aarch64-apple-ios -j$(sysctl -n hw.logicalcpu)
- ./build_single.sh wownero aarch64-apple-ios -j$(sysctl -n hw.logicalcpu)
- ./build_single.sh zano aarch64-apple-ios -j$(sysctl -n hw.logicalcpu)
-
- - name: build (aarch64-apple-iossimulator)
- run: |
- ./build_single.sh monero aarch64-apple-iossimulator -j$(sysctl -n hw.logicalcpu)
- ./build_single.sh wownero aarch64-apple-iossimulator -j$(sysctl -n hw.logicalcpu)
- ./build_single.sh zano aarch64-apple-iossimulator -j$(sysctl -n hw.logicalcpu)
-
+ env DEPENDS_UNTRUSTED_FAST_BUILDS=forced ./build_single.sh ${{ matrix.coin }} ${{ matrix.target }} -j$(sysctl -n hw.logicalcpu)
- name: rename artifacts
run: |
- mkdir release/gh/
- for i in release/monero/*
- do
- cp "$i" "release/gh/monero_$(basename $i)"
- done
- for i in release/wownero/*
- do
- cp "$i" "release/gh/wownero_$(basename $i)"
- done
- for i in release/zano/*
+ mkdir -p release/gh/
+ for i in release/${{ matrix.coin }}/*
do
- cp "$i" "release/gh/zano_$(basename $i)"
+ cp "$i" "release/gh/${{ matrix.coin }}_$(basename $i)"
done
- name: Release
uses: softprops/action-gh-release@v2
@@ -414,100 +280,123 @@ jobs:
- name: Upload lib
uses: actions/upload-artifact@v4
with:
- name: ios monero
- path: release/monero
- - name: Upload lib wownero
- uses: actions/upload-artifact@v4
- with:
- name: ios wownero
- path: release/wownero
- - name: Upload lib zano
- uses: actions/upload-artifact@v4
- with:
- name: ios zano
- path: release/zano
+ name: ios-${{ matrix.coin }}-${{ matrix.target }}
+ 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
- ]
+ needs: [lib_mingw, lib_android, lib_linux, lib_macos, lib_ios]
+ strategy:
+ matrix:
+ coin: [monero, wownero, zano]
+ platform: [android, ios, linux, macos]
+ include:
+ - coin: monero
+ platform: mingw
+ - coin: wownero
+ platform: mingw
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: android zano
- path: release/zano
- - 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: ios zano
- path: release/zano
- - 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: linux zano
- path: release/zano
- - 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: macos zano
- path: release/zano
- - uses: actions/download-artifact@v4
- with:
- name: mingw monero
- path: release/monero
- - uses: actions/download-artifact@v4
+ - name: Create release directory
+ run: mkdir -p release/${{ matrix.coin }}
+
+ - name: Download Android artifacts
+ if: matrix.platform == 'android'
+ uses: actions/download-artifact@v4
+ with:
+ pattern: android-${{ matrix.coin }}-*
+ path: temp-android
+ merge-multiple: true
+
+ - name: Download iOS artifacts
+ if: matrix.platform == 'ios'
+ uses: actions/download-artifact@v4
+ with:
+ pattern: ios-${{ matrix.coin }}-*
+ path: temp-ios
+ merge-multiple: true
+
+ - name: Download Linux artifacts
+ if: matrix.platform == 'linux'
+ uses: actions/download-artifact@v4
+ with:
+ pattern: linux-${{ matrix.coin }}-*
+ path: temp-linux
+ merge-multiple: true
+
+ - name: Download macOS artifacts
+ if: matrix.platform == 'macos'
+ uses: actions/download-artifact@v4
+ with:
+ pattern: macos-${{ matrix.coin }}-*
+ path: temp-macos
+ merge-multiple: true
+
+ - name: Download MinGW artifacts
+ if: matrix.platform == 'mingw' && (matrix.coin == 'monero' || matrix.coin == 'wownero')
+ uses: actions/download-artifact@v4
+ with:
+ pattern: mingw-${{ matrix.coin }}-*
+ path: temp-mingw
+ merge-multiple: true
+
+ - name: Copy artifacts to release directory
+ run: |
+ if [ -d "temp-${{ matrix.platform }}" ]; then
+ cp -r temp-${{ matrix.platform }}/* release/${{ matrix.coin }}/
+ fi
+
+ - name: Upload consolidated artifacts
+ uses: actions/upload-artifact@v4
with:
- name: mingw wownero
- path: release/wownero
+ name: ${{ matrix.platform }}-${{ matrix.coin }}-all
+ path: release/${{ matrix.coin }}
+
+ final_bulk_release:
+ name: create final release bundle
+ runs-on: ubuntu-latest
+ needs: [bulk_lib_release]
+ steps:
+ - name: Create release directory
+ run: mkdir -p release/{monero,wownero,zano}
+
+ - name: Download all consolidated artifacts
+ uses: actions/download-artifact@v4
+ with:
+ pattern: "*-all"
+ path: temp-all
+
+ - name: Reorganize artifacts
+ run: |
+ # Move all artifacts to their respective coin directories
+ for coin in monero wownero zano; do
+ find temp-all -name "*-${coin}-all" -type d | while read dir; do
+ if [ -d "$dir" ]; then
+ cp -r "$dir"/* "release/${coin}/" 2>/dev/null || true
+ fi
+ done
+ done
+
- 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
+
+ - name: Upload final bundle
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
- ]
+ needs: [lib_linux]
steps:
- uses: actions/checkout@v4
with:
@@ -515,10 +404,13 @@ jobs:
submodules: recursive
- uses: actions/download-artifact@v4
with:
- name: linux monero
- path: release/monero
+ pattern: linux-monero-x86_64-linux-gnu
+ path: temp-linux-monero
+ merge-multiple: true
- name: unpack and move monero_c
run: |
+ mkdir -p release/monero
+ cp -r temp-linux-monero/* release/monero/
unxz -f -k release/*/*.xz
- uses: denoland/setup-deno@v1
with:
@@ -542,9 +434,7 @@ jobs:
fail-fast: false
matrix:
coin: [monero, wownero]
- needs: [
- lib_linux
- ]
+ needs: [lib_linux]
runs-on: ubuntu-24.04
steps:
- uses: denoland/setup-deno@v2
@@ -558,8 +448,14 @@ jobs:
- uses: actions/download-artifact@v4
with:
- name: linux ${{ matrix.coin }}
- path: release/${{ matrix.coin }}
+ pattern: linux-${{ matrix.coin }}-*
+ path: temp-linux-${{ matrix.coin }}
+ merge-multiple: true
+
+ - name: Setup release directory
+ run: |
+ mkdir -p release/${{ matrix.coin }}
+ cp -r temp-linux-${{ matrix.coin }}/* release/${{ matrix.coin }}/
- name: Run regression tests
run: COIN="${{ matrix.coin }}" deno test -A tests/regression.test.ts
@@ -569,10 +465,8 @@ jobs:
strategy:
matrix:
coin: [monero, wownero]
- needs: [
- lib_macos
- ]
- runs-on: macos-14
+ needs: [lib_macos]
+ runs-on: macos-15
steps:
- uses: denoland/setup-deno@v2
with:
@@ -585,8 +479,14 @@ jobs:
- uses: actions/download-artifact@v4
with:
- name: macos ${{ matrix.coin }}
- path: release/${{ matrix.coin }}
+ pattern: macos-${{ matrix.coin }}-*
+ path: temp-macos-${{ matrix.coin }}
+ merge-multiple: true
+
+ - name: Setup release directory
+ run: |
+ mkdir -p release/${{ matrix.coin }}
+ cp -r temp-macos-${{ matrix.coin }}/* release/${{ matrix.coin }}/
- name: Run regression tests
run: COIN="${{ matrix.coin }}" deno test -A tests/regression.test.ts
@@ -596,9 +496,7 @@ jobs:
strategy:
matrix:
coin: [monero, wownero]
- needs: [
- lib_linux
- ]
+ needs: [lib_linux]
runs-on: ubuntu-24.04
steps:
- uses: denoland/setup-deno@v2
@@ -612,8 +510,14 @@ jobs:
- uses: actions/download-artifact@v4
with:
- name: linux ${{ matrix.coin }}
- path: release/${{ matrix.coin }}
+ pattern: linux-${{ matrix.coin }}-*
+ path: temp-linux-${{ matrix.coin }}
+ merge-multiple: true
+
+ - name: Setup release directory
+ run: |
+ mkdir -p release/${{ matrix.coin }}
+ cp -r temp-linux-${{ matrix.coin }}/* release/${{ matrix.coin }}/
- name: Run integration tests
run: COIN="${{ matrix.coin }}" deno test -A tests/integration.test.ts
@@ -622,16 +526,13 @@ jobs:
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
+ needs: [lib_macos]
+ runs-on: macos-15
steps:
- uses: denoland/setup-deno@v2
with:
@@ -644,8 +545,14 @@ jobs:
- uses: actions/download-artifact@v4
with:
- name: macos ${{ matrix.coin }}
- path: release/${{ matrix.coin }}
+ pattern: macos-${{ matrix.coin }}-*
+ path: temp-macos-${{ matrix.coin }}
+ merge-multiple: true
+
+ - name: Setup release directory
+ run: |
+ mkdir -p release/${{ matrix.coin }}
+ cp -r temp-macos-${{ matrix.coin }}/* release/${{ matrix.coin }}/
- name: Run integration tests
run: COIN="${{ matrix.coin }}" deno test -A tests/integration.test.ts
@@ -654,13 +561,10 @@ jobs:
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,
- ]
+ needs: [lib_mingw, lib_android, lib_linux, lib_macos, lib_ios]
steps:
- uses: actions/github-script@v7
continue-on-error: true
diff --git a/build_single.sh b/build_single.sh
index c0ace0d..77d5a52 100755
--- a/build_single.sh
+++ b/build_single.sh
@@ -59,7 +59,7 @@ pushd contrib/depends
then
echo "Not building depends, directory exists"
else
- env -i PATH="$PATH" CC=gcc CXX=g++ make "$NPROC" HOST="$HOST_ABI"
+ env -i PATH="$PATH" CC=gcc CXX=g++ make "$NPROC" HOST="$HOST_ABI" DEPENDS_UNTRUSTED_FAST_BUILDS=$DEPENDS_UNTRUSTED_FAST_BUILDS
fi
popd
diff --git a/contrib/depends/Jenkinsfile b/contrib/depends/Jenkinsfile
new file mode 100644
index 0000000..5f364ac
--- /dev/null
+++ b/contrib/depends/Jenkinsfile
@@ -0,0 +1,208 @@
+pipeline {
+ agent none
+
+ parameters {
+ string(
+ name: 'LINUX_TARGETS',
+ defaultValue: 'x86_64-linux-gnu,aarch64-linux-gnu,i686-linux-gnu',
+ description: 'Comma-separated list of Linux targets to build'
+ )
+ string(
+ name: 'ANDROID_TARGETS',
+ defaultValue: 'x86_64-linux-android,armv7a-linux-androideabi,aarch64-linux-android',
+ description: 'Comma-separated list of Android targets to build'
+ )
+ string(
+ name: 'MINGW_TARGETS',
+ defaultValue: 'x86_64-w64-mingw32,i686-w64-mingw32',
+ description: 'Comma-separated list of MinGW targets to build'
+ )
+ string(
+ name: 'DARWIN_TARGETS',
+ defaultValue: 'aarch64-apple-darwin,x86_64-apple-darwin,aarch64-apple-ios,aarch64-apple-iossimulator',
+ description: 'Comma-separated list of Darwin targets to build'
+ )
+ }
+
+ stages {
+ stage('Check Changes') {
+ agent any
+ steps {
+ script {
+ def changes = sh(
+ script: "git diff --name-only HEAD~1 HEAD | grep '^contrib/depends' || echo 'NO_CHANGES'",
+ returnStdout: true
+ ).trim()
+
+ if (changes == 'NO_CHANGES') {
+ echo "No changes detected in contrib/depends directory. Skipping build."
+ currentBuild.result = 'NOT_BUILT'
+ return
+ } else {
+ echo "Changes detected in contrib/depends directory:"
+ echo changes
+ }
+ }
+ }
+ }
+
+ stage('Build Dependencies') {
+ when {
+ not {
+ equals expected: 'NOT_BUILT', actual: currentBuild.result
+ }
+ }
+ parallel {
+ stage('Linux Builds') {
+ agent {
+ dockerfile {
+ filename '.devcontainer/Dockerfile'
+ args '-v /opt/builds:/opt/builds'
+ label 'linux && amd64'
+ }
+ }
+ steps {
+ script {
+ def targets = params.LINUX_TARGETS.split(',').collect { it.trim() }
+
+ checkout scm
+
+ for (target in targets) {
+ echo "Building Linux dependencies for ${target}"
+
+ dir('contrib/depends') {
+ sh "rm -rf built/${target}/*"
+ sh "make HOST=${target} DEPENDS_UNTRUSTED_FAST_BUILDS=yes"
+ }
+ }
+ }
+ }
+ post {
+ always {
+ script {
+ def targets = params.LINUX_TARGETS.split(',').collect { it.trim() }
+ for (target in targets) {
+ // archiveArtifacts artifacts: "contrib/depends/built/${target}/*/*.tar.gz*", allowEmptyArchive: true
+ sshPublisher(publishers: [sshPublisherDesc(configName: 'static.mrcyjanek.net', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'depends', remoteDirectorySDF: false, sourceFiles: "contrib/depends/built/${target}/*/*.tar.gz*")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
+ }
+ }
+ }
+ }
+ }
+
+ stage('Android Builds') {
+ agent {
+ dockerfile {
+ filename '.devcontainer/Dockerfile'
+ args '-v /opt/builds:/opt/builds'
+ label 'linux && amd64'
+ }
+ }
+ steps {
+ script {
+ def targets = params.ANDROID_TARGETS.split(',').collect { it.trim() }
+
+ checkout scm
+
+ for (target in targets) {
+ echo "Building Android dependencies for ${target}"
+
+ dir('contrib/depends') {
+ sh "rm -rf built/${target}/*"
+ sh "make HOST=${target} DEPENDS_UNTRUSTED_FAST_BUILDS=yes"
+ }
+ }
+ }
+ }
+ post {
+ always {
+ script {
+ def targets = params.ANDROID_TARGETS.split(',').collect { it.trim() }
+ for (target in targets) {
+ // archiveArtifacts artifacts: "contrib/depends/built/${target}/*/*.tar.gz*", allowEmptyArchive: true
+ sshPublisher(publishers: [sshPublisherDesc(configName: 'static.mrcyjanek.net', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'depends', remoteDirectorySDF: false, sourceFiles: "contrib/depends/built/${target}/*/*.tar.gz*")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
+ }
+ }
+ }
+ }
+ }
+
+ stage('MinGW Builds') {
+ agent {
+ dockerfile {
+ filename '.devcontainer/Dockerfile'
+ args '-v /opt/builds:/opt/builds'
+ label 'linux && amd64'
+ }
+ }
+ steps {
+ script {
+ def targets = params.MINGW_TARGETS.split(',').collect { it.trim() }
+
+ checkout scm
+
+ for (target in targets) {
+ echo "Building MinGW dependencies for ${target}"
+
+ dir('contrib/depends') {
+ sh "rm -rf built/${target}/*"
+ sh "make HOST=${target} DEPENDS_UNTRUSTED_FAST_BUILDS=yes"
+ }
+ }
+ }
+ }
+ post {
+ always {
+ script {
+ def targets = params.MINGW_TARGETS.split(',').collect { it.trim() }
+ for (target in targets) {
+ // archiveArtifacts artifacts: "contrib/depends/built/${target}/*/*.tar.gz*", allowEmptyArchive: true
+ sshPublisher(publishers: [sshPublisherDesc(configName: 'static.mrcyjanek.net', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'depends', remoteDirectorySDF: false, sourceFiles: "contrib/depends/built/${target}/*/*.tar.gz*")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
+ }
+ }
+ }
+ }
+ }
+
+ stage('Darwin Builds') {
+ agent {
+ label 'darwin && arm64'
+ }
+ steps {
+ script {
+ def targets = params.DARWIN_TARGETS.split(',').collect { it.trim() }
+
+ checkout scm
+
+ for (target in targets) {
+ echo "Building dependencies for ${target}"
+
+ dir('contrib/depends') {
+ sh "rm -rf built/${target}/*"
+ sh "make HOST=${target} DEPENDS_UNTRUSTED_FAST_BUILDS=yes"
+ }
+ }
+ }
+ }
+ post {
+ always {
+ script {
+ def targets = params.DARWIN_TARGETS.split(',').collect { it.trim() }
+ for (target in targets) {
+ // archiveArtifacts artifacts: "contrib/depends/built/${target}/*/*.tar.gz*", allowEmptyArchive: true
+ sshPublisher(publishers: [sshPublisherDesc(configName: 'static.mrcyjanek.net', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'depends', remoteDirectorySDF: false, sourceFiles: "contrib/depends/built/${target}/*/*.tar.gz*")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ post {
+ always {
+ echo "Build completed."
+ }
+ }
+} \ No newline at end of file
diff --git a/contrib/depends/Makefile b/contrib/depends/Makefile
index dd357c8..7e9f0f4 100644
--- a/contrib/depends/Makefile
+++ b/contrib/depends/Makefile
@@ -13,6 +13,17 @@ DOWNLOAD_CONNECT_TIMEOUT:=30
DOWNLOAD_RETRIES:=5
HOST_ID_SALT ?= salt
BUILD_ID_SALT ?= salt
+
+DEPENDS_UNTRUSTED_FAST_BUILDS ?=
+PREBUILT_BASE_URL ?= https://static.mrcyjanek.net/lfs/depends/contrib/depends/built
+ifneq ($(DEPENDS_UNTRUSTED_FAST_BUILDS),)
+ifneq ($(DEPENDS_UNTRUSTED_FAST_BUILDS),yes)
+ifneq ($(DEPENDS_UNTRUSTED_FAST_BUILDS),forced)
+$(error DEPENDS_UNTRUSTED_FAST_BUILDS must be empty, "yes", or "forced", got "$(DEPENDS_UNTRUSTED_FAST_BUILDS)")
+endif
+endif
+endif
+
# Detect the number of CPU cores
ifeq ($(shell uname), Darwin)
NUM_CORES := $(shell sysctl -n hw.ncpu)
@@ -110,19 +121,34 @@ include builders/$(build_os).mk
include builders/default.mk
include packages/packages.mk
+# Legacy build ID strings (kept for debugging info)
+build_id_string_legacy:=$(BUILD_ID_SALT)
+build_id_string_legacy+=$(shell $(build_CC) --version 2>/dev/null)
+build_id_string_legacy+=$(shell $(build_AR) --version 2>/dev/null)
+build_id_string_legacy+=$(shell $(build_CXX) --version 2>/dev/null)
+build_id_string_legacy+=$(shell $(build_RANLIB) --version 2>/dev/null)
+build_id_string_legacy+=$(shell $(build_STRIP) --version 2>/dev/null)
+
+$(host_arch)_$(host_os)_id_string_legacy:=$(HOST_ID_SALT)
+$(host_arch)_$(host_os)_id_string_legacy+=$(shell $(host_CC) --version 2>/dev/null)
+$(host_arch)_$(host_os)_id_string_legacy+=$(shell $(host_AR) --version 2>/dev/null)
+$(host_arch)_$(host_os)_id_string_legacy+=$(shell $(host_CXX) --version 2>/dev/null)
+$(host_arch)_$(host_os)_id_string_legacy+=$(shell $(host_RANLIB) --version 2>/dev/null)
+$(host_arch)_$(host_os)_id_string_legacy+=$(shell $(host_STRIP) --version 2>/dev/null)
+
build_id_string:=$(BUILD_ID_SALT)
-build_id_string+=$(shell $(build_CC) --version 2>/dev/null)
-build_id_string+=$(shell $(build_AR) --version 2>/dev/null)
-build_id_string+=$(shell $(build_CXX) --version 2>/dev/null)
-build_id_string+=$(shell $(build_RANLIB) --version 2>/dev/null)
-build_id_string+=$(shell $(build_STRIP) --version 2>/dev/null)
+build_id_string+=$(shell basename $(build_CC) 2>/dev/null || echo "unknown")
+build_id_string+=$(shell basename $(build_AR) 2>/dev/null || echo "unknown")
+build_id_string+=$(shell basename $(build_CXX) 2>/dev/null || echo "unknown")
+build_id_string+=$(shell basename $(build_RANLIB) 2>/dev/null || echo "unknown")
+build_id_string+=$(shell basename $(build_STRIP) 2>/dev/null || echo "unknown")
$(host_arch)_$(host_os)_id_string:=$(HOST_ID_SALT)
-$(host_arch)_$(host_os)_id_string+=$(shell $(host_CC) --version 2>/dev/null)
-$(host_arch)_$(host_os)_id_string+=$(shell $(host_AR) --version 2>/dev/null)
-$(host_arch)_$(host_os)_id_string+=$(shell $(host_CXX) --version 2>/dev/null)
-$(host_arch)_$(host_os)_id_string+=$(shell $(host_RANLIB) --version 2>/dev/null)
-$(host_arch)_$(host_os)_id_string+=$(shell $(host_STRIP) --version 2>/dev/null)
+$(host_arch)_$(host_os)_id_string+=$(shell basename $(host_CC) 2>/dev/null || echo "unknown")
+$(host_arch)_$(host_os)_id_string+=$(shell basename $(host_AR) 2>/dev/null || echo "unknown")
+$(host_arch)_$(host_os)_id_string+=$(shell basename $(host_CXX) 2>/dev/null || echo "unknown")
+$(host_arch)_$(host_os)_id_string+=$(shell basename $(host_RANLIB) 2>/dev/null || echo "unknown")
+$(host_arch)_$(host_os)_id_string+=$(shell basename $(host_STRIP) 2>/dev/null || echo "unknown")
packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages)
native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages)
@@ -204,8 +230,8 @@ $(host_prefix)/share/toolchain.cmake : toolchain.cmake.in $(host_prefix)/.stamp_
define check_or_remove_cached
mkdir -p $(BASE_CACHE)/$(host)/$(package) && cd $(BASE_CACHE)/$(host)/$(package); \
$(build_SHA256SUM) -c $($(package)_cached_checksum) >/dev/null 2>/dev/null || \
- ( rm -f $($(package)_cached_checksum); \
- if test -f "$($(package)_cached)"; then echo "Checksum mismatch for $(package). Forcing rebuild.."; rm -f $($(package)_cached_checksum) $($(package)_cached); fi )
+ ( rm -f $($(package)_cached_checksum) $($(package)_cached_buildinfo); \
+ if test -f "$($(package)_cached)"; then echo "Checksum mismatch for $(package). Forcing rebuild.."; rm -f $($(package)_cached_checksum) $($(package)_cached) $($(package)_cached_buildinfo); fi )
endef
define check_or_remove_sources
diff --git a/contrib/depends/funcs.mk b/contrib/depends/funcs.mk
index 70b592f..757c941 100644
--- a/contrib/depends/funcs.mk
+++ b/contrib/depends/funcs.mk
@@ -36,7 +36,7 @@ define fetch_file
endef
define int_get_build_recipe_hash
-$(eval $(1)_all_file_checksums:=$(shell $(build_SHA256SUM) $(meta_depends) packages/$(1).mk $(addprefix $(PATCHES_PATH)/$(1)/,$($(1)_patches)) | cut -d" " -f1))
+$(eval $(1)_all_file_checksums:=$(shell cd $(BASEDIR) && $(build_SHA256SUM) $(subst $(BASEDIR)/,,$(meta_depends)) packages/$(1).mk $(addprefix patches/$(1)/,$($(1)_patches)) 2>/dev/null | cut -d" " -f1))
$(eval $(1)_recipe_hash:=$(shell echo -n "$($(1)_all_file_checksums)" | $(build_SHA256SUM) | cut -d" " -f1))
endef
@@ -46,6 +46,8 @@ $(eval $(1)_all_dependencies:=$(call int_get_all_dependencies,$(1),$($($(1)_type
$(foreach dep,$($(1)_all_dependencies),$(eval $(1)_build_id_deps+=$(dep)-$($(dep)_version)-$($(dep)_recipe_hash)))
$(eval $(1)_build_id_long:=$(1)-$($(1)_version)-$($(1)_recipe_hash)-$(release_type) $($(1)_build_id_deps) $($($(1)_type)_id_string))
$(eval $(1)_build_id:=$(shell echo -n "$($(1)_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH)))
+$(eval $(1)_build_id_long_legacy:=$(1)-$($(1)_version)-$($(1)_recipe_hash)-$(release_type) $($(1)_build_id_deps) $($($(1)_type)_id_string_legacy))
+$(eval $(1)_build_id_legacy:=$(shell echo -n "$($(1)_build_id_long_legacy)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH)))
final_build_id_long+=$($(package)_build_id_long)
#compute package-specific paths
@@ -59,10 +61,14 @@ $(1)_extract_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id
$(1)_download_dir:=$(base_download_dir)/$(1)-$($(1)_version)
$(1)_build_dir:=$$($(1)_extract_dir)/$$($(1)_build_subdir)
$(1)_cached_checksum:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz.hash
+$(1)_cached_buildinfo:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz.txt
$(1)_patch_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)/.patches-$($(1)_build_id)
$(1)_prefixbin:=$($($(1)_type)_prefix)/bin/
$(1)_cached:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz
$(1)_all_sources=$($(1)_file_name) $($(1)_extra_sources)
+$(1)_prebuilt_url:=$(PREBUILT_BASE_URL)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz
+$(1)_prebuilt_checksum_url:=$(PREBUILT_BASE_URL)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz.hash
+$(1)_prebuilt_buildinfo_url:=$(PREBUILT_BASE_URL)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz.txt
#stamps
$(1)_fetched=$(SOURCES_PATH)/download-stamps/.stamp_fetched-$(1)-$($(1)_file_name).hash
@@ -73,6 +79,8 @@ $(1)_built=$$($(1)_build_dir)/.stamp_built
$(1)_configured=$$($(1)_build_dir)/.stamp_configured
$(1)_staged=$$($(1)_staging_dir)/.stamp_staged
$(1)_postprocessed=$$($(1)_staging_prefix_dir)/.stamp_postprocessed
+$(1)_prebuilt_downloaded:=$(BASE_CACHE)/$(host)/$(1)/.stamp_prebuilt_downloaded-$($(1)_build_id)
+$(1)_cached_or_prebuilt:=$(BASE_CACHE)/$(host)/$(1)/.stamp_cached_or_prebuilt-$($(1)_build_id)
$(1)_download_path_fixed=$(subst :,\:,$$($(1)_download_path))
@@ -198,61 +206,183 @@ COMPRESS_CMD := $(shell if command -v pigz >/dev/null 2>&1; then echo "pigz"; el
define int_add_cmds
$($(1)_fetched):
+ $(AT)echo "=== Fetching $(1) v$($(1)_version) ==="
+ $(AT)echo " Source directory: $($(1)_source_dir)"
+ $(AT)echo " Download file: $($(1)_download_file)"
$(AT)mkdir -p $$(@D) $(SOURCES_PATH)
$(AT)rm -f $$@
$(AT)touch $$@
$(AT)cd $$(@D); $(call $(1)_fetch_cmds,$(1))
$(AT)cd $($(1)_source_dir); $(foreach source,$($(1)_all_sources),$(build_SHA256SUM) $(source) >> $$(@);)
+ $(AT)echo " Fetch completed: $$@"
$(AT)touch $$@
$($(1)_extracted): | $($(1)_fetched)
- $(AT)echo Extracting $(1)...
+ $(AT)echo "=== Extracting $(1) v$($(1)_version) ==="
+ $(AT)echo " Build ID: $($(1)_build_id)"
+ $(AT)echo " Extract directory: $($(1)_extract_dir)"
$(AT)mkdir -p $$(@D)
$(AT)cd $$(@D); $(call $(1)_extract_cmds,$(1))
+ $(AT)echo " Extract completed: $$@"
$(AT)touch $$@
$($(1)_preprocessed): | $($(1)_dependencies) $($(1)_extracted)
- $(AT)echo Preprocessing $(1)...
+ $(AT)echo "=== Preprocessing $(1) v$($(1)_version) ==="
+ $(AT)echo " Dependencies: $($(1)_dependencies)"
+ $(AT)echo " Patch directory: $($(1)_patch_dir)"
+ $(AT)echo " Patches: $($(1)_patches)"
$(AT)mkdir -p $$(@D) $($(1)_patch_dir)
$(AT)$(foreach patch,$($(1)_patches),cd $(PATCHES_PATH)/$(1); cp $(patch) $($(1)_patch_dir) ;)
$(AT)cd $$(@D); $(call $(1)_preprocess_cmds, $(1))
+ $(AT)echo " Preprocessing completed: $$@"
$(AT)touch $$@
$($(1)_configured): | $($(1)_preprocessed)
- $(AT)echo Configuring $(1)...
+ $(AT)echo "=== Configuring $(1) v$($(1)_version) ==="
+ $(AT)echo " Build directory: $($(1)_build_dir)"
+ $(AT)echo " Host prefix: $(host_prefix)"
+ $(AT)echo " All dependencies: $($(1)_all_dependencies)"
$(AT)rm -rf $(host_prefix); mkdir -p $(host_prefix)/lib; cd $(host_prefix); $(foreach package,$($(1)_all_dependencies), tar xf $($(package)_cached); )
$(AT)mkdir -p $$(@D)
$(AT)+cd $$(@D); $($(1)_config_env) $(call $(1)_config_cmds, $(1))
+ $(AT)echo " Configuration completed: $$@"
$(AT)touch $$@
$($(1)_built): | $($(1)_configured)
- $(AT)echo Building $(1)...
+ $(AT)echo "=== Building $(1) v$($(1)_version) ==="
+ $(AT)echo " Build directory: $($(1)_build_dir)"
+ $(AT)echo " Build environment: $($(1)_build_env)"
$(AT)mkdir -p $$(@D)
$(AT)+cd $$(@D); $($(1)_build_env) $(call $(1)_build_cmds, $(1))
+ $(AT)echo " Build completed: $$@"
$(AT)touch $$@
$($(1)_staged): | $($(1)_built)
- $(AT)echo Staging $(1)...
+ $(AT)echo "=== Staging $(1) v$($(1)_version) ==="
+ $(AT)echo " Staging directory: $($(1)_staging_dir)"
+ $(AT)echo " Staging prefix: $($(1)_staging_prefix_dir)"
$(AT)mkdir -p $($(1)_staging_dir)/$(host_prefix)
$(AT)cd $($(1)_build_dir); $($(1)_stage_env) $(call $(1)_stage_cmds, $(1))
+ $(AT)echo " Removing extract directory: $($(1)_extract_dir)"
$(AT)rm -rf $($(1)_extract_dir)
+ $(AT)echo " Staging completed: $$@"
$(AT)touch $$@
$($(1)_postprocessed): | $($(1)_staged)
- $(AT)echo Postprocessing $(1)...
+ $(AT)echo "=== Postprocessing $(1) v$($(1)_version) ==="
+ $(AT)echo " Postprocessing directory: $($(1)_staging_prefix_dir)"
$(AT)cd $($(1)_staging_prefix_dir); $(call $(1)_postprocess_cmds)
+ $(AT)echo " Postprocessing completed: $$@"
$(AT)touch $$@
+$($(1)_prebuilt_downloaded): | $($(1)_dependencies)
+ $(AT)echo "=== Attempting to download prebuilt $(1) v$($(1)_version) ==="
+ $(AT)echo " Build ID: $($(1)_build_id)"
+ $(AT)echo " Download URL: $($(1)_prebuilt_url)"
+ $(AT)mkdir -p $$(@D)
+ $(AT)mkdir -p $(dir $($(1)_cached))
+ $(AT)( \
+ echo " Downloading $(1) prebuilt files..." && \
+ $(build_DOWNLOAD) "$($(1)_cached).tmp" "$($(1)_prebuilt_url)" && \
+ $(build_DOWNLOAD) "$($(1)_cached_checksum).tmp" "$($(1)_prebuilt_checksum_url)" && \
+ $(build_DOWNLOAD) "$($(1)_cached_buildinfo).tmp" "$($(1)_prebuilt_buildinfo_url)" && \
+ echo " Verifying checksum..." && \
+ cd $(dir $($(1)_cached)) && \
+ sed 's/$(notdir $($(1)_cached))/$(notdir $($(1)_cached)).tmp/' "$($(1)_cached_checksum).tmp" > "$($(1)_cached_checksum).tmp.verify" && \
+ $(build_SHA256SUM) -c "$($(1)_cached_checksum).tmp.verify" && \
+ rm -f "$($(1)_cached_checksum).tmp.verify" && \
+ echo " Moving files to final location..." && \
+ mv "$($(1)_cached).tmp" "$($(1)_cached)" && \
+ mv "$($(1)_cached_checksum).tmp" "$($(1)_cached_checksum)" && \
+ mv "$($(1)_cached_buildinfo).tmp" "$($(1)_cached_buildinfo)" && \
+ echo " Prebuilt download completed: $$@" && \
+ touch $$@ \
+ ) || ( \
+ echo " Download failed for $(1)" && \
+ rm -f "$($(1)_cached).tmp" "$($(1)_cached_checksum).tmp" "$($(1)_cached_buildinfo).tmp" && \
+ if [ "$(DEPENDS_UNTRUSTED_FAST_BUILDS)" = "forced" ]; then \
+ echo " Error: DEPENDS_UNTRUSTED_FAST_BUILDS=forced but prebuilt download failed" && \
+ exit 1; \
+ else \
+ echo " Falling back to building from source..." && \
+ exit 1; \
+ fi \
+ )
$($(1)_cached): | $($(1)_dependencies) $($(1)_postprocessed)
- $(AT)echo Caching $(1)...
+ $(AT)echo "=== Caching $(1) v$($(1)_version) ==="
+ $(AT)echo " Build ID: $($(1)_build_id)"
+ $(AT)echo " Cache file: $$@"
+ $(AT)echo " Compression: $(COMPRESS_CMD)"
$(AT)cd $$($(1)_staging_dir)/$(host_prefix); find . | sort | tar --no-recursion --use-compress-program='$(COMPRESS_CMD)' -cf $$($(1)_staging_dir)/$$(@F) -T -
$(AT)mkdir -p $$(@D)
- $(AT)rm -rf $$(@D) && mkdir -p $$(@D)
$(AT)mv $$($(1)_staging_dir)/$$(@F) $$(@)
+ $(AT)echo " Removing staging directory: $($(1)_staging_dir)"
$(AT)rm -rf $($(1)_staging_dir)
+ $(AT)echo " Caching completed: $$@"
$($(1)_cached_checksum): $($(1)_cached)
+ $(AT)echo "=== Generating checksum for $(1) v$($(1)_version) ==="
+ $(AT)echo " Checksum file: $$@"
$(AT)cd $$(@D); $(build_SHA256SUM) $$(<F) > $$(@)
+ $(AT)echo " Checksum completed: $$@"
+ $(AT)echo "=== Generating build info for $(1) v$($(1)_version) ==="
+ $(AT)echo " Build info file: $$($(1)_cached_buildinfo)"
+ $(AT)echo "# Build Info for $(1) v$($(1)_version)" > $$($(1)_cached_buildinfo)
+ $(AT)echo "# Generated on: $$(shell date)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Package: $(1)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Version: $($(1)_version)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Host: $(host)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Release Type: $(release_type)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Build ID (current): $($(1)_build_id)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Build ID (legacy): $($(1)_build_id_legacy)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Build ID String (current): $($(1)_build_id_long)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Build ID String (legacy): $($(1)_build_id_long_legacy)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Dependencies: $($(1)_dependencies)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "All Dependencies: $($(1)_all_dependencies)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Recipe Hash: $($(1)_recipe_hash)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Recipe Files: $($(1)_all_file_checksums)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Toolchain (current): $($($(1)_type)_id_string)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Toolchain (legacy): $($($(1)_type)_id_string_legacy)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Build Tools (current):" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " CC: $$(shell basename $($($(1)_type)_CC) 2>/dev/null || echo "unknown")" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " CXX: $$(shell basename $($($(1)_type)_CXX) 2>/dev/null || echo "unknown")" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " AR: $$(shell basename $($($(1)_type)_AR) 2>/dev/null || echo "unknown")" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " RANLIB: $$(shell basename $($($(1)_type)_RANLIB) 2>/dev/null || echo "unknown")" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " STRIP: $$(shell basename $($($(1)_type)_STRIP) 2>/dev/null || echo "unknown")" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Build Tools (legacy versions):" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " CC: $$(shell $($($(1)_type)_CC) --version 2>/dev/null | head -1 || echo "unknown")" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " CXX: $$(shell $($($(1)_type)_CXX) --version 2>/dev/null | head -1 || echo "unknown")" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " AR: $$(shell $($($(1)_type)_AR) --version 2>/dev/null | head -1 || echo "unknown")" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " RANLIB: $$(shell $($($(1)_type)_RANLIB) --version 2>/dev/null | head -1 || echo "unknown")" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " STRIP: $$(shell $($($(1)_type)_STRIP) --version 2>/dev/null | head -1 || echo "unknown")" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "" >> $$($(1)_cached_buildinfo)
+ $(AT)echo "Salt Values:" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " BUILD_ID_SALT: $(BUILD_ID_SALT)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " HOST_ID_SALT: $(HOST_ID_SALT)" >> $$($(1)_cached_buildinfo)
+ $(AT)echo " Build info completed: $$($(1)_cached_buildinfo)"
+
+$($(1)_cached_or_prebuilt):
+ $(AT)mkdir -p $$(@D)
+ $(AT)if [ "$(DEPENDS_UNTRUSTED_FAST_BUILDS)" = "yes" ]; then \
+ echo "=== Trying prebuilt download for $(1) v$($(1)_version) ===" && \
+ ($(MAKE) -f $(BASEDIR)/Makefile $($(1)_prebuilt_downloaded) && touch $$@) || \
+ (echo " Prebuilt download failed, falling back to building from source..." && \
+ $(MAKE) -f $(BASEDIR)/Makefile $($(1)_cached_checksum) && touch $$@); \
+ elif [ "$(DEPENDS_UNTRUSTED_FAST_BUILDS)" = "forced" ]; then \
+ echo "=== Forced prebuilt download for $(1) v$($(1)_version) ===" && \
+ $(MAKE) -f $(BASEDIR)/Makefile $($(1)_prebuilt_downloaded) && touch $$@; \
+ else \
+ echo "=== Building from source for $(1) v$($(1)_version) ===" && \
+ $(MAKE) -f $(BASEDIR)/Makefile $($(1)_cached_checksum) && touch $$@; \
+ fi
.PHONY: $(1)
-$(1): | $($(1)_cached_checksum)
-.SECONDARY: $($(1)_cached) $($(1)_postprocessed) $($(1)_staged) $($(1)_built) $($(1)_configured) $($(1)_preprocessed) $($(1)_extracted) $($(1)_fetched)
+$(1): | $($(1)_cached_or_prebuilt)
+.SECONDARY: $($(1)_cached) $($(1)_postprocessed) $($(1)_staged) $($(1)_built) $($(1)_configured) $($(1)_preprocessed) $($(1)_extracted) $($(1)_fetched) $($(1)_cached_buildinfo) $($(1)_prebuilt_downloaded) $($(1)_cached_or_prebuilt)
endef
-stages = fetched extracted preprocessed configured built staged postprocessed cached cached_checksum
+stages = fetched extracted preprocessed configured built staged postprocessed cached cached_checksum prebuilt_downloaded
define ext_add_stages
$(foreach stage,$(stages),
diff --git a/impls/monero.dart/lib/src/checksum_monero.dart b/impls/monero.dart/lib/src/checksum_monero.dart
index fdbfbaa..4d0e459 100644
--- a/impls/monero.dart/lib/src/checksum_monero.dart
+++ b/impls/monero.dart/lib/src/checksum_monero.dart
@@ -1,4 +1,4 @@
// ignore_for_file: constant_identifier_names
const String wallet2_api_c_h_sha256 = "91218f60e937753a606b1db899ee2ed66a1b02144eb2d79b950ce59804397f84";
const String wallet2_api_c_cpp_sha256 = "282128494f3419c128dff7ed67daadd9c2ad0600d10557e829df03d9bc1ad891-0232839913b13cf0ab0bb7ad25fff0c05f37d2fe";
-const String wallet2_api_c_exp_sha256 = "d0f95f1f3bc49f1f59fe4eb0b61826128d7d3bb75405d5a01a252d02db03097d";
+const String wallet2_api_c_exp_sha256 = "b2f2355242f9ad852ccf860a60a5c7a74054f9450ba1fbf9c0f42c58dbfdee9d";
diff --git a/impls/monero.ts/checksum_monero.ts b/impls/monero.ts/checksum_monero.ts
index 7ed01a3..0d5549a 100644
--- a/impls/monero.ts/checksum_monero.ts
+++ b/impls/monero.ts/checksum_monero.ts
@@ -1,5 +1,5 @@
export const moneroChecksum = {
wallet2_api_c_h_sha256: "91218f60e937753a606b1db899ee2ed66a1b02144eb2d79b950ce59804397f84",
wallet2_api_c_cpp_sha256: "282128494f3419c128dff7ed67daadd9c2ad0600d10557e829df03d9bc1ad891-0232839913b13cf0ab0bb7ad25fff0c05f37d2fe",
- wallet2_api_c_exp_sha256: "d0f95f1f3bc49f1f59fe4eb0b61826128d7d3bb75405d5a01a252d02db03097d",
+ wallet2_api_c_exp_sha256: "b2f2355242f9ad852ccf860a60a5c7a74054f9450ba1fbf9c0f42c58dbfdee9d",
}
diff --git a/monero_libwallet2_api_c/src/main/cpp/monero_checksum.h b/monero_libwallet2_api_c/src/main/cpp/monero_checksum.h
index d3d7414..b4c250a 100644
--- a/monero_libwallet2_api_c/src/main/cpp/monero_checksum.h
+++ b/monero_libwallet2_api_c/src/main/cpp/monero_checksum.h
@@ -2,5 +2,5 @@
#define MONEROC_CHECKSUMS
const char * MONERO_wallet2_api_c_h_sha256 = "91218f60e937753a606b1db899ee2ed66a1b02144eb2d79b950ce59804397f84";
const char * MONERO_wallet2_api_c_cpp_sha256 = "282128494f3419c128dff7ed67daadd9c2ad0600d10557e829df03d9bc1ad891-0232839913b13cf0ab0bb7ad25fff0c05f37d2fe";
-const char * MONERO_wallet2_api_c_exp_sha256 = "d0f95f1f3bc49f1f59fe4eb0b61826128d7d3bb75405d5a01a252d02db03097d";
+const char * MONERO_wallet2_api_c_exp_sha256 = "b2f2355242f9ad852ccf860a60a5c7a74054f9450ba1fbf9c0f42c58dbfdee9d";
#endif