name: Continuous Integration on: push: paths-ignore: - '**/*.md' pull_request: paths-ignore: - 'doc/**' - 'contrib/**' - '**/*.md' jobs: build: name: ${{ matrix.name }} env: MAKEJOBS: "-j3" CHECK_DOC: "0" CCACHE_SIZE: "100M" CCACHE_TEMPDIR: /tmp/.ccache-temp CCACHE_COMPRESS: "1" PYTHON_DEBUG: "1" CACHE_NONCE: "1" WINEDEBUG: fixme-all SDK_URL: https://depends.dogecoincore.org BIONIC_LIEF_WHL: lief-0.12.3-cp36-cp36m-linux_x86_64.whl strategy: fail-fast: false matrix: name: - aarch64-linux - aarch64-linux-experimental - armhf-linux - i686-linux - i686-win - x86_64-linux-dbg - x86_64-linux-nowallet - x86_64-macos - x86_64-win - x86_64-win-experimental - x86_64-linux-experimental include: - name: i686-linux host: i686-pc-linux-gnu os: ubuntu-20.04 packages: g++-multilib bc python3-zmq run-bench: true test-script: | make check $MAKEJOBS VERBOSE=1 qa/pull-tester/install-deps.sh qa/pull-tester/rpc-tests.py --coverage check-security: true check-symbols: true dep-opts: "NO_QT=1" config-opts: "--enable-zmq --enable-glibc-back-compat LDFLAGS=-static-libstdc++" goal: install - name: armhf-linux host: arm-linux-gnueabihf os: ubuntu-20.04 packages: g++-arm-linux-gnueabihf qemu-user-static qemu-user run-bench: false test-script: | qemu-arm -E LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib/ /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 src/test/test_dogecoin check-security: true check-symbols: true dep-opts: "NO_QT=1" config-opts: "--enable-glibc-back-compat LDFLAGS=-static-libstdc++" goal: install - name: aarch64-linux-experimental host: aarch64-linux-gnu os: ubuntu-20.04 packages: g++-aarch64-linux-gnu qemu-user-static qemu-user run-bench: false test-script: | qemu-aarch64 -E LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib/ /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 src/test/test_dogecoin check-security: true check-symbols: false dep-opts: "NO_QT=1" config-opts: "--enable-experimental --with-armv8-crypto --with-armv82-crypto --enable-zmq --enable-glibc-back-compat LDFLAGS=-static-libstdc++ --enable-c++14" goal: install - name: aarch64-linux host: aarch64-linux-gnu os: ubuntu-20.04 packages: g++-aarch64-linux-gnu qemu-user-static qemu-user run-bench: false test-script: | qemu-aarch64 -E LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib/ /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 src/test/test_dogecoin check-security: true check-symbols: true dep-opts: "NO_QT=1" config-opts: "--enable-zmq --enable-glibc-back-compat LDFLAGS=-static-libstdc++" goal: install - name: x86_64-linux-nowallet host: x86_64-unknown-linux-gnu os: ubuntu-20.04 packages: python3 run-bench: true test-script: | make check $MAKEJOBS VERBOSE=1 check-security: true check-symbols: true dep-opts: "NO_WALLET=1" config-opts: "--with-gui=qt5 --enable-glibc-back-compat --disable-wallet LDFLAGS=-static-libstdc++" goal: install - name: x86_64-linux-dbg host: x86_64-unknown-linux-gnu os: ubuntu-20.04 packages: bc python3-zmq run-bench: true test-script: | make check $MAKEJOBS VERBOSE=1 qa/pull-tester/install-deps.sh qa/pull-tester/rpc-tests.py --coverage check-security: true check-symbols: false dep-opts: "DEBUG=1" config-opts: "--with-gui=qt5 --enable-zmq --enable-glibc-back-compat CPPFLAGS=-DDEBUG_LOCKORDER" goal: install - name: i686-win host: i686-w64-mingw32 os: ubuntu-20.04 packages: python3 nsis g++-mingw-w64-i686 wine-stable winehq-stable bc wine-binfmt binfmt-support preinstall: | sudo dpkg --add-architecture i386 OS_FLAVOR=$(cat /etc/*ease | grep UBUNTU_CODENAME | cut -d "=" -f 2) if [ ! -d "/etc/apt/keyrings" ]; then sudo mkdir -pm755 /etc/apt/keyrings; fi sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/$OS_FLAVOR/winehq-$OS_FLAVOR.sources sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt-get update sudo apt-get install -y --allow-downgrades libgd3/$OS_FLAVOR libpcre2-8-0/$OS_FLAVOR libpcre2-16-0/$OS_FLAVOR libpcre2-32-0/$OS_FLAVOR libpcre2-posix2/$OS_FLAVOR sudo apt-get purge -yq libmono* moby* mono* php* libgdiplus libpcre2-posix3 libzip4 postinstall: | sudo update-alternatives --set i686-w64-mingw32-gcc /usr/bin/i686-w64-mingw32-gcc-posix sudo update-alternatives --set i686-w64-mingw32-g++ /usr/bin/i686-w64-mingw32-g++-posix sudo update-binfmts --import /usr/share/binfmts/wine run-bench: false test-script: | make check $MAKEJOBS VERBOSE=1 check-security: true check-symbols: true dep-opts: "" config-opts: "--enable-gui=qt5" goal: install - name: x86_64-win host: x86_64-w64-mingw32 os: ubuntu-20.04 packages: python3 nsis g++-mingw-w64-x86-64 wine64 bc wine-binfmt postinstall: | sudo dpkg -s mono-runtime && sudo apt-get remove mono-runtime || echo "Very nothing to uninstall." sudo update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix sudo update-binfmts --import /usr/share/binfmts/wine run-bench: false test-script: | make check $MAKEJOBS VERBOSE=1 check-security: true check-symbols: true dep-opts: "" config-opts: "--enable-gui=qt5" goal: install - name: x86_64-win-experimental host: x86_64-w64-mingw32 os: ubuntu-20.04 packages: python3 nsis g++-mingw-w64-x86-64 wine64 bc wine-binfmt postinstall: | sudo dpkg -s mono-runtime && sudo apt-get remove mono-runtime || echo "Very nothing to uninstall." sudo update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix sudo update-binfmts --import /usr/share/binfmts/wine run-bench: false test-script: | make check $MAKEJOBS VERBOSE=1 check-security: true check-symbols: false dep-opts: "AVX2=1 MINGW=1" config-opts: "--enable-experimental --enable-scrypt-sse2 --with-intel-avx2 --with-gui=qt5 --enable-c++14" goal: install - name: x86_64-macos host: x86_64-apple-darwin11 os: ubuntu-20.04 packages: cmake imagemagick libcap-dev librsvg2-bin libz-dev libtiff-tools libtinfo5 xorriso run-bench: false check-security: true check-symbols: false dep-opts: "" config-opts: "--with-gui=qt5 --disable-tests" goal: deploy sdk: 10.11 sdk-shasum: "bec9d089ebf2e2dd59b1a811a38ec78ebd5da18cbbcd6ab39d1e59f64ac5033f" - name: x86_64-linux-experimental host: x86_64-linux-gnu os: ubuntu-20.04 packages: bc python3-zmq run-bench: true test-script: | make check $MAKEJOBS VERBOSE=1 qa/pull-tester/install-deps.sh qa/pull-tester/rpc-tests.py --coverage dep-opts: "AVX2=1" config-opts: "--enable-experimental --enable-scrypt-sse2 --with-intel-avx2 --with-gui=qt5 --enable-zmq --enable-glibc-back-compat --enable-reduce-exports --enable-c++14" goal: install runs-on: ${{ matrix.os }} steps: - name: Pre install if: ${{ matrix.preinstall }} run: ${{ matrix.preinstall }} - name: Install packages run: | sudo apt-get update sudo apt-get install build-essential libtool autotools-dev automake \ pkg-config bsdmainutils curl ca-certificates ccache rsync git \ procps bison python3 python3-pip python3-setuptools python3-wheel sudo apt-get install ${{ matrix.packages }} python3 -m pip install setuptools==70.3.0 --upgrade - name: Install custom lief wheel if: matrix.os == 'ubuntu-18.04' run: python3 -m pip install $SDK_URL/$BIONIC_LIEF_WHL - name: Install standard lief wheel if: matrix.os != 'ubuntu-18.04' run: python3 -m pip install lief - name: Post install if: ${{ matrix.postinstall }} run: ${{ matrix.postinstall }} - name: Checkout uses: actions/checkout@v4 - name: SDK cache if: ${{ matrix.sdk }} uses: actions/cache@v4 env: cache-name: sdk with: path: ./depends/sdk-sources key: ${{ matrix.name }}-${{ env.cache-name }}-${{ hashFiles('.github/workflows/ci.yml') }} - name: Install SDK if: ${{ matrix.sdk }} env: sdk-filename: MacOSX${{ matrix.sdk }}.sdk.tar.gz run: | mkdir -p ./depends/sdk-sources mkdir -p ./depends/SDKs echo "${{ matrix.sdk-shasum }} depends/sdk-sources/${{ env.sdk-filename }}" | sha256sum -c || \ curl --location --fail $SDK_URL/${{ env.sdk-filename }} -o depends/sdk-sources/${{ env.sdk-filename }} &&\ echo "${{ matrix.sdk-shasum }} depends/sdk-sources/${{ env.sdk-filename }}" | sha256sum -c tar -C depends/SDKs -xf depends/sdk-sources/${{ env.sdk-filename }} - name: Dependency cache uses: actions/cache@v4 env: cache-name: depends with: path: ./depends/built key: ${{ matrix.name }}-${{ env.cache-name }}-${{ hashFiles('depends/packages/*', '.github/workflows/ci.yml') }} - name: Build depends run: | make $MAKEJOBS -C depends HOST=${{ matrix.host }} ${{ matrix.dep-opts }} - name: CCache uses: actions/cache@v4 env: cache-name: ccache with: path: ~/.ccache key: ${{ matrix.name }}-${{ env.cache-name }}-${{ hashFiles('**/configure.ac', '.github/workflows/ci.yml') }} - name: Build Dogecoin run: | depends/${{ matrix.host }}/native/bin/ccache --max-size=$CCACHE_SIZE ./autogen.sh ./configure --prefix=`pwd`/depends/${{ matrix.host }} ${{ matrix.config-opts }} --enable-reduce-exports || ( cat config.log && false) make $MAKEJOBS ${{ matrix.goal }} || ( echo "Build failure. Verbose build follows." && make ${{ matrix.goal }} V=1 ; false ) - name: Run benchmark if: ${{ matrix.run-bench }} run: | src/bench/bench_dogecoin > ${{ matrix.name }}-bench.csv cat ${{ matrix.name }}-bench.csv - name: Run tests if: ${{ matrix.test-script }} run: ${{ matrix.test-script }} - name: Check security if: ${{ matrix.check-security }} run: make -C src check-security - name: Check symbols if: ${{ matrix.check-symbols }} run: make -C src check-symbols - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: dogecoin-${{ github.sha }}-${{ matrix.name }} path: | depends/${{ matrix.host }}/bin/dogecoin* dist/Dogecoin-Qt.app ${{ matrix.name }}-bench.csv