Skip to content

add codesign to mac in pr/commit checker too #724

add codesign to mac in pr/commit checker too

add codesign to mac in pr/commit checker too #724

Workflow file for this run

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
- name: Ad-hoc sign Verge binaries (macOS 15)
run: |
set -euo pipefail
echo "Searching for Verge binaries to sign…"
find . -type f \( \
-name "verge-qt" -o \
-name "verged" -o \
-name "verge-cli" -o \
-name "verge-tx" \
\) -print -exec codesign --force --sign - {} \;
# If Qt app exists, sign the whole bundle (important)
if ls *.app >/dev/null 2>&1; then
for APP in *.app; do
echo "Ad-hoc signing app bundle: $APP"
codesign --force --deep --sign - "$APP"
done
fi
echo "Verifying signatures:"
find . -type f \( \
-name "verge-qt" -o \
-name "verged" -o \
-name "verge-cli" -o \
-name "verge-tx" \
\) -exec codesign -vv {} \; || true
- 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
- name: Ad-hoc sign Verge binaries (macOS 14)
run: |
set -euo pipefail
echo "Searching for Verge binaries to sign…"
find . -type f \( \
-name "verge-qt" -o \
-name "verged" -o \
-name "verge-cli" -o \
-name "verge-tx" \
\) -print -exec codesign --force --sign - {} \;
if ls *.app >/dev/null 2>&1; then
for APP in *.app; do
echo "Ad-hoc signing app bundle: $APP"
codesign --force --deep --sign - "$APP"
done
fi
echo "Verifying signatures:"
find . -type f \( \
-name "verge-qt" -o \
-name "verged" -o \
-name "verge-cli" -o \
-name "verge-tx" \
\) -exec codesign -vv {} \; || true
- 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