| name: test-cygwin | |
| on: [push, pull_request, workflow_dispatch] | |
| permissions: | |
| contents: read | |
| jobs: | |
| test: | |
| strategy: | |
| matrix: | |
| selection: [fast, perf] | |
| include: | |
| - selection: fast | |
| additional-pytest-args: --ignore=test/performance | |
| - selection: perf | |
| additional-pytest-args: test/performance | |
| fail-fast: false | |
| runs-on: windows-latest | |
| env: | |
| CHERE_INVOKING: "1" | |
| CYGWIN_NOWINPATH: "1" | |
| defaults: | |
| run: | |
| shell: C:\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr "{0}" | |
| steps: | |
| - name: Force LF line endings | |
| run: | | |
| git config --global core.autocrlf false # Affects the non-Cygwin git. | |
| shell: pwsh # Do this outside Cygwin, to affect actions/checkout. | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install Cygwin | |
| uses: cygwin/cygwin-install-action@v6 | |
| with: | |
| packages: git python39 python-pip-wheel python-setuptools-wheel python-wheel-wheel | |
| add-to-path: false # No need to change $PATH outside the Cygwin environment. | |
| - name: Arrange for verbose output | |
| run: | | |
| # Arrange for verbose output but without shell environment setup details. | |
| echo 'set -x' >~/.bash_profile | |
| - name: Special configuration for Cygwin git | |
| run: | | |
| git config --global --add safe.directory "$(pwd)" | |
| git config --global --add safe.directory "$(pwd)/.git" | |
| git config --global core.autocrlf false | |
| - name: Prepare this repo for tests | |
| run: | | |
| ./init-tests-after-clone.sh | |
| - name: Set git user identity and command aliases for the tests | |
| run: | | |
| git config --global user.email "travis@ci.com" | |
| git config --global user.name "Travis Runner" | |
| # If we rewrite the user's config by accident, we will mess it up | |
| # and cause subsequent tests to fail | |
| cat test/fixtures/.gitconfig >> ~/.gitconfig | |
| - name: Set up virtual environment | |
| run: | | |
| python3.9 -m venv .venv | |
| echo 'BASH_ENV=.venv/bin/activate' >>"$GITHUB_ENV" | |
| - name: Update PyPA packages | |
| run: | | |
| python -m pip install -U pip 'setuptools; python_version<"3.12"' wheel | |
| - name: Install project and test dependencies | |
| run: | | |
| pip install '.[test]' | |
| - name: Show version and platform information | |
| run: | | |
| uname -a | |
| command -v git python | |
| git version | |
| python --version | |
| python -c 'import os, sys; print(f"sys.platform={sys.platform!r}, os.name={os.name!r}")' | |
| - name: Test with pytest (${{ matrix.additional-pytest-args }}) | |
| run: | | |
| pytest --color=yes -p no:sugar --instafail -vv ${{ matrix.additional-pytest-args }} |