Backend agnostic read-only DB wrapper framework #2525
This file contains 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
# Nimbus | |
# Copyright (c) 2021-2024 Status Research & Development GmbH | |
# Licensed under either of | |
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or | |
# http://www.apache.org/licenses/LICENSE-2.0) | |
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or | |
# http://opensource.org/licenses/MIT) | |
# at your option. This file may not be copied, modified, or distributed except | |
# according to those terms. | |
name: Nimbus verified proxy CI | |
on: | |
push: | |
paths: | |
- '.github/workflows/nimbus_verified_proxy.yml' | |
- 'nimbus_verified_proxy/**' | |
- '!nimbus_verified_proxy/**.md' | |
- '!nimbus_verified_proxy/docs/**' | |
- 'nimbus/db/**' | |
- 'vendor/**' | |
- 'Makefile' | |
- 'nimbus.nimble' | |
pull_request: | |
paths: | |
- '.github/workflows/nimbus_verified_proxy.yml' | |
- 'nimbus_verified_proxy/**' | |
- '!nimbus_verified_proxy/**.md' | |
- '!nimbus_verified_proxy/docs/**' | |
- 'nimbus/db/**' | |
- 'vendor/**' | |
- 'Makefile' | |
- 'nimbus.nimble' | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
max-parallel: 20 | |
matrix: | |
target: | |
- os: linux | |
cpu: amd64 | |
# - os: linux | |
# cpu: i386 | |
- os: macos | |
cpu: amd64 | |
- os: windows | |
cpu: amd64 | |
include: | |
- target: | |
os: linux | |
builder: ubuntu-20.04 | |
- target: | |
os: macos | |
builder: macos-12 | |
- target: | |
os: windows | |
builder: windows-latest | |
defaults: | |
run: | |
shell: bash | |
name: '${{ matrix.target.os }}-${{ matrix.target.cpu }}' | |
runs-on: ${{ matrix.builder }} | |
steps: | |
- name: Checkout nimbus-eth1 | |
uses: actions/checkout@v4 | |
- name: Derive environment variables | |
run: | | |
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then | |
PLATFORM=x64 | |
else | |
PLATFORM=x86 | |
fi | |
echo "PLATFORM=${PLATFORM}" >> $GITHUB_ENV | |
# libminiupnp / natpmp | |
if [[ '${{ runner.os }}' == 'Linux' && '${{ matrix.target.cpu }}' == 'i386' ]]; then | |
export CFLAGS="${CFLAGS} -m32 -mno-adx" | |
echo "CFLAGS=${CFLAGS}" >> $GITHUB_ENV | |
fi | |
ncpu='' | |
case '${{ runner.os }}' in | |
'Linux') | |
ncpu=$(nproc) | |
;; | |
'macOS') | |
ncpu=$(sysctl -n hw.ncpu) | |
;; | |
'Windows') | |
ncpu=${NUMBER_OF_PROCESSORS} | |
;; | |
esac | |
[[ -z "$ncpu" || $ncpu -le 0 ]] && ncpu=1 | |
echo "ncpu=${ncpu}" >> $GITHUB_ENV | |
- name: Install build dependencies (Linux i386) | |
if: runner.os == 'Linux' && matrix.target.cpu == 'i386' | |
run: | | |
sudo dpkg --add-architecture i386 | |
sudo apt-fast update -qq | |
sudo DEBIAN_FRONTEND='noninteractive' apt-fast install \ | |
--no-install-recommends -yq gcc-multilib g++-multilib \ | |
libz-dev:i386 libbz2-dev:i386 libssl-dev:i386 libpcre3-dev:i386 | |
mkdir -p external/bin | |
cat << EOF > external/bin/gcc | |
#!/bin/bash | |
exec $(which gcc) -m32 "\$@" | |
EOF | |
cat << EOF > external/bin/g++ | |
#!/bin/bash | |
exec $(which g++) -m32 "\$@" | |
EOF | |
chmod 755 external/bin/gcc external/bin/g++ | |
echo '${{ github.workspace }}/external/bin' >> $GITHUB_PATH | |
- name: Install build dependencies (Macos) | |
# Some home brew modules were reported missing | |
if: runner.os == 'Macos' | |
run: | | |
HOMEBREW_NO_INSTALL_CLEANUP=1 brew install gnu-getopt | |
brew link --force gnu-getopt | |
- name: Restore llvm-mingw (Windows) from cache | |
if: runner.os == 'Windows' | |
id: windows-mingw-cache | |
uses: actions/cache@v4 | |
with: | |
path: external/mingw-${{ matrix.target.cpu }} | |
key: 'mingw-llvm-17-${{ matrix.target.cpu }}' | |
- name: Restore Nim DLLs dependencies (Windows) from cache | |
if: runner.os == 'Windows' | |
id: windows-dlls-cache | |
uses: actions/cache@v4 | |
with: | |
path: external/dlls-${{ matrix.target.cpu }} | |
key: 'dlls-${{ matrix.target.cpu }}-verified-proxy' | |
- name: Install llvm-mingw dependency (Windows) | |
if: > | |
steps.windows-mingw-cache.outputs.cache-hit != 'true' && | |
runner.os == 'Windows' | |
run: | | |
mkdir -p external | |
MINGW_BASE="https://github.com/mstorsjo/llvm-mingw/releases/download/20230905" | |
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then | |
MINGW_URL="$MINGW_BASE/llvm-mingw-20230905-ucrt-x86_64.zip" | |
ARCH=64 | |
else | |
MINGW_URL="$MINGW_BASE/llvm-mingw-20230905-ucrt-i686.zip" | |
ARCH=32 | |
fi | |
curl -L "$MINGW_URL" -o "external/mingw-${{ matrix.target.cpu }}.zip" | |
7z x -y "external/mingw-${{ matrix.target.cpu }}.zip" -oexternal/mingw-${{ matrix.target.cpu }}/ | |
mv external/mingw-${{ matrix.target.cpu }}/**/* ./external/mingw-${{ matrix.target.cpu }} | |
- name: Install DLLs dependencies (Windows) | |
if: > | |
steps.windows-dlls-cache.outputs.cache-hit != 'true' && | |
runner.os == 'Windows' | |
run: | | |
DLLPATH=external/dlls-${{ matrix.target.cpu }} | |
mkdir -p external | |
curl -L "https://nim-lang.org/download/windeps.zip" -o external/windeps.zip | |
7z x -y external/windeps.zip -o"$DLLPATH" | |
- name: Path to cached dependencies (Windows) | |
if: > | |
runner.os == 'Windows' | |
run: | | |
echo '${{ github.workspace }}'"/external/mingw-${{ matrix.target.cpu }}/bin" >> $GITHUB_PATH | |
echo '${{ github.workspace }}'"/external/dlls-${{ matrix.target.cpu }}" >> $GITHUB_PATH | |
- name: Get latest nimbus-build-system commit hash | |
id: versions | |
run: | | |
getHash() { | |
git ls-remote "https://github.com/$1" "${2:-HEAD}" | cut -f 1 | |
} | |
nbsHash=$(getHash status-im/nimbus-build-system) | |
echo "nimbus_build_system=$nbsHash" >> $GITHUB_OUTPUT | |
- name: Restore prebuilt Nim from cache | |
id: nim-cache | |
uses: actions/cache@v4 | |
with: | |
path: NimBinCache | |
key: 'nim-${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ steps.versions.outputs.nimbus_build_system }}-verified-proxy' | |
- name: Build Nim and Nimbus-eth1 dependencies | |
run: | | |
make V=1 -j${ncpu} ARCH_OVERRIDE=${PLATFORM} CI_CACHE=NimBinCache update-from-ci | |
- name: Run verified proxy tests (Windows) | |
if: runner.os == 'Windows' | |
run: | | |
gcc --version | |
DEFAULT_MAKE_FLAGS="-j${ncpu}" | |
mingw32-make ${DEFAULT_MAKE_FLAGS} nimbus_verified_proxy libverifproxy | |
build/nimbus_verified_proxy.exe --help | |
mingw32-make ${DEFAULT_MAKE_FLAGS} nimbus-verified-proxy-test | |
- name: Run verified proxy tests (Linux) | |
if: runner.os == 'Linux' | |
run: | | |
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" | |
DEFAULT_MAKE_FLAGS="-j${ncpu}" | |
env CC=gcc make ${DEFAULT_MAKE_FLAGS} nimbus_verified_proxy libverifproxy | |
build/nimbus_verified_proxy --help | |
# CC is needed to select correct compiler 32/64 bit | |
env CC=gcc CXX=g++ make ${DEFAULT_MAKE_FLAGS} nimbus-verified-proxy-test | |
- name: Run verified proxy tests (Macos) | |
if: runner.os == 'Macos' | |
run: | | |
DEFAULT_MAKE_FLAGS="-j${ncpu}" | |
make ${DEFAULT_MAKE_FLAGS} nimbus_verified_proxy libverifproxy | |
build/nimbus_verified_proxy --help | |
# "-static" option will not work for osx unless static system libraries are provided | |
make ${DEFAULT_MAKE_FLAGS} nimbus-verified-proxy-test | |
lint: | |
name: "Lint verified proxy" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 # In PR, has extra merge commit: ^1 = PR, ^2 = base | |
- name: Check nph formatting | |
# Pin nph to a specific version to avoid sudden style differences. | |
# Updating nph version should be accompanied with running the new | |
# version on the fluffy directory. | |
run: | | |
VERSION="v0.6.0" | |
ARCHIVE="nph-linux_x64.tar.gz" | |
curl -L "https://github.com/arnetheduck/nph/releases/download/${VERSION}/${ARCHIVE}" -o ${ARCHIVE} | |
tar -xzf ${ARCHIVE} | |
./nph nimbus_verified_proxy/ | |
git diff --exit-code | |
- name: Check copyright year | |
if: ${{ !cancelled() }} && github.event_name == 'pull_request' | |
run: | | |
bash scripts/check_copyright_year.sh |