diff --git a/.github/workflows/win.yml b/.github/workflows/win.yml new file mode 100644 index 0000000000..8100566cd0 --- /dev/null +++ b/.github/workflows/win.yml @@ -0,0 +1,95 @@ +name: test_on_windows + +on: [push, pull_request] + +jobs: + build: + runs-on: windows-latest + strategy: + matrix: + python-version: ["3.8","3.12"] + jsonschema-version: ["3.0", "latest"] + name: py ${{ matrix.python-version }} js ${{ matrix.jsonschema-version }} + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + # - name: Set Up Chromedriver + # run: | + # sudo apt-get update + # sudo apt-get --only-upgrade install google-chrome-stable + # sudo apt-get -yqq install chromium-chromedriver + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install .[dev] + # pip install "selenium<4.3.0" + # pip install altair_saver + - name: Install specific jsonschema + # Only have to execute this if we don't want the latest jsonschema version + if: ${{ matrix.jsonschema-version != 'latest' }} + run: | + pip install jsonschema==${{ matrix.jsonschema-version }} + - name: Maybe uninstall optional dependencies + # We uninstall pyarrow and vegafusion for one job to test that we have not + # accidentally introduced a hard dependency on these libraries. + # Uninstalling for Python 3.8 is an arbitrary choice. + # Also see https://github.com/altair-viz/altair/pull/3114 + if: ${{ matrix.python-version == '3.8' }} + run: | + pip uninstall -y pyarrow vegafusion vegafusion-python-embed + - name: Maybe install lowest supported pandas version + # We install the lowest supported pandas version for one job to test that + # it still works. Downgrade to the oldest versions of pandas and numpy that include + # Python 3.8 wheels, so only run this job for Python 3.8 + if: ${{ matrix.python-version == '3.8' }} + run: | + pip install pandas==0.25.3 numpy==1.17.5 + - name: Test that schema generation has no effect + run: | + python tools/generate_schema_wrapper.py + # This gets the paths of all files which were either deleted, modified + # or are not yet tracked by Git + files=`git ls-files --deleted --modified --others --exclude-standard` + # Depending on the shell it can happen that 'files' contains empty + # lines which are filtered out in the for loop below + files_cleaned=() + for i in "${files[@]}"; do + # Skip empty items + if [ -z "$i" ]; then + continue + fi + # Add the rest of the elements to a new array + files_cleaned+=("${i}") + done + if [ ${#files_cleaned[@]} -gt 0 ]; then + echo "The code generation modified the following files:" + echo $files + exit 1 + fi + - name: Test with pytest + run: | + pytest --doctest-modules tests + # - name: Selected tests without vl-convert-python + # run: | + # pip uninstall vl-convert-python --yes + # pytest -m save_engine --doctest-modules tests + # - name: Selected tests without vl-convert-python and altair_saver + # run: | + # pip uninstall altair_saver --yes + # pytest -m save_engine --doctest-modules tests + - name: Selected tests with vl-convert-python and without altair_saver + run: | + # pip install vl-convert-python + pytest -m save_engine --doctest-modules tests + - name: Validate Vega-Lite schema + run: | + # We install all 'format' dependencies of jsonschema as check-jsonschema + # only does the 'format' checks which are installed. + # We can always use the latest jsonschema version here. + # uri-reference check is disabled as the URIs in the Vega-Lite schema do + # not conform RFC 3986. + pip install 'jsonschema[format]' check-jsonschema --upgrade + check-jsonschema --check-metaschema altair/vegalite/v5/schema/vega-lite-schema.json --disable-formats uri-reference