You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
752 lines
28 KiB
752 lines
28 KiB
name: Blockscout
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
- production-arbitrum
|
|
- production-core
|
|
- production-eth-sepolia
|
|
- production-filecoin
|
|
- production-fuse
|
|
- production-optimism
|
|
- production-immutable
|
|
- production-iota
|
|
- production-lukso
|
|
- production-rsk
|
|
- production-sokol
|
|
- production-suave
|
|
- production-xdai
|
|
- production-zkevm
|
|
- production-zksync
|
|
- staging-l2
|
|
paths-ignore:
|
|
- 'CHANGELOG.md'
|
|
- '**/README.md'
|
|
- 'docker/*'
|
|
- 'docker-compose/*'
|
|
pull_request:
|
|
types: [opened, synchronize, reopened, labeled]
|
|
branches:
|
|
- master
|
|
|
|
env:
|
|
MIX_ENV: test
|
|
OTP_VERSION: ${{ github.ref_name == '9256/merge' && '26.2.5.1' || vars.OTP_VERSION }}
|
|
ELIXIR_VERSION: ${{ github.ref_name == '9256/merge' && '1.16.3' || vars.ELIXIR_VERSION }}
|
|
ACCOUNT_AUTH0_DOMAIN: "blockscoutcom.us.auth0.com"
|
|
|
|
jobs:
|
|
matrix-builder:
|
|
name: Build matrix
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
|
steps:
|
|
- id: set-matrix
|
|
run: |
|
|
echo "matrix=$(node -e '
|
|
|
|
// Add/remove CI matrix chain types here
|
|
const defaultChainTypes = ["default"];
|
|
const chainTypes = ["ethereum", "polygon_zkevm", "rsk", "stability", "filecoin", "optimism", "arbitrum", "celo", "zetachain", "zksync", "shibarium"];
|
|
const extraChainTypes = ["suave", "polygon_edge"];
|
|
|
|
// Chain type matrix we use in master branch
|
|
const allChainTypes = [].concat(defaultChainTypes, chainTypes, extraChainTypes);
|
|
|
|
const labels = ${{ github.event_name == 'pull_request' && toJson(github.event.pull_request.labels.*.name) || '[]' }};
|
|
const ciLabels = labels.filter(label => label.startsWith("ci:"));
|
|
const labeledChainTypes = [].concat(
|
|
defaultChainTypes.filter(chainType => ciLabels.includes("ci:" + chainType)),
|
|
chainTypes.filter(chainType => ciLabels.includes("ci:all") || ciLabels.includes("ci:" + chainType)),
|
|
extraChainTypes.filter(chainType => ciLabels.includes("ci:" + chainType))
|
|
);
|
|
|
|
// Chain type matrix we use in PRs to master branch
|
|
const ciChainTypes = labeledChainTypes.length > 0 ? labeledChainTypes : defaultChainTypes;
|
|
|
|
const matrix = { "chain-type": ${{ github.event_name == 'pull_request' && 'ciChainTypes' || 'allChainTypes' }} };
|
|
console.log(JSON.stringify(matrix));
|
|
')" >> $GITHUB_OUTPUT
|
|
|
|
build-and-cache:
|
|
name: Build and Cache deps
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: "ELIXIR_VERSION.lock"
|
|
run: echo "${ELIXIR_VERSION}" > ELIXIR_VERSION.lock
|
|
|
|
- name: "OTP_VERSION.lock"
|
|
run: echo "${OTP_VERSION}" > OTP_VERSION.lock
|
|
|
|
- name: Restore Mix Deps Cache
|
|
uses: actions/cache@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- name: Conditionally build Mix deps cache
|
|
if: steps.deps-cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
mix local.hex --force
|
|
mix local.rebar --force
|
|
mix deps.get
|
|
mix deps.compile --skip-umbrella-children
|
|
|
|
- name: Restore Explorer NPM Cache
|
|
uses: actions/cache@v4
|
|
id: explorer-npm-cache
|
|
with:
|
|
path: apps/explorer/node_modules
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-${{ hashFiles('apps/explorer/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-
|
|
|
|
- name: Conditionally build Explorer NPM Cache
|
|
if: steps.explorer-npm-cache.outputs.cache-hit != 'true'
|
|
run: npm install
|
|
working-directory: apps/explorer
|
|
|
|
- name: Restore Blockscout Web NPM Cache
|
|
uses: actions/cache@v4
|
|
id: blockscoutweb-npm-cache
|
|
with:
|
|
path: apps/block_scout_web/assets/node_modules
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-${{ hashFiles('apps/block_scout_web/assets/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-
|
|
|
|
- name: Conditionally build Blockscout Web NPM Cache
|
|
if: steps.blockscoutweb-npm-cache.outputs.cache-hit != 'true'
|
|
run: npm install
|
|
working-directory: apps/block_scout_web/assets
|
|
|
|
credo:
|
|
name: Credo
|
|
runs-on: ubuntu-latest
|
|
needs: build-and-cache
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Restore Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- run: mix credo
|
|
|
|
check_formatted:
|
|
name: Code formatting checks
|
|
runs-on: ubuntu-latest
|
|
needs: build-and-cache
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Restore Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- run: mix format --check-formatted
|
|
|
|
dialyzer:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.matrix-builder.outputs.matrix) }}
|
|
name: Dialyzer static analysis
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build-and-cache
|
|
- matrix-builder
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Restore Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- name: Restore Dialyzer Cache
|
|
uses: actions/cache@v4
|
|
id: dialyzer-cache
|
|
with:
|
|
path: priv/plts
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-${{ matrix.chain-type }}-dialyzer-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-${{ matrix.chain-type }}-dialyzer-mixlockhash-
|
|
|
|
- name: Conditionally build Dialyzer Cache
|
|
if: steps.dialyzer-cache.output.cache-hit != 'true'
|
|
run: |
|
|
mkdir -p priv/plts
|
|
mix dialyzer --plt
|
|
env:
|
|
CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }}
|
|
|
|
- name: Run Dialyzer
|
|
run: mix dialyzer --halt-exit-status
|
|
env:
|
|
CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }}
|
|
|
|
gettext:
|
|
name: Missing translation keys check
|
|
runs-on: ubuntu-latest
|
|
needs: build-and-cache
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Restore Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- run: |
|
|
mix gettext.extract --merge | tee stdout.txt
|
|
! grep "Wrote " stdout.txt
|
|
working-directory: "apps/block_scout_web"
|
|
sobelow:
|
|
name: Sobelow security analysis
|
|
runs-on: ubuntu-latest
|
|
needs: build-and-cache
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- name: Scan explorer for vulnerabilities
|
|
run: mix sobelow --config
|
|
working-directory: "apps/explorer"
|
|
- name: Scan block_scout_web for vulnerabilities
|
|
run: mix sobelow --config
|
|
working-directory: "apps/block_scout_web"
|
|
|
|
cspell:
|
|
name: Check spelling
|
|
runs-on: ubuntu-latest
|
|
needs: build-and-cache
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- name: Restore Explorer NPM Cache
|
|
uses: actions/cache@v4
|
|
id: explorer-npm-cache
|
|
with:
|
|
path: apps/explorer/node_modules
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-${{ hashFiles('apps/explorer/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-
|
|
|
|
- name: Restore Blockscout Web NPM Cache
|
|
uses: actions/cache@v4
|
|
id: blockscoutweb-npm-cache
|
|
with:
|
|
path: apps/block_scout_web/assets/node_modules
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-${{ hashFiles('apps/block_scout_web/assets/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-
|
|
|
|
- name: Run cspell
|
|
uses: streetsidesoftware/cspell-action@v2
|
|
with:
|
|
files: |
|
|
**/*.ex*
|
|
**/*.eex
|
|
**/*.js"
|
|
|
|
eslint:
|
|
name: ESLint
|
|
runs-on: ubuntu-latest
|
|
needs: build-and-cache
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- name: Restore Explorer NPM Cache
|
|
uses: actions/cache@v4
|
|
id: explorer-npm-cache
|
|
with:
|
|
path: apps/explorer/node_modules
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-${{ hashFiles('apps/explorer/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-
|
|
|
|
- name: Restore Blockscout Web NPM Cache
|
|
uses: actions/cache@v4
|
|
id: blockscoutweb-npm-cache
|
|
with:
|
|
path: apps/block_scout_web/assets/node_modules
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-${{ hashFiles('apps/block_scout_web/assets/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-
|
|
|
|
- name: Build assets
|
|
run: node node_modules/webpack/bin/webpack.js --mode development
|
|
working-directory: "apps/block_scout_web/assets"
|
|
|
|
- run: ./node_modules/.bin/eslint --format=junit --output-file="test/eslint/junit.xml" js/**
|
|
working-directory: apps/block_scout_web/assets
|
|
jest:
|
|
name: JS Tests
|
|
runs-on: ubuntu-latest
|
|
needs: build-and-cache
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- name: Restore Blockscout Web NPM Cache
|
|
uses: actions/cache@v4
|
|
id: blockscoutweb-npm-cache
|
|
with:
|
|
path: apps/block_scout_web/assets/node_modules
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-${{ hashFiles('apps/block_scout_web/assets/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-
|
|
|
|
- name: Build assets
|
|
run: node node_modules/webpack/bin/webpack.js --mode development
|
|
working-directory: "apps/block_scout_web/assets"
|
|
|
|
- run: ./node_modules/.bin/jest
|
|
working-directory: apps/block_scout_web/assets
|
|
|
|
test_nethermind_mox_ethereum_jsonrpc:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.matrix-builder.outputs.matrix) }}
|
|
name: EthereumJSONRPC Tests
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build-and-cache
|
|
- matrix-builder
|
|
services:
|
|
postgres:
|
|
image: postgres:15
|
|
env:
|
|
# Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database
|
|
POSTGRES_DB: explorer_test
|
|
# match PGPASSWORD for elixir image above
|
|
POSTGRES_PASSWORD: postgres
|
|
# match PGUSER for elixir image above
|
|
POSTGRES_USER: postgres
|
|
# Set health checks to wait until postgres has started
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
ports:
|
|
# Maps tcp port 5432 on service container to the host
|
|
- 5432:5432
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- run: ./bin/install_chrome_headless.sh
|
|
- name: mix test --exclude no_nethermind
|
|
run: |
|
|
cd apps/ethereum_jsonrpc
|
|
mix compile
|
|
mix test --no-start --exclude no_nethermind
|
|
env:
|
|
# match POSTGRES_PASSWORD for postgres image below
|
|
PGPASSWORD: postgres
|
|
# match POSTGRES_USER for postgres image below
|
|
PGUSER: postgres
|
|
ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Nethermind.Mox"
|
|
ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Mox"
|
|
CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }}
|
|
test_nethermind_mox_explorer:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.matrix-builder.outputs.matrix) }}
|
|
name: Explorer Tests
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build-and-cache
|
|
- matrix-builder
|
|
services:
|
|
postgres:
|
|
image: postgres:15
|
|
env:
|
|
# Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database
|
|
POSTGRES_DB: explorer_test
|
|
# match PGPASSWORD for elixir image above
|
|
POSTGRES_PASSWORD: postgres
|
|
# match PGUSER for elixir image above
|
|
POSTGRES_USER: postgres
|
|
# Set health checks to wait until postgres has started
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
ports:
|
|
# Maps tcp port 5432 on service container to the host
|
|
- 5432:5432
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- name: Restore Explorer NPM Cache
|
|
uses: actions/cache@v4
|
|
id: explorer-npm-cache
|
|
with:
|
|
path: apps/explorer/node_modules
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-${{ hashFiles('apps/explorer/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm
|
|
|
|
- run: ./bin/install_chrome_headless.sh
|
|
- name: mix test --exclude no_nethermind
|
|
run: |
|
|
mix ecto.create --quiet
|
|
mix ecto.migrate
|
|
cd apps/explorer
|
|
mix compile
|
|
mix test --no-start --exclude no_nethermind
|
|
env:
|
|
# match POSTGRES_PASSWORD for postgres image below
|
|
PGPASSWORD: postgres
|
|
# match POSTGRES_USER for postgres image below
|
|
PGUSER: postgres
|
|
ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Nethermind.Mox"
|
|
ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Mox"
|
|
CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }}
|
|
WETH_TOKEN_TRANSFERS_FILTERING_ENABLED: "true"
|
|
test_nethermind_mox_indexer:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.matrix-builder.outputs.matrix) }}
|
|
name: Indexer Tests
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build-and-cache
|
|
- matrix-builder
|
|
services:
|
|
postgres:
|
|
image: postgres:15
|
|
env:
|
|
# Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database
|
|
POSTGRES_DB: explorer_test
|
|
# match PGPASSWORD for elixir image above
|
|
POSTGRES_PASSWORD: postgres
|
|
# match PGUSER for elixir image above
|
|
POSTGRES_USER: postgres
|
|
# Set health checks to wait until postgres has started
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
ports:
|
|
# Maps tcp port 5432 on service container to the host
|
|
- 5432:5432
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- run: ./bin/install_chrome_headless.sh
|
|
|
|
- name: mix test --exclude no_nethermind
|
|
run: |
|
|
mix ecto.create --quiet
|
|
mix ecto.migrate
|
|
cd apps/indexer
|
|
mix compile
|
|
mix test --no-start --exclude no_nethermind
|
|
env:
|
|
# match POSTGRES_PASSWORD for postgres image below
|
|
PGPASSWORD: postgres
|
|
# match POSTGRES_USER for postgres image below
|
|
PGUSER: postgres
|
|
ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Nethermind.Mox"
|
|
ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Mox"
|
|
CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }}
|
|
WETH_TOKEN_TRANSFERS_FILTERING_ENABLED: "true"
|
|
test_nethermind_mox_block_scout_web:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix: ${{ fromJson(needs.matrix-builder.outputs.matrix) }}
|
|
name: Blockscout Web Tests
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build-and-cache
|
|
- matrix-builder
|
|
services:
|
|
redis-db:
|
|
image: "redis:alpine"
|
|
ports:
|
|
- 6379:6379
|
|
|
|
postgres:
|
|
image: postgres:15
|
|
env:
|
|
# Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database
|
|
POSTGRES_DB: explorer_test
|
|
# match PGPASSWORD for elixir image above
|
|
POSTGRES_PASSWORD: postgres
|
|
# match PGUSER for elixir image above
|
|
POSTGRES_USER: postgres
|
|
# Set health checks to wait until postgres has started
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
ports:
|
|
# Maps tcp port 5432 on service container to the host
|
|
- 5432:5432
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ env.OTP_VERSION }}
|
|
elixir-version: ${{ env.ELIXIR_VERSION }}
|
|
hexpm-mirrors: |
|
|
https://builds.hex.pm
|
|
https://cdn.jsdelivr.net/hex
|
|
|
|
- name: Mix Deps Cache
|
|
uses: actions/cache/restore@v4
|
|
id: deps-cache
|
|
with:
|
|
path: |
|
|
deps
|
|
_build
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-
|
|
|
|
- name: Restore Explorer NPM Cache
|
|
uses: actions/cache@v4
|
|
id: explorer-npm-cache
|
|
with:
|
|
path: apps/explorer/node_modules
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-${{ hashFiles('apps/explorer/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-
|
|
|
|
- name: Restore Blockscout Web NPM Cache
|
|
uses: actions/cache@v4
|
|
id: blockscoutweb-npm-cache
|
|
with:
|
|
path: apps/block_scout_web/assets/node_modules
|
|
key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-${{ hashFiles('apps/block_scout_web/assets/package-lock.json') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-
|
|
|
|
- name: Build assets
|
|
run: node node_modules/webpack/bin/webpack.js --mode development
|
|
working-directory: "apps/block_scout_web/assets"
|
|
|
|
- run: ./bin/install_chrome_headless.sh
|
|
|
|
- name: mix test --exclude no_nethermind
|
|
run: |
|
|
mix ecto.create --quiet
|
|
mix ecto.migrate
|
|
cd apps/block_scout_web
|
|
mix compile
|
|
mix test --no-start --exclude no_nethermind
|
|
env:
|
|
# match POSTGRES_PASSWORD for postgres image below
|
|
PGPASSWORD: postgres
|
|
# match POSTGRES_USER for postgres image below
|
|
PGUSER: postgres
|
|
ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Nethermind.Mox"
|
|
ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Mox"
|
|
CHAIN_ID: "10200"
|
|
API_RATE_LIMIT_DISABLED: "true"
|
|
API_GRAPHQL_RATE_LIMIT_DISABLED: "true"
|
|
ADMIN_PANEL_ENABLED: "true"
|
|
ACCOUNT_ENABLED: "true"
|
|
ACCOUNT_REDIS_URL: "redis://localhost:6379"
|
|
SOURCIFY_INTEGRATION_ENABLED: "true"
|
|
CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }}
|
|
WETH_TOKEN_TRANSFERS_FILTERING_ENABLED: "true"
|
|
|