version: 2.1 commands: restore_cached_venv: description: "Restore a cached venv" parameters: reqs_checksum: type: string default: "1234" venv_name: type: string default: "default-name" steps: - restore_cache: keys: - << parameters.venv_name >>-venv-<< parameters.reqs_checksum >> # fallback to using the latest cache if no exact match is found - << parameters.venv_name >>-venv- save_cached_venv: description: "Save a venv into a cache" parameters: reqs_checksum: type: string default: "1234" venv_path: type: string default: "venv" venv_name: type: string default: "default-name" steps: - save_cache: key: << parameters.venv_name >>-venv-<< parameters.reqs_checksum >> paths: << parameters.venv_path >> restore_pyspec_cached_venv: description: "Restore the cache with pyspec keys" steps: - restore_cached_venv: venv_name: v22-pyspec reqs_checksum: cache-{{ checksum "setup.py" }} save_pyspec_cached_venv: description: Save a venv into a cache with pyspec keys" steps: - save_cached_venv: venv_name: v22-pyspec reqs_checksum: cache-{{ checksum "setup.py" }} venv_path: ./venv restore_deposit_contract_tester_cached_venv: description: "Restore the venv from cache for the deposit contract tester" steps: - restore_cached_venv: venv_name: v23-deposit-contract-tester reqs_checksum: cache-{{ checksum "setup.py" }}-{{ checksum "solidity_deposit_contract/web3_tester/requirements.txt" }} save_deposit_contract_tester_cached_venv: description: "Save the venv to cache for later use of the deposit contract tester" steps: - save_cached_venv: venv_name: v23-deposit-contract-tester reqs_checksum: cache-{{ checksum "setup.py" }}-{{ checksum "solidity_deposit_contract/web3_tester/requirements.txt" }} venv_path: ./solidity_deposit_contract/web3_tester/venv jobs: checkout_specs: docker: - image: circleci/python:3.8 working_directory: ~/specs-repo steps: # Restore git repo at point close to target branch/revision, to speed up checkout - restore_cache: keys: - v3-specs-repo-{{ .Branch }}-{{ .Revision }} - v3-specs-repo-{{ .Branch }}- - v3-specs-repo- - checkout - run: name: Clean up git repo to reduce cache size command: git gc # Save the git checkout as a cache, to make cloning next time faster. - save_cache: key: v3-specs-repo-{{ .Branch }}-{{ .Revision }} paths: - ~/specs-repo install_pyspec_test: docker: - image: circleci/python:3.8 working_directory: ~/specs-repo steps: - restore_cache: key: v3-specs-repo-{{ .Branch }}-{{ .Revision }} - restore_pyspec_cached_venv - run: name: Install pyspec requirements command: make install_test - save_pyspec_cached_venv test: docker: - image: circleci/python:3.8 working_directory: ~/specs-repo steps: - restore_cache: key: v3-specs-repo-{{ .Branch }}-{{ .Revision }} - restore_pyspec_cached_venv - run: name: Run py-tests command: make citest - store_test_results: path: tests/core/pyspec/test-reports table_of_contents: docker: - image: circleci/node:10.16.3 working_directory: ~/specs-repo steps: - checkout - run: name: Check table of contents command: sudo npm install -g doctoc@2 && make check_toc codespell: docker: - image: circleci/python:3.8 working_directory: ~/specs-repo steps: - checkout - run: name: Check codespell command: pip install 'codespell<3.0.0,>=2.0.0' --user && make codespell lint: docker: - image: circleci/python:3.8 working_directory: ~/specs-repo steps: - restore_cache: key: v3-specs-repo-{{ .Branch }}-{{ .Revision }} - restore_pyspec_cached_venv - run: name: Run linter for pyspec command: make lint - run: name: Run linter for test generators command: make lint_generators build_deposit_contract: docker: - image: ethereum/solc:0.6.11-alpine steps: - checkout - run: name: Install build essentials command: | apk update apk add git make - run: name: Compile the contract command: | make compile_deposit_contract git diff --color --exit-code - persist_to_workspace: root: . paths: - ./solidity_deposit_contract/deposit_contract.json - ./build/combined.json - ./solidity_deposit_contract/lib test_deposit_contract: docker: - image: nixorg/nix:circleci steps: - checkout - restore_cache: key: nix-store-test-v2 - attach_workspace: at: /tmp/ - run: name: Test the contract command: | mkdir build cp -r /tmp/build/* build cp -r /tmp/solidity_deposit_contract/lib/* ./solidity_deposit_contract/lib cp -r /tmp/solidity_deposit_contract/deposit_contract.json ./solidity_deposit_contract/deposit_contract.json nix-shell --command 'make test_deposit_contract' ./solidity_deposit_contract/shell.nix - save_cache: key: nix-store-test-v2 paths: - /nix install_deposit_contract_web3_tester: docker: - image: circleci/python:3.8 working_directory: ~/specs-repo steps: - restore_cache: key: v3-specs-repo-{{ .Branch }}-{{ .Revision }} - restore_deposit_contract_tester_cached_venv - run: name: Install deposit contract tester requirements command: make install_deposit_contract_web3_tester - save_deposit_contract_tester_cached_venv test_deposit_contract_web3_tests: docker: - image: circleci/python:3.8 working_directory: ~/specs-repo steps: - restore_cache: key: v3-specs-repo-{{ .Branch }}-{{ .Revision }} - restore_deposit_contract_tester_cached_venv - run: name: Run deposit contract test with web3.py command: make test_deposit_contract_web3_tests workflows: version: 2.1 test_spec: jobs: - checkout_specs - install_pyspec_test: requires: - checkout_specs - test: requires: - install_pyspec_test - table_of_contents - codespell - lint: requires: - test - install_deposit_contract_web3_tester: requires: - checkout_specs - test_deposit_contract_web3_tests: requires: - install_deposit_contract_web3_tester build_and_test_deposit_contract: jobs: - build_deposit_contract - test_deposit_contract: requires: - build_deposit_contract