Switch to side-by-side view

--- a
+++ b/.github/workflows/python-package.yml
@@ -0,0 +1,103 @@
+name: Tests
+
+on:
+    push:
+        branches: [ master ]
+    pull_request:
+        branches: [ master ]
+
+jobs:
+    build:
+        runs-on: ${{ matrix.os }}
+        strategy:
+            matrix:
+                os: [ ubuntu-latest, macos-latest ]
+                python-version: [ 3.7, 3.8, 3.9, 3.10-dev ]
+                include:
+                    -   os: ubuntu-latest
+                        pip_cache: ~/.cache/pip
+                        download_cache: ~/.astropy/cache/download/url/
+                    -   os: macos-latest
+                        pip_cache: ~/Library/Caches/pip
+                        download_cache: ~/.astropy/cache/download/url/
+                    -   os: windows-latest
+                        pip_cache: ~\AppData\Local\pip\Cache
+                        download_cache: ~\.astropy\cache\download\url\
+
+        steps:
+            -   uses: actions/checkout@v2
+            -   name: Set up Python ${{ matrix.python-version }}
+                uses: actions/setup-python@v2
+                with:
+                    python-version: ${{ matrix.python-version }}
+
+            -   name: Cache pip
+                uses: actions/cache@v2
+                with:
+                    path: ${{ matrix.pip_cache }}
+                    key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
+                    restore-keys: |
+                        ${{ runner.os }}-pip-
+                        ${{ runner.os }}-
+
+            -   name: Cache download files
+                uses: actions/cache@v2
+                with:
+                    path: ${{ matrix.download_cache }}
+                    key: ${{ hashFiles('*') }}
+                    restore-keys: |
+                        ${{ hashFiles('*') }}
+
+            #            -   name: Cache download files with Folder Hash
+            #                uses: theowenyoung/folder-hash@v2
+            #                with:
+            #                    path: ${{ matrix.download_cache }}
+            -   name: Install
+                run: |
+                    if [ "${{ runner.os }}" == "Linux" ]; then
+                         sudo apt-get install unrar
+                    fi
+                shell: bash
+
+            -   name: Install development dependencies
+                run: |
+                    python -m pip install --upgrade pip pytest flake8
+
+            -   name: Lint with flake8
+                run: |
+                    # stop the build if there are Python syntax errors or undefined names
+                    flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
+                    # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
+                    flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
+
+            -   name: Install requirement dependencies
+                run: |
+                    pip install -r requirements.txt
+
+            #            -   name: Test with pytest
+            #                run: |
+            #                    pytest ./ --cov=./ --cov-report=xml
+            -   name: Upload coverage reports to Codecov
+                uses: codecov/codecov-action@v3
+
+#            -   name: Upload coverage to Codecov
+#                uses: codecov/codecov-action@v1
+#                with:
+#                    token: ${{ secrets.CODECOV_TOKEN }}
+#                    files: ./coverage1.xml,./coverage2.xml
+#                    directory: ./coverage/reports/
+#                    flags: unittests
+#                    env_vars: OS,PYTHON
+#                    name: codecov-umbrella
+#                    fail_ci_if_error: false
+#                    path_to_write_report: ./coverage/codecov_report.txt
+#                    verbose: true
+
+#            -   name: Build and publish
+#                env:
+#                    TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
+#                    TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
+#                run: |
+#                    python setup.py sdist bdist_wheel
+#                    twine upload dist/*
+