-
Notifications
You must be signed in to change notification settings - Fork 0
84 lines (82 loc) · 4.6 KB
/
Copy pathtests.yml
File metadata and controls
84 lines (82 loc) · 4.6 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
name: tests
on:
push:
branches: [main]
pull_request:
jobs:
test:
runs-on: ubuntu-latest
strategy:
# One failing version must not cancel the others. Twice now a single
# transient `git clone` failure inside the clean-clone check has taken
# the whole matrix down, and on the first occurrence a job that had
# already reported "1257 passed" was marked failed because it was
# cancelled mid-cleanup — which made one flake read as three. Letting
# every version finish is what distinguishes an environment failure
# from a real one, and that distinction is the reason to run three.
fail-fast: false
matrix:
# The floor, and the two the developer actually works on. 3.10 is what
# the clean-clone check runs, deliberately older than the working
# environment so an incompatibility is found before CI rather than by
# it; 3.14 is the interpreter every local suite run uses, and until
# 2026-09-09 nothing in CI covered it or the release below it. The
# versions between the floor and the ceiling are dropped rather than
# kept: a defect present in one of them and in neither end is rarer
# than a defect in the version the developer runs all day and CI never
# saw.
python-version: ['3.10', '3.13', '3.14']
steps:
- uses: actions/checkout@v4
with:
# Full history, not the default shallow clone. story-053 converted
# every module that resolved this repository's history for an *input*
# onto committed fixtures under tests/history-fixtures/, so this is no
# longer load-bearing for those. It still is for the modules whose
# subject genuinely is what a past commit did — the entries
# tests/test_baseline_honesty.py declares as history readers rather
# than pending conversion, currently test_baseline_honesty.py,
# test_baseline_resolution_is_single.py, test_git_history_loading_retired.py
# and test_validation_module_naming.py. A one-commit checkout has no
# revision older than the change under test, so those go red.
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
# Install from the tracked declaration rather than a hand-listed set, so
# the plugin the configured test_command needs cannot be missing here
# while present locally.
- run: pip install -r requirements-dev.txt
# One retry, of the failures only, and only here. It was added while the
# clean-clone and revert checks still cloned with `--no-hardlinks`, which
# copies .git/objects as a directory tree: git enumerates the tree, then
# copies it, and three CI runs failed because a file vanished in between.
# One named objects/pack/multi-pack-index.lock, which exists only while
# something is writing a multi-pack index in the *source* repository.
#
# story-033 removed that cause. Both checks now clone over git's normal
# transport (`--no-local`), which negotiates a pack over a pipe and never
# reads the source's object files at all, so a concurrent writer in the
# source cannot reach the clone. The failure this step was added for is
# impossible rather than unlikely, and no call site is outstanding.
#
# The step stays anyway, for the reason it always named as its second
# purpose: the next unknown. It is not evidence of a known flake, and a
# green job that used it still says so below.
#
# The retry lives here rather than in orchestration/ deliberately. A
# harness that retries its own clone behaves differently depending on
# where it runs, and a developer running the suite locally should see
# the failure rather than a green run that quietly needed two attempts.
# So the harness is unchanged and the environment that produces the
# flake is the one that absorbs it.
#
# `--last-failed` re-runs only what failed, so the log names exactly
# what needed a second attempt, and the warning puts it in the run
# summary. A job that is green *because* of this step says so.
- name: tests (one retry of failures on a second attempt)
run: |
set -o pipefail
if python -m pytest tests/ -q; then exit 0; fi
echo "::warning title=Suite retried::The first attempt failed; re-running only the failed tests once. If this job is green, it needed two attempts — check the list below before trusting it."
python -m pytest tests/ -q --last-failed