-
-
Notifications
You must be signed in to change notification settings - Fork 979
149 lines (127 loc) · 4.79 KB
/
cygwin-test.yml
File metadata and controls
149 lines (127 loc) · 4.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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 POSIX file ownership
# Cygwin's `ls -ld` reports the NTFS Owner SID via Cygwin's SID-to-uid
# mapping (well-known SIDs by their RID, machine-local accounts by
# 0x30000+RID). That mapping is what Cygwin git's
# `is_path_owned_by_current_user` reduces to, so this is the view that
# determines whether `safe.directory` is consulted.
run: |
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 is not set}/.gitconfig"
do
ls -ld -- "$p" 2>/dev/null || echo "(missing: $p)"
done
- name: Show NTFS file ownership
# Authoritative NTFS Owner via Get-Acl, with no Cygwin SID-to-uid layer
# in between -- useful for confirming what the Cygwin view reports as
# "Administrators" is the BUILTIN\Administrators SID (S-1-5-32-544).
shell: pwsh
run: |
$paths = @(
"$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",
"$env:USERPROFILE\.gitconfig"
)
foreach ($p in $paths) {
if (Test-Path -LiteralPath $p) {
try {
$owner = (Get-Acl -LiteralPath $p).Owner
} catch {
$owner = "ERROR: $($_.Exception.Message)"
}
"{0,-44} {1}" -f $owner, $p
} else {
"(missing: $p)"
}
}
- name: Show safe.directory entries
run: git config --global --get-all safe.directory
- 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 }}