BUG: test should NOT fail with missing optional dependencies
The docs and configs indicate that both `mimeparse` and `pillow` are optional dependencies, yet the test are not taking this into account (e.g. the test requiring these packages should be skipped when they are not installed rather than failing the test suite)
diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml
index b9608af..4e86efe 100644
--- a/.github/workflows/cibuild.yml
+++ b/.github/workflows/cibuild.yml
@@ -11,33 +11,21 @@ on:
     - cron: "0 3 * * *"
 
 jobs:
-  egginfo:
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v2
-      - name: Set up Python 3.8
-        uses: actions/setup-python@v2
-        with:
-          python-version: 3.8
-      - name: Install tox
-        run: python -m pip install --upgrade tox
-      - name: egg-info
-        run: tox -e egg_info
   tests:
-    needs: egginfo
     runs-on: ubuntu-latest
-    name: ${{ matrix.python-version }}
+    name: ${{ matrix.python-version }} with all dependencies
     strategy:
       fail-fast: true
       matrix:
         python-version: ["3.8", "3.9", "3.10"]
+
     steps:
     - name: Checkout code
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
       with:
         fetch-depth: 0
     - name: Set up Python
-      uses: actions/setup-python@v2
+      uses: actions/setup-python@v4
       with:
         python-version: ${{ matrix.python-version }}
     - name: Install tox
@@ -47,11 +35,12 @@ jobs:
         # remove "." from matrix.python-version to get the defaults tox python versions
         tox_python_target=$(echo py${{matrix.python-version}} | sed 's/\.//')
         echo "Tox python target: " $tox_python_target
-        tox -e $tox_python_target-test
+        tox -e $tox_python_target-test-alldeps
 
 
   mac_windows:
     runs-on: ${{ matrix.os }}
+    name: ${{ matrix.os }} with mandatory dependencies
     needs: tests
     strategy:
       fail-fast: true
@@ -59,11 +48,11 @@ jobs:
         os: [macos-latest, windows-latest]
     steps:
     - name: Checkout code
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
       with:
         fetch-depth: 0
     - name: Set up Python
-      uses: actions/setup-python@v2
+      uses: actions/setup-python@v4
       with:
         python-version: 3.9
     - name: Install tox
@@ -72,60 +61,55 @@ jobs:
       run: tox -e py39-test
 
 
-  style_coverage:
+  stylecheck:
     runs-on: ubuntu-latest
     needs: tests
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - name: Set up Python 3.8
-        uses: actions/setup-python@v2
+        uses: actions/setup-python@v4
         with:
           python-version: 3.8
-      - name: Setup Graphviz
-        uses: ts-graphviz/setup-graphviz@v1
       - name: Install tox
         run: python -m pip install --upgrade tox
       - name: Check codestyle
         run: tox -e codestyle
-      - name: Check coverage
-        run: tox -e cov
-      - name: Upload coverage to codecov
-        uses: codecov/codecov-action@v2
-        with:
-          file: ./coverage.xml
 
-  devastropy:
+
+  devdeps:
     # TODO: this job should be allowed to fail except that the functionality
     # is not available in actions yet.
     runs-on: ubuntu-latest
     needs: tests
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - name: Set up Python 3.10
-        uses: actions/setup-python@v2
+        uses: actions/setup-python@v4
         with:
           python-version: "3.10"
       - name: Install tox
         run: python -m pip install --upgrade tox
-      - name: Run tests against devastropy
-        run: tox -e py310-test-devastropy
+      - name: Run tests against dev dependencies
+        run: tox -e py310-test-devdeps-alldeps-cov
+
+      - name: Upload coverage to codecov
+        uses: codecov/codecov-action@v3
+        with:
+          file: ./coverage.xml
+          verbose: true
+
+
 
   oldestdeps:
     runs-on: ubuntu-latest
     needs: tests
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - name: Set up Python 3.8
-        uses: actions/setup-python@v2
+        uses: actions/setup-python@v4
         with:
           python-version: 3.8
       - name: Install tox
         run: python -m pip install --upgrade tox
       - name: Run tests against oldest dependencies
         run: tox -e py38-test-oldestdeps
-
-  #publish:
-  #needs: coverage
-  #TODO - should be trigger by tagging associated with creating a new release in
-  # github. The tag should be compared to the version in setup.cfg to ensure
-  # consistency.
diff --git a/README.rst b/README.rst
index 2c2353b..55c9019 100644
--- a/README.rst
+++ b/README.rst
@@ -56,7 +56,6 @@ The following packages are required for PyVO:
 The following packages are optional dependencies and are required for the
 full functionality:
 
- * mimeparse
  * pillow
 
 For running the tests, and building the documentation, the following
diff --git a/pyvo/__init__.py b/pyvo/__init__.py
index 5a76fc4..b55e788 100644
--- a/pyvo/__init__.py
+++ b/pyvo/__init__.py
@@ -32,7 +32,6 @@ of which DALAccessError is the root parent exception.
 from ._astropy_init import *
 # ----------------------------------------------------------------------------
 
-# For egg_info test builds to pass, put package imports here.
 from . import registry
 from .dal import ssa, sia, sla, scs, tap
 from . import auth
