mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-01-10 04:15:54 +00:00
538efad325
* bump nimbus-eth2 * Remove win i386 from CI due to the fact that it is not tested in dependencies, which can lead to CI failures with updates.
277 lines
8.6 KiB
YAML
277 lines
8.6 KiB
YAML
name: fluffy CI
|
|
on:
|
|
push:
|
|
paths:
|
|
- '.github/workflows/fluffy.yml'
|
|
- 'fluffy/**'
|
|
- '!fluffy/**.md'
|
|
- '!fluffy/docs/**'
|
|
- 'nimbus/rpc/hexstrings.nim'
|
|
- 'nimbus/rpc/rpc_*.nim'
|
|
- 'vendor/**'
|
|
- 'Makefile'
|
|
- 'nimbus.nimble'
|
|
|
|
pull_request:
|
|
paths:
|
|
- '.github/workflows/fluffy.yml'
|
|
- 'fluffy/**'
|
|
- '!fluffy/**.md'
|
|
- '!fluffy/docs/**'
|
|
- 'nimbus/rpc/hexstrings.nim'
|
|
- 'nimbus/rpc/rpc_*.nim'
|
|
- 'vendor/**'
|
|
- 'Makefile'
|
|
- 'nimbus.nimble'
|
|
|
|
jobs:
|
|
# separate job so it can run concurrently with other tests
|
|
testutp:
|
|
# whole test setup runs on ubuntu so we do not need multiple arch setup here
|
|
runs-on: ubuntu-latest
|
|
# TODO: for now only push event as this way it is easier to get branch name
|
|
# to build container
|
|
if: github.event_name == 'push'
|
|
steps:
|
|
- name: Checkout nimbus-eth1
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install modprobe
|
|
run: |
|
|
sudo apt-get install -y kmod
|
|
|
|
# It is required to correctly run the simulation
|
|
- name: Load iptables6 kernel modules
|
|
run: |
|
|
sudo modprobe ip6table_filter
|
|
|
|
- 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 "::set-output name=nimbus_build_system::$nbsHash"
|
|
|
|
- name: Restore prebuilt Nim binaries from cache
|
|
id: nim-cache
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: NimBinaries
|
|
key: 'nim-linux-amd64-${{ steps.versions.outputs.nimbus_build_system }}-fluffy'
|
|
|
|
- name: Build Nim and Nimbus-eth1 dependencies
|
|
run: |
|
|
make -j${ncpu} ARCH_OVERRIDE=${PLATFORM} CI_CACHE=NimBinaries update
|
|
|
|
- name: build uTP test app container
|
|
run: |
|
|
docker build -t test-utp --no-cache --build-arg BRANCH_NAME=${{ github.ref_name }} fluffy/tools/utp_testing/docker
|
|
|
|
- name: run test app with simulator
|
|
run: |
|
|
SCENARIO="drop-rate --delay=15ms --bandwidth=10Mbps --queue=25 --rate_to_client=10 --rate_to_server=10" docker-compose -f fluffy/tools/utp_testing/docker/docker-compose.yml up -d
|
|
|
|
- name: wait 5 seconds for containers to start
|
|
run: |
|
|
sleep 5
|
|
|
|
- name: check containers
|
|
run: |
|
|
docker ps -a
|
|
|
|
- name: run uTP test
|
|
run: |
|
|
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib"
|
|
DEFAULT_MAKE_FLAGS="-j${ncpu}"
|
|
env CC=gcc CXX=g++ make ${DEFAULT_MAKE_FLAGS} utp-test
|
|
|
|
- name: Stop containers
|
|
if: always()
|
|
run: docker-compose -f fluffy/tools/utp_testing/docker/docker-compose.yml down
|
|
|
|
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
|
|
shell: bash
|
|
- target:
|
|
os: macos
|
|
builder: macos-11
|
|
shell: bash
|
|
- target:
|
|
os: windows
|
|
builder: windows-latest
|
|
shell: msys2 {0}
|
|
|
|
defaults:
|
|
run:
|
|
shell: ${{ matrix.shell }}
|
|
|
|
name: '${{ matrix.target.os }}-${{ matrix.target.cpu }}'
|
|
runs-on: ${{ matrix.builder }}
|
|
steps:
|
|
- name: Checkout nimbus-eth1
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Derive environment variables
|
|
shell: bash
|
|
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
|
|
mkdir -p external/bin
|
|
cat << EOF > external/bin/gcc
|
|
#!/bin/bash
|
|
exec $(which gcc) -m32 -mno-adx "\$@"
|
|
EOF
|
|
cat << EOF > external/bin/g++
|
|
#!/bin/bash
|
|
exec $(which g++) -m32 -mno-adx "\$@"
|
|
EOF
|
|
chmod 755 external/bin/gcc external/bin/g++
|
|
echo "${{ github.workspace }}/external/bin" >> $GITHUB_PATH
|
|
|
|
# Required for running the local testnet script
|
|
- name: Install build dependencies (MacOS)
|
|
if: runner.os == 'macOS'
|
|
run: |
|
|
brew install gnu-getopt
|
|
brew link --force gnu-getopt
|
|
|
|
- name: MSYS2 (Windows amd64)
|
|
if: runner.os == 'Windows' && matrix.target.cpu == 'amd64'
|
|
uses: msys2/setup-msys2@v2
|
|
with:
|
|
path-type: inherit
|
|
install: >-
|
|
base-devel
|
|
git
|
|
mingw-w64-x86_64-toolchain
|
|
|
|
- name: Restore Nim DLLs dependencies (Windows) from cache
|
|
if: runner.os == 'Windows'
|
|
id: windows-dlls-cache
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: external/dlls-${{ matrix.target.cpu }}
|
|
key: 'dlls-${{ matrix.target.cpu }}-fluffy'
|
|
|
|
- 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/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 "::set-output name=nimbus_build_system::$nbsHash"
|
|
|
|
- name: Restore prebuilt Nim binaries from cache
|
|
id: nim-cache
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: NimBinaries
|
|
key: 'nim-${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ steps.versions.outputs.nimbus_build_system }}-fluffy'
|
|
|
|
- name: Build Nim and Nimbus-eth1 dependencies
|
|
run: |
|
|
make -j${ncpu} ARCH_OVERRIDE=${PLATFORM} CI_CACHE=NimBinaries update
|
|
|
|
- name: Run fluffy tests (Windows)
|
|
if: runner.os == 'Windows'
|
|
run: |
|
|
gcc --version
|
|
DEFAULT_MAKE_FLAGS="-j${ncpu}"
|
|
mingw32-make ${DEFAULT_MAKE_FLAGS} fluffy
|
|
mingw32-make ${DEFAULT_MAKE_FLAGS} fluffy-tools
|
|
build/fluffy.exe --help
|
|
mingw32-make ${DEFAULT_MAKE_FLAGS} fluffy-test
|
|
|
|
- name: Run fluffy 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} fluffy
|
|
env CC=gcc make ${DEFAULT_MAKE_FLAGS} fluffy-tools
|
|
build/fluffy --help
|
|
# CC is needed to select correct compiler 32/64 bit
|
|
env CC=gcc CXX=g++ make ${DEFAULT_MAKE_FLAGS} fluffy-test
|
|
|
|
- name: Run fluffy tests (Macos)
|
|
if: runner.os == 'Macos'
|
|
run: |
|
|
DEFAULT_MAKE_FLAGS="-j${ncpu}"
|
|
make ${DEFAULT_MAKE_FLAGS} fluffy
|
|
make ${DEFAULT_MAKE_FLAGS} fluffy-tools
|
|
build/fluffy --help
|
|
# "-static" option will not work for osx unless static system libraries are provided
|
|
make ${DEFAULT_MAKE_FLAGS} fluffy-test
|
|
|
|
- name: Run fluffy testnet
|
|
run: |
|
|
./fluffy/scripts/launch_local_testnet.sh
|