name: Test the stack. on: workflow_call: inputs: STACK_ORCHESTRATOR_REF: required: true type: string GO_ETHEREUM_REF: required: true type: string IPLD_ETH_DB_REF: required: true type: string jobs: build: name: Run docker build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Run docker build run: make docker-build test: name: Run unit tests env: GOPATH: /tmp/go runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Go uses: actions/setup-go@v4 with: go-version: 1.19.7 - name: Bring up docker timescaledb container run: docker compose up -d ipld-eth-db - name: Run db migrations run: | sleep 30; docker compose up -d migrations - name: Run test run: | sleep 30; PGPASSWORD=password DATABASE_USER=vdbm DATABASE_PORT=8077 DATABASE_PASSWORD=password DATABASE_HOSTNAME=127.0.0.1 DATABASE_NAME=vulcanize_testing make test integrationtest: name: Run integration tests env: GOPATH: /tmp/go DB_WRITE: true ETH_FORWARD_ETH_CALLS: false ETH_PROXY_ON_ERROR: false ETH_HTTP_PATH: "go-ethereum:8545" runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Go uses: actions/setup-go@v4 with: go-version: 1.19.7 - name: Create GOPATH run: mkdir -p /tmp/go - uses: actions/checkout@v2 with: path: "./ipld-eth-server" - uses: actions/checkout@v2 with: ref: ${{ inputs.STACK_ORCHESTRATOR_REF }} path: "./stack-orchestrator/" repository: vulcanize/stack-orchestrator - uses: actions/checkout@v2 with: ref: ${{ inputs.GO_ETHEREUM_REF }} repository: cerc-io/go-ethereum path: "./go-ethereum/" - uses: actions/checkout@v2 with: ref: ${{ inputs.IPLD_ETH_DB_REF }} repository: cerc-io/ipld-eth-db path: "./ipld-eth-db/" - name: Create config file run: | echo vulcanize_go_ethereum=$GITHUB_WORKSPACE/go-ethereum/ > ./config.sh echo vulcanize_ipld_eth_db=$GITHUB_WORKSPACE/ipld-eth-db/ >> ./config.sh echo vulcanize_ipld_eth_server=$GITHUB_WORKSPACE/ipld-eth-server/ >> ./config.sh echo vulcanize_test_contract=$GITHUB_WORKSPACE/ipld-eth-server/test/contract >> ./config.sh echo genesis_file_path=start-up-files/go-ethereum/genesis.json >> ./config.sh echo db_write=$DB_WRITE >> ./config.sh echo eth_forward_eth_calls=$ETH_FORWARD_ETH_CALLS >> ./config.sh echo eth_proxy_on_error=$ETH_PROXY_ON_ERROR >> ./config.sh echo eth_http_path=$ETH_HTTP_PATH >> ./config.sh cat ./config.sh - name: Build geth run: | cd $GITHUB_WORKSPACE/stack-orchestrator/helper-scripts ./compile-geth.sh \ -p "$GITHUB_WORKSPACE/config.sh" \ -e docker - name: Run docker compose run: | docker-compose \ -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-db-sharding.yml" \ -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-go-ethereum.yml" \ -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-ipld-eth-server.yml" \ -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-contract.yml" \ --env-file "$GITHUB_WORKSPACE/config.sh" \ up -d --build - name: Test run: | cd $GITHUB_WORKSPACE/ipld-eth-server while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8081)" != "200" ]; do echo "waiting for ipld-eth-server..." && sleep 5; done && \ while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8545)" != "200" ]; do echo "waiting for geth-statediff..." && sleep 5; done && \ make integrationtest integrationtest_forwardethcalls: name: Run integration tests for direct proxy fall-through of eth_calls env: GOPATH: /tmp/go DB_WRITE: false ETH_FORWARD_ETH_CALLS: true ETH_PROXY_ON_ERROR: false ETH_HTTP_PATH: "go-ethereum:8545" runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Go uses: actions/setup-go@v4 with: go-version: 1.19.7 - name: Create GOPATH run: mkdir -p /tmp/go - uses: actions/checkout@v2 with: path: "./ipld-eth-server" - uses: actions/checkout@v2 with: ref: ${{ inputs.STACK_ORCHESTRATOR_REF }} path: "./stack-orchestrator/" repository: vulcanize/stack-orchestrator - uses: actions/checkout@v2 with: ref: ${{ inputs.GO_ETHEREUM_REF }} repository: cerc-io/go-ethereum path: "./go-ethereum/" - uses: actions/checkout@v2 with: ref: ${{ inputs.IPLD_ETH_DB_REF }} repository: cerc-io/ipld-eth-db path: "./ipld-eth-db/" - name: Create config file run: | echo vulcanize_go_ethereum=$GITHUB_WORKSPACE/go-ethereum/ > ./config.sh echo vulcanize_ipld_eth_db=$GITHUB_WORKSPACE/ipld-eth-db/ >> ./config.sh echo vulcanize_ipld_eth_server=$GITHUB_WORKSPACE/ipld-eth-server/ >> ./config.sh echo vulcanize_test_contract=$GITHUB_WORKSPACE/ipld-eth-server/test/contract >>./config.sh echo genesis_file_path=start-up-files/go-ethereum/genesis.json >> ./config.sh echo db_write=$DB_WRITE >> ./config.sh echo eth_forward_eth_calls=$ETH_FORWARD_ETH_CALLS >> ./config.sh echo eth_proxy_on_error=$ETH_PROXY_ON_ERROR >> ./config.sh echo eth_http_path=$ETH_HTTP_PATH >> ./config.sh cat ./config.sh - name: Build geth run: | cd $GITHUB_WORKSPACE/stack-orchestrator/helper-scripts ./compile-geth.sh \ -p "$GITHUB_WORKSPACE/config.sh" \ -e docker - name: Run docker compose run: | docker-compose \ -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-db-sharding.yml" \ -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-go-ethereum.yml" \ -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-ipld-eth-server.yml" \ -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-contract.yml" \ --env-file "$GITHUB_WORKSPACE/config.sh" \ up -d --build - name: Test run: | cd $GITHUB_WORKSPACE/ipld-eth-server while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8081)" != "200" ]; do echo "waiting for ipld-eth-server..." && sleep 5; done && \ while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8545)" != "200" ]; do echo "waiting for geth-statediff..." && sleep 5; done && \ make integrationtest