Skip to content

Remove temporary test jobs (testing complete) #2765

Remove temporary test jobs (testing complete)

Remove temporary test jobs (testing complete) #2765

Workflow file for this run

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 --add safe.directory "$(pwd)/git/ext/gitdb"
git config --global --add safe.directory "$(pwd)/git/ext/gitdb/gitdb/ext/smmap"
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 file ownership and safe.directory entries
run: |
echo "==================== File ownership (Cygwin view, ls -ld) ===================="
for p in \
"$(pwd)" \
"$(pwd)/.git" \
"$(pwd)/git/ext/gitdb" \
"$(pwd)/git/ext/gitdb/.git" \
"$(pwd)/.git/modules/gitdb" \
"$(pwd)/git/ext/gitdb/gitdb/ext/smmap" \
"$(pwd)/git/ext/gitdb/gitdb/ext/smmap/.git" \
"$(pwd)/.git/modules/gitdb/modules/smmap" \
"${HOME:-}" \
"${HOME:-}/.gitconfig"; do
if [ -n "$p" ]; then
ls -ld -- "$p" 2>/dev/null || echo "(missing: $p)"
fi
done
echo
echo "==================== File ownership (Win32 view, Get-Acl) ===================="
# Cygwin's ls -ld and stat go through Cygwin's SID-to-uid mapping
# (well-known SIDs by their RID, machine-local accounts by 0x30000+RID).
# The mapping is deterministic, but going via Win32 Get-Acl gives the
# NTAccount form of the NTFS Owner SID directly, with no Cygwin layer
# in between -- useful for confirming that what Cygwin reports as
# "Administrators" really is the BUILTIN\Administrators SID (S-1-5-32-544)
# rather than some local-machine account that Cygwin happens to map to
# the same uid. The workflow sets CYGWIN_NOWINPATH=1, so Windows paths
# are not on Cygwin's $PATH; invoke powershell.exe by absolute path.
ps_exe=/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe
if [ -x "$ps_exe" ]; then
for p in \
"$(pwd)" \
"$(pwd)/.git" \
"$(pwd)/git/ext/gitdb" \
"$(pwd)/git/ext/gitdb/.git" \
"$(pwd)/.git/modules/gitdb" \
"$(pwd)/git/ext/gitdb/gitdb/ext/smmap" \
"$(pwd)/git/ext/gitdb/gitdb/ext/smmap/.git" \
"$(pwd)/.git/modules/gitdb/modules/smmap" \
"${HOME:-}/.gitconfig"; do
if [ -n "$p" ] && [ -e "$p" ]; then
wp=$(cygpath -w "$p")
# Escape single-quotes for PowerShell single-quoted string literal: ' -> ''
wp_escaped=${wp//\'/\'\'}
owner=$("$ps_exe" -NoProfile -NonInteractive -Command \
"try { (Get-Acl -LiteralPath '${wp_escaped}').Owner } catch { 'ERROR: ' + \$_.Exception.Message }" \
2>/dev/null | tr -d '\r')
printf " %-44s %s\n" "$owner" "$wp"
fi
done
else
echo "($ps_exe not found -- skipping Win32 view)"
fi
echo
echo "==================== safe.directory entries ===================="
git config --global --get-all safe.directory 2>&1 || echo "(none)"
- 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 }}