Update build-all-and-release.yml #719
This file contains hidden or 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: CI | |
| on: | |
| push: | |
| pull_request: | |
| jobs: | |
| macos-15: | |
| runs-on: macos-15 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Cache Homebrew downloads | |
| id: cache-brew-15 | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/Library/Caches/Homebrew | |
| /Users/runner/Library/Caches/Homebrew | |
| key: brew-cache-${{ runner.os }}-mac15-v1 | |
| restore-keys: | | |
| brew-cache-${{ runner.os }}-mac15- | |
| - name: Cache ccache | |
| id: cache-ccache-15 | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.ccache | |
| key: "ccache-${{ runner.os }}-mac15-v1-${{ hashFiles('configure.ac', 'Makefile.am', 'src/**', 'build-aux/**') }}" | |
| restore-keys: | | |
| ccache-${{ runner.os }}-mac15-v1- | |
| - name: Cache Protobuf tap build (macOS 15) | |
| id: cache-protobuf15 | |
| uses: actions/cache@v4 | |
| with: | |
| path: /opt/homebrew/Cellar/protobuf261 | |
| key: protobuf261-${{ runner.os }}-mac15-v1-${{ hashFiles('depends/homebrew-formulas/protobuf261.rb') }} | |
| restore-keys: | | |
| protobuf261-${{ runner.os }}-mac15- | |
| - name: git config credential.helper | |
| run: git config credential.helper | |
| - name: get previous xcode and switch to it | |
| run: ls -la /Applications/Xcode* && sudo xcode-select -switch /Applications/Xcode_16.4.app | |
| - name: Brew install base dependencies | |
| run: | | |
| brew install --quiet python@3 || brew link --overwrite python@3 | |
| brew install --quiet automake autoconf berkeley-db@4 pkg-config miniupnpc zeromq libtool qt@5 gperf qrencode librsvg ccache | |
| - name: Brew link dependencies | |
| run: brew link qt@5 berkeley-db@4 | |
| - name: check cellar for openssl | |
| run: cd /opt/homebrew/Cellar/openssl@3/ && ls | |
| - name: Configure ccache | |
| env: | |
| CCACHE_DIR: ~/.ccache | |
| run: | | |
| mkdir -p ~/.ccache | |
| echo 'max_size = 2G' > ~/.ccache/ccache.conf | |
| echo 'compression = true' >> ~/.ccache/ccache.conf | |
| ccache -z || true | |
| echo "CC=ccache clang" >> "$GITHUB_ENV" | |
| echo "CXX=ccache clang++" >> "$GITHUB_ENV" | |
| - name: Show current directory | |
| run: | | |
| pwd | |
| git rev-parse --short HEAD | |
| ls -lah | |
| ls -lah depends || true | |
| ls -lah depends/homebrew-formulas || true | |
| - name: Create local tap & stage protobuf261.rb | |
| run: | | |
| set -euo pipefail | |
| brew tap-new vergecurrency/local | |
| TAP_DIR="$(brew --repo vergecurrency/local)" | |
| echo "Tap dir: $TAP_DIR" | |
| mkdir -p "$TAP_DIR/Formula" | |
| FORMULA_LOCAL="depends/homebrew-formulas/protobuf261.rb" | |
| if [ -f "$FORMULA_LOCAL" ]; then | |
| echo "Using local $FORMULA_LOCAL" | |
| cp "$FORMULA_LOCAL" "$TAP_DIR/Formula/" | |
| else | |
| echo "Local formula not found; fetching from repo" | |
| REF="${GITHUB_REF_NAME:-master}" | |
| URL="https://raw.githubusercontent.com/vergecurrency/verge/${REF}/depends/homebrew-formulas/protobuf261.rb" | |
| echo "Fetching: $URL" | |
| curl -fL "$URL" -o "$TAP_DIR/Formula/protobuf261.rb" | |
| fi | |
| echo "Current taps:" | |
| brew tap | |
| - name: Install protobuf261 via tap | |
| run: brew install vergecurrency/local/protobuf261 | |
| - name: Stage boost176.rb into existing tap | |
| run: | | |
| set -euo pipefail | |
| if ! brew tap | grep -q '^vergecurrency/local$'; then | |
| brew tap-new vergecurrency/local | |
| fi | |
| TAP_DIR="$(brew --repo vergecurrency/local)" | |
| echo "Tap dir: $TAP_DIR" | |
| mkdir -p "$TAP_DIR/Formula" | |
| FORMULA_LOCAL="depends/homebrew-formulas/boost176.rb" | |
| if [ -f "$FORMULA_LOCAL" ]; then | |
| echo "Using local $FORMULA_LOCAL" | |
| cp "$FORMULA_LOCAL" "$TAP_DIR/Formula/" | |
| else | |
| echo "Local formula not found; fetching from repo" | |
| REF="${GITHUB_REF_NAME:-master}" | |
| URL="https://raw.githubusercontent.com/vergecurrency/verge/${REF}/depends/homebrew-formulas/boost176.rb" | |
| echo "Fetching: $URL" | |
| curl -fL "$URL" -o "$TAP_DIR/Formula/boost176.rb" | |
| fi | |
| echo "Current taps:" | |
| brew tap | |
| - name: Install boost176 via tap | |
| run: brew install vergecurrency/local/boost176 | |
| - name: Resolve Boost 1.76 env (robust) | |
| run: | | |
| set -euo pipefail | |
| BREW_PREFIX="$(brew --prefix)" | |
| BREW_CELLAR="$(brew --cellar)" | |
| if [ -d "$BREW_PREFIX/opt/boost176/lib" ]; then | |
| BOOST_DIR="$BREW_PREFIX/opt/boost176" | |
| else | |
| CELLAR_DIR="$BREW_CELLAR/boost176" | |
| if [ -d "$CELLAR_DIR" ]; then | |
| BOOST_VER="$(ls -1 "$CELLAR_DIR" | sort -V | tail -n1 || true)" | |
| if [ -n "${BOOST_VER:-}" ] && [ -d "$CELLAR_DIR/$BOOST_VER/lib" ]; then | |
| BOOST_DIR="$CELLAR_DIR/$BOOST_VER" | |
| fi | |
| fi | |
| fi | |
| echo "Resolved BOOST_DIR=${BOOST_DIR:-<empty>}" | |
| if [ -z "${BOOST_DIR:-}" ] || [ ! -d "$BOOST_DIR/lib" ]; then | |
| echo "::error::Boost libdir not found." | |
| exit 1 | |
| fi | |
| echo "BOOST_ROOT=$BOOST_DIR" >> "$GITHUB_ENV" | |
| echo "BOOST_INCLUDEDIR=$BOOST_DIR/include" >> "$GITHUB_ENV" | |
| echo "BOOST_LIBRARYDIR=$BOOST_DIR/lib" >> "$GITHUB_ENV" | |
| echo "CPPFLAGS=-I$BOOST_DIR/include" >> "$GITHUB_ENV" | |
| echo "LDFLAGS=-L$BOOST_DIR/lib" >> "$GITHUB_ENV" | |
| - name: Resolve Protobuf 2.6.1 env (robust) | |
| run: | | |
| set -euo pipefail | |
| BREW_PREFIX="$(brew --prefix)" | |
| BREW_CELLAR="$(brew --cellar)" | |
| if [ -d "$BREW_PREFIX/opt/protobuf261/lib" ]; then | |
| PROTO_DIR="$BREW_PREFIX/opt/protobuf261" | |
| else | |
| CELLAR_DIR="$BREW_CELLAR/protobuf261" | |
| if [ -d "$CELLAR_DIR" ]; then | |
| PROTO_VER="$(ls -1 "$CELLAR_DIR" | sort -V | tail -n1 || true)" | |
| if [ -n "${PROTO_VER:-}" ] && [ -d "$CELLAR_DIR/$PROTO_VER/lib" ]; then | |
| PROTO_DIR="$CELLAR_DIR/$PROTO_VER" | |
| fi | |
| fi | |
| fi | |
| echo "Resolved PROTO_DIR=${PROTO_DIR:-<empty>}" | |
| if [ -z "${PROTO_DIR:-}" ] || [ ! -d "$PROTO_DIR/lib" ]; then | |
| echo "::error::Protobuf libdir not found." | |
| exit 1 | |
| fi | |
| echo "PROTOBUF_ROOT=$PROTO_DIR" >> "$GITHUB_ENV" | |
| echo "PROTOBUF_INCLUDEDIR=$PROTO_DIR/include" >> "$GITHUB_ENV" | |
| echo "PROTOBUF_LIBRARYDIR=$PROTO_DIR/lib" >> "$GITHUB_ENV" | |
| echo "PKG_CONFIG_PATH=$PROTO_DIR/lib/pkgconfig:${PKG_CONFIG_PATH:-}" >> "$GITHUB_ENV" | |
| echo "PATH=$PROTO_DIR/bin:$(brew --prefix)/bin:$(brew --prefix)/sbin:${PATH:-/usr/bin:/bin}" >> "$GITHUB_ENV" | |
| BOOST_INC="${BOOST_INCLUDEDIR:-}" | |
| BOOST_LIB="${BOOST_LIBRARYDIR:-}" | |
| echo "CPPFLAGS=${BOOST_INC:+-I$BOOST_INC }-I$PROTO_DIR/include" >> "$GITHUB_ENV" | |
| echo "LDFLAGS=${BOOST_LIB:+-L$BOOST_LIB }-L$PROTO_DIR/lib" >> "$GITHUB_ENV" | |
| [ -z "${BOOST_INC}" ] || test -f "$BOOST_INC/boost/filesystem.hpp" || { echo "::warning::boost/filesystem.hpp not found under $BOOST_INC"; ls -R "$BOOST_INC" | head -n 50 || true; } | |
| ls -lah "$PROTO_DIR/lib" | grep -E 'libprotobuf|protobuf' || true | |
| - name: which clang/xcode | |
| run: clang --version | |
| - name: Auto generate | |
| run: ./autogen.sh | |
| - name: configure | |
| run: | | |
| ./configure \ | |
| --disable-bench \ | |
| --disable-tests \ | |
| --disable-dependency-tracking \ | |
| --disable-werror \ | |
| --with-gui \ | |
| --with-boost="${BOOST_ROOT}" \ | |
| --with-boost-libdir="${BOOST_LIBRARYDIR}" \ | |
| --bindir="$(pwd)/release/bin" \ | |
| --libdir="$(pwd)/release/lib" \ | |
| --with-openssl-dir=/opt/homebrew/Cellar/openssl@3/3.6.0 \ | |
| --with-libevent-dir=/opt/homebrew/Cellar/libevent/2.1.12_1 | |
| - name: make | |
| run: make -j4 | |
| # ---- SAFE BOOST SETUP (no /opt relink, no self-loop symlinks) ---- | |
| - name: Prepare Boost dylib names for macdeploy (safe, no opt relink) | |
| run: | | |
| set -euo pipefail | |
| BREW_CELLAR="$(brew --cellar)" | |
| # Prefer real keg path | |
| if [ -n "${BOOST_LIBRARYDIR:-}" ] && [ -d "$BOOST_LIBRARYDIR" ]; then | |
| BOOST_LIB_DIR="$BOOST_LIBRARYDIR" | |
| else | |
| KEG_DIR="$(ls -1d "$BREW_CELLAR/boost176"/* 2>/dev/null | sort -V | tail -n1 || true)" | |
| [ -n "$KEG_DIR" ] || { echo "::error::No boost176 keg found in $BREW_CELLAR/boost176"; exit 1; } | |
| BOOST_LIB_DIR="$KEG_DIR/lib" | |
| fi | |
| echo "Using BOOST_LIB_DIR=$BOOST_LIB_DIR" | |
| fix_boost_symlink() { | |
| local base="$1" | |
| local plain="$BOOST_LIB_DIR/libboost_${base}.dylib" | |
| if [ ! -e "$plain" ]; then | |
| # choose a candidate that is NOT the plain name to avoid self-loop | |
| CAND="$(ls -1 "$BOOST_LIB_DIR"/libboost_${base}*.dylib 2>/dev/null | \ | |
| grep -Ev '/libboost_'"$base"'\.dylib$' | sort -V | tail -n1 || true)" | |
| if [ -n "$CAND" ]; then | |
| [ "$(basename "$CAND")" = "libboost_${base}.dylib" ] || ln -sf "$(basename "$CAND")" "$plain" | |
| fi | |
| fi | |
| ( ls -l "$BOOST_LIB_DIR"/libboost_${base}*.dylib || true ) | sed -n '1,10p' | |
| } | |
| for L in filesystem program_options thread chrono system; do | |
| fix_boost_symlink "$L" | |
| done | |
| echo "DYLD_LIBRARY_PATH=$BOOST_LIB_DIR:${DYLD_LIBRARY_PATH:-}" >> "$GITHUB_ENV" | |
| echo "BOOST_LIBS=$BOOST_LIB_DIR" >> "$GITHUB_ENV" | |
| - name: Prepare Protobuf dylib for macdeploy | |
| run: | | |
| set -euo pipefail | |
| BREW_PREFIX="$(brew --prefix)" | |
| BREW_CELLAR="$(brew --cellar)" | |
| if [ -n "${PROTOBUF_LIBRARYDIR:-}" ] && [ -d "$PROTOBUF_LIBRARYDIR" ]; then | |
| PROTO_DIR="$(dirname "$PROTOBUF_LIBRARYDIR")" | |
| PROTO_LIB_DIR="$PROTOBUF_LIBRARYDIR" | |
| elif [ -d "$BREW_PREFIX/opt/protobuf261/lib" ]; then | |
| PROTO_DIR="$BREW_PREFIX/opt/protobuf261" | |
| PROTO_LIB_DIR="$PROTO_DIR/lib" | |
| else | |
| CELLAR_DIR="$BREW_CELLAR/protobuf261" | |
| PROTO_VER="$(ls -1 "$CELLAR_DIR" | sort -V | tail -n1 || true)" | |
| PROTO_DIR="$CELLAR_DIR/$PROTO_VER" | |
| PROTO_LIB_DIR="$PROTO_DIR/lib" | |
| fi | |
| echo "Using PROTO_DIR=$PROTO_DIR" | |
| echo "Using PROTO_LIB_DIR=$PROTO_LIB_DIR" | |
| [ -f "$PROTO_LIB_DIR/libprotobuf.9.dylib" ] || { | |
| [ -f "$PROTO_LIB_DIR/libprotobuf.dylib" ] && ln -sf "libprotobuf.dylib" "$PROTO_LIB_DIR/libprotobuf.9.dylib" | |
| } | |
| echo "DYLD_LIBRARY_PATH=$PROTO_LIB_DIR:${DYLD_LIBRARY_PATH:-}" >> "$GITHUB_ENV" | |
| # ---- REPAIR /opt SYMLINKS & ASSERT DYLIBS (protobuf + boost) ---- | |
| - name: Repair /opt symlinks & assert dylibs (protobuf+boost) | |
| run: | | |
| set -euo pipefail | |
| BREW_PREFIX="$(brew --prefix)" | |
| BREW_CELLAR="$(brew --cellar)" | |
| # --- Protobuf: ensure /opt points at the active keg and .9 shim exists --- | |
| PROTO_DIR="${PROTOBUF_ROOT:?missing PROTOBUF_ROOT}" | |
| # Normalize to real keg path | |
| if [ -L "$PROTO_DIR" ]; then PROTO_DIR="$(realpath "$PROTO_DIR")"; fi | |
| if [ ! -L "$BREW_PREFIX/opt/protobuf261" ] || [ "$(realpath "$BREW_PREFIX/opt/protobuf261" || true)" != "$PROTO_DIR" ]; then | |
| sudo rm -rf "$BREW_PREFIX/opt/protobuf261" || true | |
| sudo ln -s "$PROTO_DIR" "$BREW_PREFIX/opt/protobuf261" | |
| fi | |
| for BASE in "$PROTO_DIR/lib" "$BREW_PREFIX/opt/protobuf261/lib"; do | |
| [ -d "$BASE" ] || continue | |
| for LIB in protobuf protobuf-lite; do | |
| if [ ! -f "$BASE/lib${LIB}.9.dylib" ] && [ -f "$BASE/lib${LIB}.dylib" ]; then | |
| ln -sf "lib${LIB}.dylib" "$BASE/lib${LIB}.9.dylib" | |
| fi | |
| done | |
| done | |
| echo "Protobuf opt target -> $(readlink $BREW_PREFIX/opt/protobuf261 || true)" | |
| ls -ld "$BREW_PREFIX/opt/protobuf261" || true | |
| ls -l "$BREW_PREFIX/opt/protobuf261/lib" | sed -n '1,80p' || true | |
| # --- Boost: relink /opt to the REAL keg (avoid self-loop) --- | |
| KEG_DIR="$(ls -1d "$BREW_CELLAR/boost176"/* 2>/dev/null | sort -V | tail -n1 || true)" | |
| [ -n "$KEG_DIR" ] || { echo "::error::No boost176 keg found"; exit 1; } | |
| BOOST_KEG="$KEG_DIR" | |
| if [ ! -L "$BREW_PREFIX/opt/boost176" ] || [ "$(realpath "$BREW_PREFIX/opt/boost176" || true)" != "$BOOST_KEG" ]; then | |
| sudo rm -rf "$BREW_PREFIX/opt/boost176" || true | |
| sudo ln -s "$BOOST_KEG" "$BREW_PREFIX/opt/boost176" | |
| fi | |
| BOOST_LIB_DIR="$BOOST_KEG/lib" | |
| for L in filesystem program_options thread chrono system; do | |
| PLAIN="$BOOST_LIB_DIR/libboost_${L}.dylib" | |
| if [ ! -e "$PLAIN" ]; then | |
| CAND="$(ls -1 "$BOOST_LIB_DIR"/libboost_${L}*.dylib 2>/dev/null | grep -v '/libboost_'"$L"'\.dylib$' | sort -V | tail -n1 || true)" | |
| [ -n "$CAND" ] && [ "$(basename "$CAND")" = "libboost_${L}.dylib" ] || { [ -n "$CAND" ] && ln -sf "$(basename "$CAND")" "$PLAIN"; } | |
| fi | |
| done | |
| echo "Boost opt target -> $(readlink $BREW_PREFIX/opt/boost176 || true)" | |
| ls -ld "$BREW_PREFIX/opt/boost176" || true | |
| ls -l "$BOOST_LIB_DIR" | grep -E 'boost_(filesystem|program_options|thread|chrono|system).*dylib' || true | |
| # Export final DYLD path from real kegs | |
| echo "DYLD_LIBRARY_PATH=$PROTO_DIR/lib:$BOOST_LIB_DIR:${DYLD_LIBRARY_PATH:-}" >> "$GITHUB_ENV" | |
| - name: make .dmg | |
| run: | | |
| set -euo pipefail | |
| # Guard: verify plain-name Boost dylibs from the REAL keg (not /opt, to avoid loops) | |
| BREW_CELLAR="$(brew --cellar)" | |
| KEG_DIR="$(ls -1d "$BREW_CELLAR/boost176"/* 2>/dev/null | sort -V | tail -n1 || true)" | |
| BOOST_LIB_DIR="${BOOST_LIBS:-${BOOST_LIBRARYDIR:-${KEG_DIR}/lib}}" | |
| for L in filesystem program_options thread chrono system; do | |
| test -f "$BOOST_LIB_DIR/libboost_${L}.dylib" || { | |
| echo "::error::Missing $BOOST_LIB_DIR/libboost_${L}.dylib" | |
| ls -lah "$BOOST_LIB_DIR" | sed -n '1,200p' || true | |
| exit 1 | |
| } | |
| done | |
| # Final guard for the exact path macdeployqtplus wants: | |
| test -f /opt/homebrew/opt/protobuf261/lib/libprotobuf.9.dylib | |
| echo "Boost dylibs OK in $BOOST_LIB_DIR" | |
| echo "DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH" | |
| make deploy | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: verge-macos15 | |
| path: | | |
| *.dmg | |
| macos14: | |
| runs-on: macos-14 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Cache Homebrew downloads | |
| id: cache-brew-14 | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/Library/Caches/Homebrew | |
| /Users/runner/Library/Caches/Homebrew | |
| key: brew-cache-${{ runner.os }}-mac14-v1 | |
| restore-keys: | | |
| brew-cache-${{ runner.os }}-mac14- | |
| - name: Cache ccache | |
| id: cache-ccache-14 | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.ccache | |
| key: "ccache-${{ runner.os }}-mac14-v1-${{ hashFiles('configure.ac', 'Makefile.am', 'src/**', 'build-aux/**') }}" | |
| restore-keys: | | |
| ccache-${{ runner.os }}-mac14-v1- | |
| - name: Cache Protobuf tap build (macOS 14) | |
| id: cache-protobuf14 | |
| uses: actions/cache@v4 | |
| with: | |
| path: /opt/homebrew/Cellar/protobuf261 | |
| key: protobuf261-${{ runner.os }}-mac14-v1-${{ hashFiles('depends/homebrew-formulas/protobuf261.rb') }} | |
| restore-keys: | | |
| protobuf261-${{ runner.os }}-mac14- | |
| - name: git config credential.helper | |
| run: git config credential.helper | |
| - name: get previous xcode and switch to it | |
| run: ls -la /Applications/Xcode* && sudo xcode-select -switch /Applications/Xcode_16.1.app | |
| - name: Brew install base dependencies | |
| run: | | |
| brew install --quiet python@3 || brew link --overwrite python@3 | |
| brew install --quiet automake autoconf berkeley-db@4 pkg-config miniupnpc zeromq libtool qt@5 gperf qrencode librsvg ccache | |
| - name: Brew link dependencies | |
| run: brew link qt@5 berkeley-db@4 | |
| - name: check cellar for openssl | |
| run: cd /opt/homebrew/Cellar/openssl@3/ && ls | |
| - name: Configure ccache | |
| env: | |
| CCACHE_DIR: ~/.ccache | |
| run: | | |
| mkdir -p ~/.ccache | |
| echo 'max_size = 2G' > ~/.ccache/ccache.conf | |
| echo 'compression = true' >> ~/.ccache/ccache.conf | |
| ccache -z || true | |
| echo "CC=ccache clang" >> "$GITHUB_ENV" | |
| echo "CXX=ccache clang++" >> "$GITHUB_ENV" | |
| - name: Show current directory | |
| run: | | |
| pwd | |
| git rev-parse --short HEAD | |
| ls -lah | |
| ls -lah depends || true | |
| ls -lah depends/homebrew-formulas || true | |
| - name: Create local tap & stage protobuf261.rb | |
| run: | | |
| set -euo pipefail | |
| brew tap-new vergecurrency/local | |
| TAP_DIR="$(brew --repo vergecurrency/local)" | |
| echo "Tap dir: $TAP_DIR" | |
| mkdir -p "$TAP_DIR/Formula" | |
| FORMULA_LOCAL="depends/homebrew-formulas/protobuf261.rb" | |
| if [ -f "$FORMULA_LOCAL" ]; then | |
| echo "Using local $FORMULA_LOCAL" | |
| cp "$FORMULA_LOCAL" "$TAP_DIR/Formula/" | |
| else | |
| echo "Local formula not found; fetching from repo" | |
| REF="${GITHUB_REF_NAME:-master}" | |
| URL="https://raw.githubusercontent.com/vergecurrency/verge/${REF}/depends/homebrew-formulas/protobuf261.rb" | |
| echo "Fetching: $URL" | |
| curl -fL "$URL" -o "$TAP_DIR/Formula/protobuf261.rb" | |
| fi | |
| echo "Current taps:" | |
| brew tap | |
| - name: Install protobuf261 via tap | |
| run: brew install vergecurrency/local/protobuf261 | |
| - name: Stage boost176.rb into existing tap | |
| run: | | |
| set -euo pipefail | |
| if ! brew tap | grep -q '^vergecurrency/local$'; then | |
| brew tap-new vergecurrency/local | |
| fi | |
| TAP_DIR="$(brew --repo vergecurrency/local)" | |
| echo "Tap dir: $TAP_DIR" | |
| mkdir -p "$TAP_DIR/Formula" | |
| FORMULA_LOCAL="depends/homebrew-formulas/boost176.rb" | |
| if [ -f "$FORMULA_LOCAL" ]; then | |
| echo "Using local $FORMULA_LOCAL" | |
| cp "$FORMULA_LOCAL" "$TAP_DIR/Formula/" | |
| else | |
| echo "Local formula not found; fetching from repo" | |
| REF="${GITHUB_REF_NAME:-master}" | |
| URL="https://raw.githubusercontent.com/vergecurrency/verge/${REF}/depends/homebrew-formulas/boost176.rb" | |
| echo "Fetching: $URL" | |
| curl -fL "$URL" -o "$TAP_DIR/Formula/boost176.rb" | |
| fi | |
| echo "Current taps:" | |
| brew tap | |
| - name: Install boost176 via tap | |
| run: brew install vergecurrency/local/boost176 | |
| - name: Resolve Boost 1.76 env (robust) | |
| run: | | |
| set -euo pipefail | |
| BREW_PREFIX="$(brew --prefix)" | |
| BREW_CELLAR="$(brew --cellar)" | |
| if [ -d "$BREW_PREFIX/opt/boost176/lib" ]; then | |
| BOOST_DIR="$BREW_PREFIX/opt/boost176" | |
| else | |
| CELLAR_DIR="$BREW_CELLAR/boost176" | |
| if [ -d "$CELLAR_DIR" ]; then | |
| BOOST_VER="$(ls -1 "$CELLAR_DIR" | sort -V | tail -n1 || true)" | |
| if [ -n "${BOOST_VER:-}" ] && [ -d "$CELLAR_DIR/$BOOST_VER/lib" ]; then | |
| BOOST_DIR="$CELLAR_DIR/$BOOST_VER" | |
| fi | |
| fi | |
| fi | |
| echo "Resolved BOOST_DIR=${BOOST_DIR:-<empty>}" | |
| if [ -z "${BOOST_DIR:-}" ] || [ ! -d "$BOOST_DIR/lib" ]; then | |
| echo "::error::Boost libdir not found." | |
| exit 1 | |
| fi | |
| echo "BOOST_ROOT=$BOOST_DIR" >> "$GITHUB_ENV" | |
| echo "BOOST_INCLUDEDIR=$BOOST_DIR/include" >> "$GITHUB_ENV" | |
| echo "BOOST_LIBRARYDIR=$BOOST_DIR/lib" >> "$GITHUB_ENV" | |
| echo "CPPFLAGS=-I$BOOST_DIR/include" >> "$GITHUB_ENV" | |
| echo "LDFLAGS=-L$BOOST_DIR/lib" >> "$GITHUB_ENV" | |
| - name: Resolve Protobuf 2.6.1 env (robust) | |
| run: | | |
| set -euo pipefail | |
| BREW_PREFIX="$(brew --prefix)" | |
| BREW_CELLAR="$(brew --cellar)" | |
| if [ -d "$BREW_PREFIX/opt/protobuf261/lib" ]; then | |
| PROTO_DIR="$BREW_PREFIX/opt/protobuf261" | |
| else | |
| CELLAR_DIR="$BREW_CELLAR/protobuf261" | |
| if [ -d "$CELLAR_DIR" ]; then | |
| PROTO_VER="$(ls -1 "$CELLAR_DIR" | sort -V | tail -n1 || true)" | |
| if [ -n "${PROTO_VER:-}" ] && [ -d "$CELLAR_DIR/$PROTO_VER/lib" ]; then | |
| PROTO_DIR="$CELLAR_DIR/$PROTO_VER" | |
| fi | |
| fi | |
| fi | |
| echo "Resolved PROTO_DIR=${PROTO_DIR:-<empty>}" | |
| if [ -z "${PROTO_DIR:-}" ] || [ ! -d "$PROTO_DIR/lib" ]; then | |
| echo "::error::Protobuf libdir not found." | |
| exit 1 | |
| fi | |
| echo "PROTOBUF_ROOT=$PROTO_DIR" >> "$GITHUB_ENV" | |
| echo "PROTOBUF_INCLUDEDIR=$PROTO_DIR/include" >> "$GITHUB_ENV" | |
| echo "PROTOBUF_LIBRARYDIR=$PROTO_DIR/lib" >> "$GITHUB_ENV" | |
| echo "PKG_CONFIG_PATH=$PROTO_DIR/lib/pkgconfig:${PKG_CONFIG_PATH:-}" >> "$GITHUB_ENV" | |
| echo "PATH=$PROTO_DIR/bin:$(brew --prefix)/bin:$(brew --prefix)/sbin:${PATH:-/usr/bin:/bin}" >> "$GITHUB_ENV" | |
| BOOST_INC="${BOOST_INCLUDEDIR:-}" | |
| BOOST_LIB="${BOOST_LIBRARYDIR:-}" | |
| echo "CPPFLAGS=${BOOST_INC:+-I$BOOST_INC }-I$PROTO_DIR/include" >> "$GITHUB_ENV" | |
| echo "LDFLAGS=${BOOST_LIB:+-L$BOOST_LIB }-L$PROTO_DIR/lib" >> "$GITHUB_ENV" | |
| [ -z "${BOOST_INC}" ] || test -f "$BOOST_INC/boost/filesystem.hpp" || { echo "::warning::boost/filesystem.hpp not found under $BOOST_INC"; ls -R "$BOOST_INC" | head -n 50 || true; } | |
| ls -lah "$PROTO_DIR/lib" | grep -E 'libprotobuf|protobuf' || true | |
| - name: which clang/xcode | |
| run: clang --version | |
| - name: Auto generate | |
| run: ./autogen.sh | |
| - name: configure | |
| run: | | |
| ./configure \ | |
| --disable-bench \ | |
| --disable-tests \ | |
| --disable-dependency-tracking \ | |
| --disable-werror \ | |
| --with-gui \ | |
| --with-boost="${BOOST_ROOT}" \ | |
| --with-boost-libdir="${BOOST_LIBRARYDIR}" \ | |
| --bindir="$(pwd)/release/bin" \ | |
| --libdir="$(pwd)/release/lib" \ | |
| --with-openssl-dir=/opt/homebrew/Cellar/openssl@3/3.6.0 \ | |
| --with-libevent-dir=/opt/homebrew/Cellar/libevent/2.1.12_1 | |
| - name: make | |
| run: make -j4 | |
| # ---- SAFE BOOST SETUP (no /opt relink, no self-loop symlinks) ---- | |
| - name: Prepare Boost dylib names for macdeploy (safe, no opt relink) | |
| run: | | |
| set -euo pipefail | |
| BREW_CELLAR="$(brew --cellar)" | |
| # Prefer real keg path | |
| if [ -n "${BOOST_LIBRARYDIR:-}" ] && [ -d "$BOOST_LIBRARYDIR" ]; then | |
| BOOST_LIB_DIR="$BOOST_LIBRARYDIR" | |
| else | |
| KEG_DIR="$(ls -1d "$BREW_CELLAR/boost176"/* 2>/dev/null | sort -V | tail -n1 || true)" | |
| [ -n "$KEG_DIR" ] || { echo "::error::No boost176 keg found in $BREW_CELLAR/boost176"; exit 1; } | |
| BOOST_LIB_DIR="$KEG_DIR/lib" | |
| fi | |
| echo "Using BOOST_LIB_DIR=$BOOST_LIB_DIR" | |
| fix_boost_symlink() { | |
| local base="$1" | |
| local plain="$BOOST_LIB_DIR/libboost_${base}.dylib" | |
| if [ ! -e "$plain" ]; then | |
| # choose a candidate that is NOT the plain name to avoid self-loop | |
| CAND="$(ls -1 "$BOOST_LIB_DIR"/libboost_${base}*.dylib 2>/dev/null | \ | |
| grep -Ev '/libboost_'"$base"'\.dylib$' | sort -V | tail -n1 || true)" | |
| if [ -n "$CAND" ]; then | |
| [ "$(basename "$CAND")" = "libboost_${base}.dylib" ] || ln -sf "$(basename "$CAND")" "$plain" | |
| fi | |
| fi | |
| ( ls -l "$BOOST_LIB_DIR"/libboost_${base}*.dylib || true ) | sed -n '1,10p' | |
| } | |
| for L in filesystem program_options thread chrono system; do | |
| fix_boost_symlink "$L" | |
| done | |
| echo "DYLD_LIBRARY_PATH=$BOOST_LIB_DIR:${DYLD_LIBRARY_PATH:-}" >> "$GITHUB_ENV" | |
| echo "BOOST_LIBS=$BOOST_LIB_DIR" >> "$GITHUB_ENV" | |
| - name: Prepare Protobuf dylib for macdeploy | |
| run: | | |
| set -euo pipefail | |
| BREW_PREFIX="$(brew --prefix)" | |
| BREW_CELLAR="$(brew --cellar)" | |
| if [ -n "${PROTOBUF_LIBRARYDIR:-}" ] && [ -d "$PROTOBUF_LIBRARYDIR" ]; then | |
| PROTO_DIR="$(dirname "$PROTOBUF_LIBRARYDIR")" | |
| PROTO_LIB_DIR="$PROTOBUF_LIBRARYDIR" | |
| elif [ -d "$BREW_PREFIX/opt/protobuf261/lib" ]; then | |
| PROTO_DIR="$BREW_PREFIX/opt/protobuf261" | |
| PROTO_LIB_DIR="$PROTO_DIR/lib" | |
| else | |
| CELLAR_DIR="$BREW_CELLAR/protobuf261" | |
| PROTO_VER="$(ls -1 "$CELLAR_DIR" | sort -V | tail -n1 || true)" | |
| PROTO_DIR="$CELLAR_DIR/$PROTO_VER" | |
| PROTO_LIB_DIR="$PROTO_DIR/lib" | |
| fi | |
| echo "Using PROTO_DIR=$PROTO_DIR" | |
| echo "Using PROTO_LIB_DIR=$PROTO_LIB_DIR" | |
| [ -f "$PROTO_LIB_DIR/libprotobuf.9.dylib" ] || { | |
| [ -f "$PROTO_LIB_DIR/libprotobuf.dylib" ] && ln -sf "libprotobuf.dylib" "$PROTO_LIB_DIR/libprotobuf.9.dylib" | |
| } | |
| echo "DYLD_LIBRARY_PATH=$PROTO_LIB_DIR:${DYLD_LIBRARY_PATH:-}" >> "$GITHUB_ENV" | |
| # ---- REPAIR /opt SYMLINKS & ASSERT DYLIBS (protobuf + boost) ---- | |
| - name: Repair /opt symlinks & assert dylibs (protobuf+boost) | |
| run: | | |
| set -euo pipefail | |
| BREW_PREFIX="$(brew --prefix)" | |
| BREW_CELLAR="$(brew --cellar)" | |
| # --- Protobuf: ensure /opt points at the active keg and .9 shim exists --- | |
| PROTO_DIR="${PROTOBUF_ROOT:?missing PROTOBUF_ROOT}" | |
| # Normalize to real keg path | |
| if [ -L "$PROTO_DIR" ]; then PROTO_DIR="$(realpath "$PROTO_DIR")"; fi | |
| if [ ! -L "$BREW_PREFIX/opt/protobuf261" ] || [ "$(realpath "$BREW_PREFIX/opt/protobuf261" || true)" != "$PROTO_DIR" ]; then | |
| sudo rm -rf "$BREW_PREFIX/opt/protobuf261" || true | |
| sudo ln -s "$PROTO_DIR" "$BREW_PREFIX/opt/protobuf261" | |
| fi | |
| for BASE in "$PROTO_DIR/lib" "$BREW_PREFIX/opt/protobuf261/lib"; do | |
| [ -d "$BASE" ] || continue | |
| for LIB in protobuf protobuf-lite; do | |
| if [ ! -f "$BASE/lib${LIB}.9.dylib" ] && [ -f "$BASE/lib${LIB}.dylib" ]; then | |
| ln -sf "lib${LIB}.dylib" "$BASE/lib${LIB}.9.dylib" | |
| fi | |
| done | |
| done | |
| echo "Protobuf opt target -> $(readlink $BREW_PREFIX/opt/protobuf261 || true)" | |
| ls -ld "$BREW_PREFIX/opt/protobuf261" || true | |
| ls -l "$BREW_PREFIX/opt/protobuf261/lib" | sed -n '1,80p' || true | |
| # --- Boost: relink /opt to the REAL keg (avoid self-loop) --- | |
| KEG_DIR="$(ls -1d "$BREW_CELLAR/boost176"/* 2>/dev/null | sort -V | tail -n1 || true)" | |
| [ -n "$KEG_DIR" ] || { echo "::error::No boost176 keg found"; exit 1; } | |
| BOOST_KEG="$KEG_DIR" | |
| if [ ! -L "$BREW_PREFIX/opt/boost176" ] || [ "$(realpath "$BREW_PREFIX/opt/boost176" || true)" != "$BOOST_KEG" ]; then | |
| sudo rm -rf "$BREW_PREFIX/opt/boost176" || true | |
| sudo ln -s "$BOOST_KEG" "$BREW_PREFIX/opt/boost176" | |
| fi | |
| BOOST_LIB_DIR="$BOOST_KEG/lib" | |
| for L in filesystem program_options thread chrono system; do | |
| PLAIN="$BOOST_LIB_DIR/libboost_${L}.dylib" | |
| if [ ! -e "$PLAIN" ]; then | |
| CAND="$(ls -1 "$BOOST_LIB_DIR"/libboost_${L}*.dylib 2>/dev/null | grep -v '/libboost_'"$L"'\.dylib$' | sort -V | tail -n1 || true)" | |
| [ -n "$CAND" ] && [ "$(basename "$CAND")" = "libboost_${L}.dylib" ] || { [ -n "$CAND" ] && ln -sf "$(basename "$CAND")" "$PLAIN"; } | |
| fi | |
| done | |
| echo "Boost opt target -> $(readlink $BREW_PREFIX/opt/boost176 || true)" | |
| ls -ld "$BREW_PREFIX/opt/boost176" || true | |
| ls -l "$BOOST_LIB_DIR" | grep -E 'boost_(filesystem|program_options|thread|chrono|system).*dylib' || true | |
| # Export final DYLD path from real kegs | |
| echo "DYLD_LIBRARY_PATH=$PROTO_DIR/lib:$BOOST_LIB_DIR:${DYLD_LIBRARY_PATH:-}" >> "$GITHUB_ENV" | |
| - name: make .dmg | |
| run: | | |
| set -euo pipefail | |
| # Guard: verify plain-name Boost dylibs from the REAL keg (not /opt, to avoid loops) | |
| BREW_CELLAR="$(brew --cellar)" | |
| KEG_DIR="$(ls -1d "$BREW_CELLAR/boost176"/* 2>/dev/null | sort -V | tail -n1 || true)" | |
| BOOST_LIB_DIR="${BOOST_LIBS:-${BOOST_LIBRARYDIR:-${KEG_DIR}/lib}}" | |
| for L in filesystem program_options thread chrono system; do | |
| test -f "$BOOST_LIB_DIR/libboost_${L}.dylib" || { | |
| echo "::error::Missing $BOOST_LIB_DIR/libboost_${L}.dylib" | |
| ls -lah "$BOOST_LIB_DIR" | sed -n '1,200p' || true | |
| exit 1 | |
| } | |
| done | |
| # Final guard for the exact path macdeployqtplus wants: | |
| test -f /opt/homebrew/opt/protobuf261/lib/libprotobuf.9.dylib | |
| echo "Boost dylibs OK in $BOOST_LIB_DIR" | |
| echo "DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH" | |
| make deploy | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: verge-macos14 | |
| path: | | |
| *.dmg | |
| ubuntu24: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Cache depends artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| depends/built | |
| depends/x86_64-linux-gnu | |
| depends/work | |
| depends/sources | |
| key: depends-${{ runner.os }}-linux64-${{ hashFiles('depends/packages/**', 'depends/hosts/**', 'depends/**.mk', 'depends/Makefile') }} | |
| restore-keys: | | |
| depends-${{ runner.os }}-linux64- | |
| - name: Cache ccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.ccache | |
| key: ccache-${{ runner.os }}-linux64-${{ hashFiles('configure.ac', 'Makefile.am', 'src/**', 'build-aux/**') }} | |
| restore-keys: | | |
| ccache-${{ runner.os }}-linux64- | |
| - name: Update apt repos | |
| run: sudo apt-get update | |
| - name: Install base dependencies | |
| run: | | |
| sudo apt-get install -y \ | |
| build-essential xutils-dev libtool gperf autotools-dev automake pkg-config \ | |
| bsdmainutils libattr1-dev make automake bison byacc cmake curl \ | |
| g++-multilib binutils-gold python3 ccache | |
| - name: Enable ccache wrappers | |
| run: | | |
| sudo /usr/sbin/update-ccache-symlinks || true | |
| echo "/usr/lib/ccache" >> "$GITHUB_PATH" | |
| - name: Configure ccache | |
| env: | |
| CCACHE_DIR: ~/.ccache | |
| run: | | |
| mkdir -p ~/.ccache | |
| echo 'max_size = 2G' > ~/.ccache/ccache.conf | |
| echo 'compression = true' >> ~/.ccache/ccache.conf | |
| ccache -z || true | |
| - name: Export toolchain env | |
| run: | | |
| echo "CC=gcc" >> "$GITHUB_ENV" | |
| echo "CXX=g++" >> "$GITHUB_ENV" | |
| echo "AR=ar" >> "$GITHUB_ENV" | |
| echo "RANLIB=ranlib" >> "$GITHUB_ENV" | |
| echo "STRIP=strip" >> "$GITHUB_ENV" | |
| echo "CCACHE_DIR=$HOME/.ccache" >> "$GITHUB_ENV" | |
| - name: Build depends | |
| run: | | |
| cd depends/ | |
| make -j4 HOST=x86_64-linux-gnu | |
| - name: Auto generate | |
| run: ./autogen.sh | |
| - name: configure | |
| run: | | |
| CONFIG_SITE=$PWD/depends/x86_64-linux-gnu/share/config.site \ | |
| ./configure --enable-scrypt-sse2 --disable-bench --disable-tests \ | |
| --disable-dependency-tracking --disable-werror \ | |
| --prefix="$(pwd)/depends/x86_64-linux-gnu" \ | |
| --bindir="$(pwd)/release/bin" \ | |
| --libdir="$(pwd)/release/lib" | |
| - name: make | |
| run: make -j4 | |
| - name: strip | |
| run: | | |
| cd ./src && strip verged verge-cli verge-tx | |
| cd ./qt && strip verge-qt | |
| - name: ccache stats | |
| env: | |
| CCACHE_DIR: ~/.ccache | |
| run: ccache -s || true | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: verge-ubuntu24 | |
| path: | | |
| ./src/verged | |
| ./src/verge-cli | |
| ./src/verge-tx | |
| ./src/qt/verge-qt | |
| ubuntu22: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Cache depends artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| depends/built | |
| depends/x86_64-linux-gnu | |
| depends/work | |
| depends/sources | |
| key: depends-${{ runner.os }}-linux64-22-${{ hashFiles('depends/packages/**', 'depends/hosts/**', 'depends/**.mk', 'depends/Makefile') }} | |
| restore-keys: | | |
| depends-${{ runner.os }}-linux64-22- | |
| - name: Cache ccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.ccache | |
| key: ccache-${{ runner.os }}-linux64-22-${{ hashFiles('configure.ac', 'Makefile.am', 'src/**', 'build-aux/**') }} | |
| restore-keys: | | |
| ccache-${{ runner.os }}-linux64-22- | |
| - name: Update apt repos | |
| run: sudo apt-get update | |
| - name: Install base dependencies | |
| run: | | |
| sudo apt-get install -y \ | |
| build-essential xutils-dev libtool gperf autotools-dev automake pkg-config \ | |
| bsdmainutils libattr1-dev make automake bison byacc cmake curl \ | |
| g++-multilib binutils-gold python3 ccache | |
| - name: Enable ccache wrappers | |
| run: | | |
| sudo /usr/sbin/update-ccache-symlinks || true | |
| echo "/usr/lib/ccache" >> "$GITHUB_PATH" | |
| - name: Configure ccache | |
| env: | |
| CCACHE_DIR: ~/.ccache | |
| run: | | |
| mkdir -p ~/.ccache | |
| echo 'max_size = 2G' > ~/.ccache/ccache.conf | |
| echo 'compression = true' >> ~/.ccache/ccache.conf | |
| ccache -z || true | |
| - name: Build depends | |
| run: | | |
| cd depends/ | |
| make -j4 HOST=x86_64-linux-gnu | |
| - name: Auto generate | |
| run: ./autogen.sh | |
| - name: configure | |
| run: | | |
| CONFIG_SITE=$PWD/depends/x86_64-linux-gnu/share/config.site \ | |
| ./configure --enable-scrypt-sse2 --disable-bench --disable-tests \ | |
| --disable-dependency-tracking --disable-werror \ | |
| --prefix="$(pwd)/depends/x86_64-linux-gnu" \ | |
| --bindir="$(pwd)/release/bin" \ | |
| --libdir="$(pwd)/release/lib" | |
| - name: make | |
| run: make -j4 | |
| - name: strip | |
| run: | | |
| cd ./src && strip verged verge-cli verge-tx | |
| cd ./qt && strip verge-qt | |
| - name: ccache stats | |
| env: | |
| CCACHE_DIR: ~/.ccache | |
| run: ccache -s || true | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: verge-ubuntu22 | |
| path: | | |
| ./src/verged | |
| ./src/verge-cli | |
| ./src/verge-tx | |
| ./src/qt/verge-qt | |
| windows32-ubuntu22: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Cache depends artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| depends/built | |
| depends/i686-w64-mingw32 | |
| depends/work | |
| depends/sources | |
| key: depends-${{ runner.os }}-mingw32-32-v7-${{ hashFiles('depends/packages/**', 'depends/hosts/**', 'depends/**.mk', 'depends/Makefile') }} | |
| restore-keys: | | |
| depends-${{ runner.os }}-mingw32-32-v7- | |
| - name: Cache ccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.ccache | |
| key: ccache-${{ runner.os }}-mingw32-32-v7-${{ hashFiles('configure.ac', 'Makefile.am', 'src/**', 'build-aux/**') }} | |
| restore-keys: | | |
| ccache-${{ runner.os }}-mingw32-32-v7- | |
| - name: Update apt repos | |
| run: sudo apt-get update | |
| - name: Install base dependencies | |
| run: | | |
| sudo apt-get install -y \ | |
| build-essential libtool gperf autotools-dev automake pkg-config \ | |
| bsdmainutils curl git bison byacc python3 nsis ccache \ | |
| g++-mingw-w64-i686 mingw-w64-i686-dev | |
| - name: Force Posix | |
| run: sudo update-alternatives --set i686-w64-mingw32-g++ /usr/bin/i686-w64-mingw32-g++-posix | |
| - name: Build depends for MingW32 Cross Compile | |
| run: | | |
| unset STRIP || true | |
| cd depends/ | |
| timeout 45m make HOST=i686-w64-mingw32 -j2 STRIP=strip V=1 --output-sync=recurse | |
| - name: Auto generate | |
| run: ./autogen.sh | |
| - name: Export toolchain env (target) | |
| run: | | |
| echo "CC=i686-w64-mingw32-gcc-posix" >> "$GITHUB_ENV" | |
| echo "CXX=i686-w64-mingw32-g++-posix" >> "$GITHUB_ENV" | |
| echo "AR=i686-w64-mingw32-ar" >> "$GITHUB_ENV" | |
| echo "RANLIB=i686-w64-mingw32-ranlib" >> "$GITHUB_ENV" | |
| echo "WINDRES=i686-w64-mingw32-windres" >> "$GITHUB_ENV" | |
| echo "PKG_CONFIG=i686-w64-mingw32-pkg-config" >> "$GITHUB_ENV" | |
| echo "CCACHE_BASEDIR=$GITHUB_WORKSPACE" >> "$GITHUB_ENV" | |
| echo "CCACHE_DIR=$HOME/.ccache" >> "$GITHUB_ENV" | |
| echo "ARFLAGS=rcs" >> "$GITHUB_ENV" | |
| - name: Configure ccache | |
| env: | |
| CCACHE_DIR: ~/.ccache | |
| run: | | |
| mkdir -p ~/.ccache | |
| echo 'max_size = 2G' > ~/.ccache/ccache.conf | |
| echo 'compression = true' >> ~/.ccache/ccache.conf | |
| ccache -z || true | |
| - name: configure | |
| run: | | |
| CONFIG_SITE=$PWD/depends/i686-w64-mingw32/share/config.site \ | |
| ./configure --prefix=/ --disable-bench --disable-tests | |
| - name: make (serialized, verbose, heartbeat) | |
| env: | |
| STRIP: "" | |
| V: "1" | |
| run: | | |
| set -e | |
| ( while true; do | |
| echo "---- heartbeat $(date) ----" | |
| ps -ef | egrep 'mingw|windres|ar|ranlib|ld|gcc|g\+\+|libtool' | grep -v egrep || true | |
| sleep 60 | |
| done ) & | |
| HB=$! | |
| timeout 60m make -j1 --output-sync=recurse | |
| kill "$HB" || true | |
| - name: strip (cross) | |
| run: | | |
| cd ./src && i686-w64-mingw32-strip verged.exe verge-cli.exe verge-tx.exe | |
| cd ./qt && i686-w64-mingw32-strip verge-qt.exe | |
| - name: ccache stats | |
| env: | |
| CCACHE_DIR: ~/.ccache | |
| run: ccache -s || true | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: verge-windows32-ubuntu22 | |
| path: | | |
| /home/runner/work/verge/verge/src/verged.exe | |
| /home/runner/work/verge/verge/src/verge-cli.exe | |
| /home/runner/work/verge/verge/src/verge-tx.exe | |
| /home/runner/work/verge/verge/src/qt/verge-qt.exe | |
| windows64-ubuntu22: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Cache depends artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| depends/built | |
| depends/x86_64-w64-mingw32 | |
| depends/work | |
| depends/sources | |
| key: depends-${{ runner.os }}-mingw64-64-v7-${{ hashFiles('depends/packages/**', 'depends/hosts/**', 'depends/**.mk', 'depends/Makefile') }} | |
| restore-keys: | | |
| depends-${{ runner.os }}-mingw64-64-v7- | |
| - name: Cache ccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.ccache | |
| key: ccache-${{ runner.os }}-mingw64-64-v7-${{ hashFiles('configure.ac', 'Makefile.am', 'src/**', 'build-aux/**') }} | |
| restore-keys: | | |
| ccache-${{ runner.os }}-mingw64-64-v7- | |
| - name: Update apt repos | |
| run: sudo apt-get update | |
| - name: Install base dependencies | |
| run: | | |
| sudo apt-get install -y \ | |
| build-essential libtool gperf autotools-dev automake pkg-config \ | |
| bsdmainutils curl git bison byacc python3 nsis ccache \ | |
| g++-mingw-w64-x86-64 | |
| - name: Force Posix | |
| run: sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix | |
| - name: Build depends for MingW64 Cross Compile | |
| run: | | |
| unset STRIP || true | |
| cd depends/ | |
| timeout 45m make HOST=x86_64-w64-mingw32 -j2 STRIP=strip V=1 --output-sync=recurse | |
| - name: Auto generate | |
| run: ./autogen.sh | |
| - name: Export toolchain env | |
| run: | | |
| echo "CC=x86_64-w64-mingw32-gcc-posix" >> "$GITHUB_ENV" | |
| echo "CXX=x86_64-w64-mingw32-g++-posix" >> "$GITHUB_ENV" | |
| echo "AR=x86_64-w64-mingw32-ar" >> "$GITHUB_ENV" | |
| echo "RANLIB=x86_64-w64-mingw32-ranlib" >> "$GITHUB_ENV" | |
| echo "WINDRES=x86_64-w64-mingw32-windres" >> "$GITHUB_ENV" | |
| echo "PKG_CONFIG=x86_64-w64-mingw32-pkg-config" >> "$GITHUB_ENV" | |
| echo "CCACHE_BASEDIR=$GITHUB_WORKSPACE" >> "$GITHUB_ENV" | |
| echo "CCACHE_DIR=$HOME/.ccache" >> "$GITHUB_ENV" | |
| echo "ARFLAGS=rcs" >> "$GITHUB_ENV" | |
| - name: Configure ccache | |
| env: | |
| CCACHE_DIR: ~/.ccache | |
| run: | | |
| mkdir -p ~/.ccache | |
| echo 'max_size = 2G' > ~/.ccache/ccache.conf | |
| echo 'compression = true' >> ~/.ccache/ccache.conf | |
| ccache -z || true | |
| - name: configure | |
| run: | | |
| CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site \ | |
| ./configure --enable-scrypt-sse2 --prefix=/ --disable-bench --disable-tests | |
| - name: make (serialized, verbose, heartbeat) | |
| env: | |
| STRIP: "" | |
| V: "1" | |
| run: | | |
| set -e | |
| ( while true; do | |
| echo "---- heartbeat $(date) ----" | |
| ps -ef | egrep 'mingw|windres|ar|ranlib|ld|gcc|g\+\+|libtool' | grep -v egrep || true | |
| sleep 60 | |
| done ) & | |
| HB=$! | |
| timeout 60m make -j1 --output-sync=recurse | |
| kill "$HB" || true | |
| - name: strip (cross) | |
| run: | | |
| cd ./src && x86_64-w64-mingw32-strip verged.exe verge-cli.exe verge-tx.exe | |
| cd ./qt && x86_64-w64-mingw32-strip verge-qt.exe | |
| - name: ccache stats | |
| env: | |
| CCACHE_DIR: ~/.ccache | |
| run: ccache -s || true | |
| - name: Dump config.log on failure | |
| if: failure() | |
| run: test -f config.log && sed -n '1,200p' config.log || true | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: verge-windows64bit-ubuntu22 | |
| path: | | |
| /home/runner/work/verge/verge/src/verged.exe | |
| /home/runner/work/verge/verge/src/verge-cli.exe | |
| /home/runner/work/verge/verge/src/verge-tx.exe | |
| /home/runner/work/verge/verge/src/qt/verge-qt.exe |