diff --git a/pyvo/conftest.py b/pyvo/conftest.py
index c7ab0be..e0f58eb 100644
--- a/pyvo/conftest.py
+++ b/pyvo/conftest.py
@@ -30,8 +30,13 @@ def pytest_configure(config):
 
         # Customize the following lines to add/remove entries from the list of
         # packages for which version numbers are displayed when running the tests.
+        PYTEST_HEADER_MODULES['Astropy'] = 'astropy'  # noqa
+        PYTEST_HEADER_MODULES['requests'] = 'requests'  # noqa
+
         PYTEST_HEADER_MODULES.pop('Pandas', None)
-        PYTEST_HEADER_MODULES['scikit-image'] = 'skimage'
+        PYTEST_HEADER_MODULES.pop('h5py', None)
+        PYTEST_HEADER_MODULES.pop('Scipy', None)
+        PYTEST_HEADER_MODULES.pop('Matplotlib', None)
 
         from . import __version__
         TESTED_VERSIONS['pyvo'] = __version__
diff --git a/pyvo/dal/tests/test_mimetype.py b/pyvo/dal/tests/test_mimetype.py
index ef61a71..0ce26cc 100644
--- a/pyvo/dal/tests/test_mimetype.py
+++ b/pyvo/dal/tests/test_mimetype.py
@@ -17,6 +17,12 @@ mime_url = 'https://someurl.com/'
 get_pkg_data_contents = partial(
     get_pkg_data_contents, package=__package__, encoding='binary')
 
+try:
+    from PIL import Image
+    HAS_PILLOW = True
+except ImportError:
+    HAS_PILLOW = False
+
 
 @pytest.fixture()
 def mime(mocker):
@@ -35,6 +41,7 @@ def mime(mocker):
 
 
 @pytest.mark.usefixtures('mime')
+@pytest.mark.skipif('not HAS_PILLOW')
 def test_mime_object_maker():
 
     assert 'Text content' == mime_object_maker(mime_url+'mime-text',
diff --git a/setup.cfg b/setup.cfg
index 733e9ee..a470039 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -48,7 +48,6 @@ python_requires = >=3.8
 
 [options.extras_require]
 all =
-    mimeparse
     pillow
 test =
     pytest-astropy
diff --git a/tox.ini b/tox.ini
index bc71fe1..f1db4d8 100644
--- a/tox.ini
+++ b/tox.ini
@@ -3,65 +3,41 @@
 # as oldestdeps and devastropy might not support the full python range
 # listed here
 envlist =
-    py{38,39,310}-test{,-oldestdeps, -devastropy}
-    egg_info
-    cov
+    py{38,39,310}-test{,-alldeps,-oldestdeps,-devdeps}{,-cov}
     linkcheck
     codestyle
     build_docs
-
 requires =
     setuptools >= 30.3.0
     pip >= 19.3.1
-    tox-pypi-filter >= 0.12
 
 [testenv]
-pypi_filter = https://raw.githubusercontent.com/astropy/ci-helpers/main/pip_pinnings.txt
-
 extras =
-    test
-    all
-
-commands =
-    pip freeze
-    pytest --pyargs pyvo
+    test: test
+    alldeps: all
 
-# tox environments are constructed with so-called 'factors' (or terms)
-# separated by hyphens, e.g. test-devdeps-cov. Lines below starting with factor:
-# will only take effect if that factor is included in the environment name. To
-# see a list of example environments that can be run, along with a description,
-# run:
-#
-#     tox -l -v
-#
 description =
     run tests
-    oldestdeps: with astropy 4.1.*
-    devastropy: with astropy latest
+    oldestdeps: with oldest supported dependencies
+    devdeps: with development version of dependencies
+    cov: determine the code coverage
 
 deps =
-    devastropy: git+https://github.com/astropy/astropy.git#egg=astropy
+    cov: coverage
+
     oldestdeps: astropy==4.1
     # We set a suitably old numpy along with an old astropy, no need to pick up
     # deprecations and errors due to their unmatching versions
     oldestdeps: numpy==1.16
 
-[testenv:egg_info]
-description = ensure egg_info works without dependencies
 commands =
-    pip freeze
-    python setup.py egg_info
+    devdeps: pip install -U --pre --only-binary :all: -i https://pypi.anaconda.org/scipy-wheels-nightly/simple numpy
+    devdeps: pip install -U --pre -i https://pypi.anaconda.org/astropy/simple astropy
 
-[testenv:cov]
-description = determine the code coverage
-deps:
-     # had to pin this
-    coverage==4.5.4
-
-commands =
     pip freeze
-    pytest --pyargs pyvo --cov pyvo --cov-config={toxinidir}/setup.cfg
-    coverage xml -o {toxinidir}/coverage.xml
+    !cov: pytest --pyargs pyvo
+    cov: pytest --pyargs pyvo --cov pyvo --cov-config={toxinidir}/setup.cfg
+    cov: coverage xml -o {toxinidir}/coverage.xml
 
 
 [testenv:docs]
['setup.cfg', '.github/workflows/cibuild.yml', 'pyvo/dal/tests/test_mimetype.py', 'tox.ini', 'README.rst', 'pyvo/__init__.py', 'pyvo/conftest.py']