Engine API: Fix API version validation #2826
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
name: Nimbus CI | |
on: | |
push: | |
paths-ignore: ['doc/**', 'docs/**', '**/*.md', 'hive_integration/**', | |
'fluffy/**', '.github/workflows/fluffy.yml', | |
'nimbus_verified_proxy/**', '.github/workflows/nimbus_verified_proxy.yml', | |
] | |
# Disable `pull_request`. Experimenting with using only `push` for PRs. | |
#pull_request: | |
# paths-ignore: ['doc/**', 'docs/**', '**/*.md', 'hive_integration/**'] | |
workflow_dispatch: | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
max-parallel: 20 | |
matrix: | |
target: | |
- os: linux | |
cpu: amd64 | |
evmc: evmc | |
#- os: linux | |
# cpu: i386 | |
# evmc: evmc | |
- os: macos | |
cpu: amd64 | |
evmc: evmc | |
- os: windows | |
cpu: amd64 | |
evmc: evmc | |
- os: linux | |
cpu: amd64 | |
evmc: nimvm | |
#- os: linux | |
# cpu: i386 | |
# evmc: nimvm | |
- os: windows | |
cpu: amd64 | |
evmc: nimvm | |
- os: macos | |
cpu: amd64 | |
evmc: nimvm | |
include: | |
- target: | |
os: linux | |
builder: ubuntu-20.04 | |
- target: | |
os: macos | |
builder: macos-11 | |
- target: | |
os: windows | |
builder: windows-latest | |
defaults: | |
run: | |
shell: bash | |
name: '${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ matrix.target.evmc }}' | |
runs-on: ${{ matrix.builder }} | |
steps: | |
- name: Checkout nimbus-eth1 | |
uses: actions/checkout@v3 | |
- name: Derive environment variables | |
run: | | |
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then | |
PLATFORM=x64 | |
GOARCH=amd64 | |
USE_MIRACL=0 | |
else | |
PLATFORM=x86 | |
GOARCH=386 | |
USE_MIRACL=1 | |
fi | |
echo "PLATFORM=${PLATFORM}" >> $GITHUB_ENV | |
echo "GOARCH=${GOARCH}" >> $GITHUB_ENV | |
echo "USE_MIRACL=${USE_MIRACL}" >> $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 | |
if [[ '${{ matrix.target.evmc }}' == 'evmc' ]]; then | |
echo "ENABLE_EVMC=1" >> $GITHUB_ENV | |
else | |
echo "ENABLE_EVMC=0" >> $GITHUB_ENV | |
fi | |
- 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 rocksdb from cache (Macos/Linux) | |
if: runner.os != 'Windows' | |
id: rocksdb-cache | |
uses: actions/cache@v3 | |
with: | |
path: rocks-db-cache-${{ matrix.target.cpu }} | |
key: 'rocksdb-v2-${{ matrix.target.os }}-${{ matrix.target.cpu }}' | |
- name: Build and install rocksdb (Linux i386) | |
# no librocksdb-dev:i386 | |
if: runner.os == 'Linux' && matrix.target.cpu == 'i386' | |
run: | | |
curl -O -L -s -S https://raw.githubusercontent.com/status-im/nimbus-build-system/master/scripts/build_rocksdb.sh | |
bash build_rocksdb.sh rocks-db-cache-${{ matrix.target.cpu }} | |
- name: Install rocksdb (Linux amd64) | |
# mysterious illegal instruction error if we build our own librocksdb | |
if: runner.os == 'Linux' && matrix.target.cpu == 'amd64' | |
run: | | |
sudo apt-get -q update | |
sudo apt-get install -y librocksdb-dev libpcre3-dev | |
- name: Build and install rocksdb (Macos) | |
if: runner.os == 'Macos' | |
run: | | |
HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 brew install ccache | |
echo "/usr/local/opt/ccache/libexec" >> ${GITHUB_PATH} | |
curl -O -L -s -S https://raw.githubusercontent.com/status-im/nimbus-build-system/master/scripts/build_rocksdb.sh | |
bash build_rocksdb.sh rocks-db-cache-${{ matrix.target.cpu }} | |
- name: Restore llvm-mingw (Windows) from cache | |
if: runner.os == 'Windows' | |
id: windows-mingw-cache | |
uses: actions/cache@v3 | |
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@v3 | |
with: | |
path: external/dlls-${{ matrix.target.cpu }} | |
# according to docu, idle caches are kept for up to 7 days | |
# so change dlls# to force new cache contents (for some number #) | |
key: dlls0-${{ matrix.target.cpu }} | |
- 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: | | |
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then | |
ROCKSDBSUB=x64 | |
else | |
ROCKSDBSUB=x86 | |
fi | |
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" | |
# ROCKSDB | |
curl -L "https://github.com/status-im/nimbus-deps/releases/download/nimbus-deps/nimbus-deps.zip" -o external/nimbus-deps.zip | |
7z x -y external/nimbus-deps.zip | |
cp "./$ROCKSDBSUB/librocksdb.dll" "$DLLPATH/librocksdb.dll" | |
- 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@v3 | |
with: | |
path: NimBinCache | |
key: 'nim-${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ steps.versions.outputs.nimbus_build_system }}-${{ matrix.target.evmc }}' | |
- name: Build Nim and Nimbus-eth1 dependencies | |
run: | | |
make -j${ncpu} ARCH_OVERRIDE=${PLATFORM} CI_CACHE=NimBinCache update-from-ci | |
- name: Run nimbus-eth1 tests (Windows) | |
if: runner.os == 'Windows' | |
run: | | |
gcc --version | |
DEFAULT_MAKE_FLAGS="-j${ncpu} ENABLE_EVMC=${ENABLE_EVMC} ENABLE_VMLOWMEM=${ENABLE_VMLOWMEM}" | |
mingw32-make ${DEFAULT_MAKE_FLAGS} | |
build/nimbus.exe --help | |
# give us more space | |
find . -type d -name ".git" -exec rm -rf {} + | |
find . -type d -name "nimcache" -exec rm -rf {} + | |
mingw32-make ${DEFAULT_MAKE_FLAGS} test | |
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then | |
mingw32-make ${DEFAULT_MAKE_FLAGS} | |
fi | |
- name: Run nimbus-eth1 tests (Linux) | |
if: runner.os == 'Linux' | |
run: | | |
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" | |
DEFAULT_MAKE_FLAGS="-j${ncpu} USE_MIRACL=${USE_MIRACL} ENABLE_EVMC=${ENABLE_EVMC}" | |
env CC=gcc make ${DEFAULT_MAKE_FLAGS} | |
build/nimbus --help | |
# CC, GOARCH, and CGO_ENABLED are needed to select correct compiler 32/64 bit | |
if [[ '${{ matrix.target.cpu }}' == 'i386' ]]; then | |
# hide CI failures | |
env CC=gcc GOARCH=${GOARCH} CXX=g++ CGO_ENABLED=1 make ${DEFAULT_MAKE_FLAGS} test || true | |
else | |
# pushd vendor/nimbus-eth2 | |
# env NIMBUSEL_BINARY=../../build/nimbus NIMBUSEL_GENESIS=scripts/nimbusel_genesis.json \ | |
# ./scripts/launch_local_testnet.sh --nodes=3 --stop-at-epoch=7 \ | |
# --disable-htop --reuse-binaries --run-nimbus-el --dl-eth2 --verbose --kill-old-processes | |
# popd | |
env CC=gcc GOARCH=${GOARCH} CXX=g++ CGO_ENABLED=1 make ${DEFAULT_MAKE_FLAGS} test | |
fi | |
- name: Run nimbus-eth1 tests (Macos) | |
if: runner.os == 'Macos' | |
run: | | |
export ZERO_AR_DATE=1 # avoid timestamps in binaries | |
DEFAULT_MAKE_FLAGS="-j${ncpu} ENABLE_EVMC=${ENABLE_EVMC}" | |
make ${DEFAULT_MAKE_FLAGS} | |
build/nimbus --help | |
# "-static" option will not work for osx unless static system libraries are provided | |
# pushd vendor/nimbus-eth2 | |
# env NIMBUSEL_BINARY=../../build/nimbus NIMBUSEL_GENESIS=scripts/nimbusel_genesis.json \ | |
# ./scripts/launch_local_testnet.sh --nodes=3 --stop-at-epoch=7 \ | |
# --disable-htop --reuse-binaries --run-nimbus-el --dl-eth2 --verbose --kill-old-processes | |
# popd | |
make ${DEFAULT_MAKE_FLAGS} test | |