diff --git a/.github/actions/nimbus-build-system/action.yml b/.github/actions/nimbus-build-system/action.yml deleted file mode 100644 index b78c5596..00000000 --- a/.github/actions/nimbus-build-system/action.yml +++ /dev/null @@ -1,169 +0,0 @@ -# Adapted from: -# https://github.com/status-im/nimbus-eth2/blob/stable/.github/workflows/ci.yml - -name: Setup Nimbus Build System -inputs: - os: - description: "Operating system to build for" - required: true - cpu: - description: "CPU to build for" - default: "amd64" - nim_branch: - description: "Nim version" - default: "version-1-6" - shell: - description: "Shell to run commands in" - default: "bash --noprofile --norc -e -o pipefail" -runs: - using: "composite" - steps: - - name: APT (Linux amd64) - if: inputs.os == 'linux' && inputs.cpu == 'amd64' - shell: ${{ inputs.shell }} {0} - run: | - sudo apt-fast update -qq - sudo DEBIAN_FRONTEND='noninteractive' apt-fast install \ - --no-install-recommends -yq lcov - - - name: APT (Linux i386) - if: inputs.os == 'linux' && inputs.cpu == 'i386' - shell: ${{ inputs.shell }} {0} - 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 - - - name: Homebrew (macOS) - if: inputs.os == 'macos' - shell: ${{ inputs.shell }} {0} - run: | - brew install libomp - - - name: MSYS2 (Windows amd64) - if: inputs.os == 'windows' && inputs.cpu == 'amd64' - uses: msys2/setup-msys2@v2 - with: - msystem: UCRT64 - install: > - base-devel - git - mingw-w64-ucrt-x86_64-toolchain - mingw-w64-ucrt-x86_64-cmake - mingw-w64-ucrt-x86_64-ntldd-git - - - name: MSYS2 (Windows i386) - if: inputs.os == 'windows' && inputs.cpu == 'i386' - uses: msys2/setup-msys2@v2 - with: - msystem: MINGW32 - install: > - base-devel - git - mingw-w64-i686-toolchain - mingw-w64-i686-cmake - mingw-w64-i686-ntldd-git - - - name: Derive environment variables - shell: ${{ inputs.shell }} {0} - run: | - quote () { - local quoted=${1//\'/\'\\\'\'}; - printf "'%s'" "$quoted" - } - - if [[ '${{ inputs.cpu }}' == 'amd64' ]]; then - PLATFORM=x64 - else - PLATFORM=x86 - fi - echo "PLATFORM=${PLATFORM}" >> ${GITHUB_ENV} - - # Stack usage on Linux amd64 - if [[ '${{ inputs.os }}' == 'linux' && '${{ inputs.cpu }}' == 'amd64' ]]; then - NIMFLAGS="${NIMFLAGS} -d:limitStackUsage" - echo "NIMFLAGS=${NIMFLAGS}" >> $GITHUB_ENV - fi - - # Disable ADX on Linux i386 - if [[ '${{ inputs.os }}' == 'linux' && '${{ inputs.cpu }}' == 'i386' ]]; then - CFLAGS="${CFLAGS} -m32 -mno-adx" - echo "CFLAGS=${CFLAGS}" >> ${GITHUB_ENV} - CXXFLAGS="${CXXFLAGS} -m32 -mno-adx" - echo "CXXFLAGS=${CXXFLAGS}" >> ${GITHUB_ENV} - 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 "$(pwd)/external/bin" >> ${GITHUB_PATH} - # --passC:'-m32 -mno-adx' is redundant but harmless, and can be - # helpful when reviewing build output with increased verbosity - NIMFLAGS="${NIMFLAGS} $(quote "--passC:'-m32 -mno-adx' -d:LeopardCmakeFlags='-DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$(pwd)/external/bin/gcc -DCMAKE_CXX_COMPILER=$(pwd)/external/bin/g++'")" - echo "NIMFLAGS=${NIMFLAGS}" >> $GITHUB_ENV - fi - - # Disable ADX on Windows i386 - if [[ '${{ inputs.os }}' == 'windows' && '${{ inputs.cpu }}' == 'i386' ]]; then - CFLAGS="${CFLAGS} -mno-adx" - echo "CFLAGS=${CFLAGS}" >> ${GITHUB_ENV} - CXXFLAGS="${CXXFLAGS} -mno-adx" - echo "CXXFLAGS=${CXXFLAGS}" >> ${GITHUB_ENV} - NIMFLAGS="${NIMFLAGS} --passC:-mno-adx" - echo "NIMFLAGS=${NIMFLAGS}" >> $GITHUB_ENV - fi - - # Enable OpenMP on macOS - if [[ '${{ inputs.os }}' == 'macos' ]]; then - libomp_lib_dir="$(brew --prefix)/opt/libomp/lib" - # See https://github.com/actions/virtual-environments/pull/5819 - llvm_dir="$(ls -d $(brew --prefix)/opt/llvm* | tail -1)" - llvm_bin_dir="${llvm_dir}/bin" - llvm_lib_dir="${llvm_dir}/lib" - echo "${llvm_bin_dir}" >> ${GITHUB_PATH} - echo "LDFLAGS=${LDFLAGS} -L${libomp_lib_dir} -L${llvm_lib_dir} -Wl,-rpath,${llvm_lib_dir}" >> ${GITHUB_ENV} - NIMFLAGS="${NIMFLAGS} $(quote "-d:LeopardCmakeFlags='-DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=${llvm_bin_dir}/clang -DCMAKE_CXX_COMPILER=${llvm_bin_dir}/clang++' -d:LeopardExtraCompilerlags='-fopenmp' -d:LeopardExtraLinkerFlags='-fopenmp -L${libomp_lib_dir}'")" - echo "NIMFLAGS=${NIMFLAGS}" >> $GITHUB_ENV - fi - - # Use all available CPUs for build process - ncpu="" - case '${{ inputs.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: Restore Nim toolchain binaries from cache - id: nim-cache - uses: actions/cache@v3 - with: - path: NimBinaries - key: ${{ inputs.os }}-${{ inputs.cpu }}-nim-${{ inputs.nim_branch }}-cache-${{ env.cache_nonce }}-${{ github.run_id }} - restore-keys: ${{ inputs.os }}-${{ inputs.cpu }}-nim-${{ inputs.nim_branch }}-cache-${{ env.cache_nonce }} - - - name: Set NIM_COMMIT - shell: ${{ inputs.shell }} {0} - run: echo "NIM_COMMIT=${{ inputs.nim_branch }}" >> ${GITHUB_ENV} - - - name: Build Nim and Codex dependencies - shell: ${{ inputs.shell }} {0} - run: | - make -j${ncpu} CI_CACHE=NimBinaries ARCH_OVERRIDE=${PLATFORM} QUICK_AND_DIRTY_COMPILER=1 update - echo - ./env.sh nim --version - diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4fddce10..96472c13 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,102 +5,30 @@ on: - main pull_request: workflow_dispatch: -env: - cache_nonce: 0 # Allows for easily busting actions/cache caches +permissions: {} jobs: - build: + test: + runs-on: ${{ matrix.os }} strategy: matrix: - os: [linux, macos, windows] - include: - - os: linux - builder: ubuntu-latest - shell: bash --noprofile --norc -e -o pipefail - - os: macos - builder: macos-latest - shell: bash --noprofile --norc -e -o pipefail - - os: windows - builder: windows-latest - shell: msys2 - - defaults: - run: - shell: ${{ matrix.shell }} {0} - - name: '${{ matrix.os }}' - runs-on: ${{ matrix.builder }} - timeout-minutes: 80 + os: [ubuntu-latest, macOS-latest, windows-latest] steps: - - name: Checkout sources - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Setup Nimbus Build System - uses: ./.github/actions/nimbus-build-system - with: - os: ${{ matrix.os }} - shell: ${{ matrix.shell }} - - - name: Unit tests - run: make -j${ncpu} test - - - name: Start Ethereum node with Codex contracts - working-directory: vendor/dagger-contracts - run: | - if [[ '${{ matrix.os }}' == 'windows' ]]; then - export PATH="${PATH}:/c/program files/nodejs" - fi - npm install - npm start & - - - name: Contract tests - run: make -j${ncpu} testContracts - - - name: Integration tests - run: make -j${ncpu} testIntegration - - coverage: - continue-on-error: true - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Setup Nimbus Build System - uses: ./.github/actions/nimbus-build-system - with: - os: linux - - - name: Generate coverage data - run: make -j${ncpu} coverage - shell: bash - - - name: Upload coverage data to Codecov - uses: codecov/codecov-action@v3 - with: - directory: ./coverage/ - fail_ci_if_error: true - files: ./coverage/coverage.f.info - flags: unittests - name: codecov-umbrella - verbose: true - - nim_1_2: - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Setup Nimbus Build System - uses: ./.github/actions/nimbus-build-system - with: - os: linux - nim_branch: version-1-2 - - - name: Unit tests - run: make -j${ncpu} test + - uses: actions/checkout@v2 + - uses: iffy/install-nim@v4 + with: + version: binary:stable + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Install dependencies + run: nimble install -d -y + - name: Unit Tests + run: nimble test + - name: Integration Tests + run: | + cd vendor/dagger-contracts + git submodule update --init . + npm install + npm start & + cd ../../ + nimble testContracts + nimble testIntegration