Skip to content

Commit 427a93d

Browse files
authored
log-classifier: rules + fixtures from log sweeps, and fixes found by auditing matched verdicts (#8409)
Eight commits. The first four came from sampling logs the classifier **missed**; the last four from sampling logs it **matched** — which turned out to be far the more productive seam, because a rule that fires on the *wrong line* still counts as "covered" and is invisible to every coverage metric. Measured on `main`, last 7 days: the landed ruleset classifies **95.2%** of live red-job logs (95% CI 92.4–97.0; n=400 of 2944, verified by re-running the engine over raw logs). The deployed lambda is at **81.1%** — that ~14-point gap is deploy lag, and is worth more than anything in this PR. Throughout, the triage rule was: add a fixture only if the landed classifier is *clearly wrong* on it, or it exercises something not already represented. Most candidates were correctly skipped (deploy-lag on the stale prod classifier, dead/rate-limited log blobs, or redundant with existing fixtures). Prod's stored classification lags the landed ruleset, so every candidate was re-derived against `ruleset.toml` rather than trusted. --- ## Part 1 — from a first log sweep (`7d95f1cd9`) New rules, where the real cause was mis- or un-classified: - **`uv python download metadata fetch failed`** — a runner DNS/network failure during `uv python install` was being masked by a benign CMake feature-probe `ninja: build stopped`, so the surfaced line was a meaningless "Build error". The new rule sits *above* the ninja rules and captures only the stable phrase (the URL carries the uv version, so it's excluded from the capture to keep grouping stable). - **`Lintrunner general linter failure`** — a linter *tool crash* (`General linter failure` / `Error (CODE) Linter failed`) is distinct from a per-file lint violation. Previously only the far-away `##[error]Linter failed` GHA catch-all fired, losing which linter died. Captures the linter code so CLANGTIDY vs RUFF group separately. Novel coverage for existing rules that had no fixture: `python_importerror_name` and `python_importerror_missing_so` — two ImportError flavors (bad symbol import; missing `.so` during `import torch`). Deliberately **not** added: a `received SIGINT` rule. That line is emitted for **both** a timeout (a build hitting `timeout-minutes` is SIGINT'd and reported "cancelled") **and** a real cancellation (fail-fast / manual / concurrency). The candidate that surfaced it was in fact a 280-minute cu130 build timeout, but the cause isn't determinable from the log text alone, so the neutral GHA-error catch-all is the honest ceiling here. Part 2 pins that ceiling with a fixture. ## Part 2 — from a second log sweep (`c8149594a`) 26 candidates triaged, 21 skipped: 4 dead S3 blobs (Azure `BlobNotFound`), 1 job that had actually *succeeded*, rest deploy-lag or redundant. - **`pytest failure` (FAILURES section header)** — when a run prints no `short test summary info`, the existing `^FAILED ...` rule can't fire and the winner was a benign `PytestUnraisableExceptionWarning` `AttributeError` raised in a **passing** test's `__del__`. Anchors on the per-test header under `==== FAILURES ====`, always immediately above the traceback. Position matters beyond display: the matched line number centres the ±250-line window fed to the Bedrock summarizer (`main.rs`). `RERUNS` prints before `FAILURES` and `evaluate_rule` takes each rule's **last** match, so the real entry wins over rerun copies. - **`AWS credentials could not be loaded`** — the last `##[error]` is a `continue-on-error` S3-upload symptom ~2000 lines after the real `configure-aws-credentials` failure. - **`git checkout ref not found`** — a deleted `ciflow` tag, masked by the later git exit-128 wrapper. - **`ghstack old version - unexpected PR count in commit`** — generic capture baked in the per-run commit sha, one group per run. - `docker_manifest_unknown` — first fixture for an existing rule. ## Part 3 — SIGINT ceiling and ignore-list (`4f889eac6`) Third sweep: 28 candidates, one fixture, no new rules. The null result is the finding — two candidate categories are exhausted (documented so future sweeps skip them): all 4 `no-match` job families were dead S3 blobs (8 of 10 across two sweeps), and all 3 `Python Test File RuntimeError` candidates were already handled by `Test file timeout` (7-for-7). `gha_catchall_sigint.txt` is a guard. It pins the ignore-list dropping **both** OSDC lines, and the bare `GHA error` catch-all shape which nothing asserted. Its verdict is `##[error]‹received SIGINT›` deliberately: that line is emitted for both a timeout and a real cancellation and the log cannot distinguish them, so a future over-confident SIGINT rule will fail this fixture. ## Part 4 — documented invariants (`7abbb0860`) - **A fixture window must not change the verdict.** The harness classifies the fixture *file*, so a window ending just after a matchable line snaps `#=MATCH=#` onto it and encodes a verdict that disagrees with production. This bit us: a pytest fixture trimmed to end on a `RERUNS` header asserted the classifier lands on a rerun. Includes the `--full` cross-check recipe. - **Anchor position, not just text** — the matched line number centres the Bedrock window. ## Part 5 — `Python Test SIG Code` could never fire (`2c9c67142`) The rule required `Received Signal:` (capital S). `run_test.py:2119` emits lowercase `Received signal:`. **The rule had never matched a log.** Signal-killed test files fell through to the generic wrapper and were reported as ordinary failures — 7 jobs last week: 4× SIGBUS, 1× SIGIOT, 2× SIGINT. Now captures the file **and** the signal. Checked for systemic breakage: all 97 rules recompiled case-insensitively over 140 raw logs surfaces exactly one such rule — this one. Isolated. ## Part 6 — pod failures grouped by pool (`2b26d2f14`) `Runner pod failed to come online` captured only the phase tail, which was `Pending: backoff timeout` for **39 of 39** pod failures in a week: one group, no information, ~15% of all red jobs. Only the `-<rand>-runner-<rand>-workflow` suffix is random; the prefix is the runner pool: ``` 26 mt-l-x86iavx512-8-64 1 mt-l-arm64g4-16-62 9 lf-l-x86iavx512-8-64 1 mt-l-x86aavx2-29-113-a10g 1 lf-l-arm64g4-16-62 1 mt-l-x86aavx2-45-167-a10g-4 ``` **90% of pod failures are one pool shape**, previously impossible to see. `\w+` can't cross a hyphen so the greedy prefix stops exactly at the random segment; 39/39 parse. The old general pattern is kept below as a fallback. > Side note for whoever owns the fleet: if `x86iavx512-8-64` is failing pod bringup at ~9× the rate of everything else, that's an infra problem this grouping was hiding. n=39 from a 300-job sample — now confirmable against the full week. ## Part 7 — new timeout signals (`40e49697c`) Matches the two new shapes from pytorch/pytorch#191754, most specific first: 1. `TIMED OUT: <nodeid>` → the nodeid (a test was in flight) 2. `... returning 124 (<file> <shard>/<n>)` → the file (hang during import/collection) 3. `... returning 124` → unchanged, kept indefinitely for release branches Exit code 124 is reliable to key on: `wait_for_process` SIGINTs first and returns the child's real exit code if it dies gracefully, so 124 only ever means an unkillable hang. **Deviation from the PR author's writeup:** the shard is left *out* of the capture in shape 2 — the same file hanging on 3/8 and 5/8 is one problem and should aggregate; the shard is still readable on the line. Tested in `src/main.rs`, not `fixtures/classify/`, because fixtures are verbatim CI logs and neither shape exists in any log yet. **Replace with real fixtures once the runner change lands and propagates.** ## Part 8 — the real cause of collection-time failures (`dd0b651a8`) Re-aimed the audit at what a developer actually hits: **PR jobs** (not `main`) and **test/build** failures (not infra). Both of my earlier populations were wrong — `main` is inflated by trunk-only noise, and volume-weighting sent half the sample at infra. On PR jobs the top dev-facing rule is healthy: `Python unittest failure`, 63% of dev-facing matches, always landing on a precise `test/...::Class::test_name`. The **#2 rule was not**: `Python Test File RuntimeError` (11%) surfaces run_test.py's `<file> N/N failed!` summary, naming the file but not the cause. All 16 sampled wrapper-only cases were the same thing — the file blew up at import/collection before any test ran, with a good exception line already in the log. **12 of the 16 shared one root cause**: an unresolved merge-conflict marker committed into ``` torch/testing/_internal/common_methods_invocations.py:15375 >>>>>>> 597be33c510 (Add more cases in test_ops.py) SyntaxError: invalid decimal literal ``` imported by much of the suite — so twelve jobs across a dozen unrelated test files each reported a different useless key (`test_ops 3/4`, `test_torch`, `lazy/test_ts_opinfo`, …) for a single one-line breakage. The other 4 were a module-level `AssertionError` from `test_overrides`' `__torch_function__` coverage check. There was **no `SyntaxError` or `AssertionError` rule at all**. Added both, *above* the wrapper so they beat it. Deliberately did **not** demote the wrapper beneath the existing generic exception rules instead: the wrapper line can itself read `RuntimeError: test_ops 3/4 failed!`, so putting it under `Python RuntimeError` would capture that whole line and make grouping strictly worse. Neither promoted exception can match the wrapper's own text, so the change is contained. **All 16 now surface the real cause** (12 SyntaxError, 4 AssertionError) instead of a test-file name. Only these two exception types are promoted because that is what the data showed; a collection failure can raise anything, and `ImportError` / `ValueError` / `TypeError` still sit below the wrapper. The principled version is "any concrete exception beats a file-name summary" — worth revisiting once more cases accumulate. --- ## Testing `cargo test` green: 19 + 18 unit tests, 41 fixtures. Across the whole branch exactly one existing fixture moved — `infra_osdc_pod_failure.txt`, re-blessed to add the pool capture. Every other change is regression-clean against all prior cases. Fixtures are the marker-based regression format from #8394 — each carries a `#=SOURCE=#` job link and a `#=MATCH=#` marker on the line the classifier picks. `pytest_failures_section.txt` is deliberately 663 lines: the benign `__del__` confusers and the real `FAILURES` traceback sit ~550 lines apart in the source log, and holding both in one contiguous real fragment is what makes the fixture assert the actual production verdict rather than an artifact of truncation.
1 parent aafb741 commit 427a93d

17 files changed

Lines changed: 1685 additions & 9 deletions

aws/lambda/log-classifier/fixtures/classify/FIXTURES.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,40 @@ After generating: rename to something descriptive. If the classifier lands on
4949
the wrong line (or nothing) for a real failure, prefer fixing the ruleset so the
5050
fixture blesses to the correct line, rather than checking in a wrong marker.
5151

52+
### The window must not change the verdict
53+
54+
The harness classifies the fixture **file**, not the original log — so a window
55+
that happens to end just after some matchable line can snap `#=MATCH=#` onto it
56+
and encode a verdict that *disagrees with production*. This is a real hazard, not
57+
a hypothetical: a pytest fixture once got trimmed to end on a `RERUNS` per-test
58+
header, so it asserted the classifier lands on a rerun, when on the full log it
59+
lands on the later `FAILURES` entry.
60+
61+
After choosing a window, confirm the line it blesses to is the line the
62+
classifier picks on the **whole** log:
63+
64+
```
65+
./pull_fixture.py <job-id> --name _tmp_fullcheck --full # classify everything
66+
grep -n '#=MATCH=#' fixtures/classify/_tmp_fullcheck.txt # compare, then delete
67+
```
68+
69+
Widen until they agree. A long fixture asserting the true verdict beats a tidy
70+
one that lies — `pytest_failures_section.txt` is 663 lines because the confusers
71+
it must beat sit ~550 lines from the real traceback. Trimming later is safe *if*
72+
re-blessing leaves the marker on the same line; if the marker moves, the trim cut
73+
away a confuser that was doing real work.
74+
75+
### Anchor position, not just text
76+
77+
The matched line **number** is not only for display: `main.rs` feeds it to the
78+
Bedrock summarizer as the centre of a ±250-line window (`src/bedrock.rs`). When
79+
two lines both identify a failure, prefer the one adjacent to the real traceback.
80+
For pytest that means the per-test header under `==== FAILURES ====` rather than
81+
the verbose progress line (`test_x.py::T::t FAILED [3.6s] [ 31%]`), which sits
82+
wherever the test happened to run in the stream — possibly thousands of lines
83+
away. Note `evaluate_rule` takes each rule's *last* match, which is how a section
84+
printed twice (`RERUNS` then `FAILURES`) resolves to the real one.
85+
5286
## Verification
5387

5488
`cargo test --test classify` passes (each fixture's `#=MATCH=#` marker — or its
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#=SOURCE=# https://ossci-raw-job-status.s3.amazonaws.com/log/91047865975
2+
2026-07-31T01:17:25.3989830Z ##[group]Run '/home/runner/hook-extensions/wrapper.js'
3+
2026-07-31T01:17:25.3990956Z shell: /home/runner/externals/node20/bin/node {0}
4+
2026-07-31T01:17:25.3991267Z ##[endgroup]
5+
2026-07-31T01:17:26.8517346Z ##[end-action id=setup-linux.__run_8;outcome=success;conclusion=success;duration_ms=1456]
6+
2026-07-31T01:17:26.8520125Z ##[start-action display=Preserve github env variables for use in docker;id=setup-linux.__run_9]
7+
2026-07-31T01:17:26.8547991Z ##[group]Run env | grep '^GITHUB' >> "/tmp/github_env_${GITHUB_RUN_ID}"
8+
2026-07-31T01:17:26.8548478Z env | grep '^GITHUB' >> "/tmp/github_env_${GITHUB_RUN_ID}"
9+
2026-07-31T01:17:26.8548900Z env | grep '^CI' >> "/tmp/github_env_${GITHUB_RUN_ID}"
10+
2026-07-31T01:17:26.8549357Z shell: bash --noprofile --norc -e -o pipefail {0}
11+
2026-07-31T01:17:26.8549658Z env:
12+
2026-07-31T01:17:26.8549841Z GIT_DEFAULT_BRANCH: main
13+
2026-07-31T01:17:26.8550566Z ##[endgroup]
14+
2026-07-31T01:17:26.8568323Z ##[group]Run '/home/runner/hook-extensions/wrapper.js'
15+
2026-07-31T01:17:26.8569392Z shell: /home/runner/externals/node20/bin/node {0}
16+
2026-07-31T01:17:26.8569696Z ##[endgroup]
17+
2026-07-31T01:17:28.4441483Z ##[end-action id=setup-linux.__run_9;outcome=success;conclusion=success;duration_ms=1592]
18+
2026-07-31T01:17:28.4533240Z ##[group]Run aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7
19+
2026-07-31T01:17:28.4533769Z with:
20+
2026-07-31T01:17:28.4534002Z role-to-assume: arn:aws:iam::308535385114:role/arc
21+
2026-07-31T01:17:28.4534316Z aws-region: us-east-1
22+
2026-07-31T01:17:28.4534553Z role-duration-seconds: 18000
23+
2026-07-31T01:17:28.4534812Z audience: sts.amazonaws.com
24+
2026-07-31T01:17:28.4535066Z output-env-credentials: true
25+
2026-07-31T01:17:28.4535304Z env:
26+
2026-07-31T01:17:28.4535487Z GIT_DEFAULT_BRANCH: main
27+
2026-07-31T01:17:28.4535709Z ##[endgroup]
28+
2026-07-31T01:17:28.4552422Z ##[group]Run '/home/runner/hook-extensions/wrapper.js'
29+
2026-07-31T01:17:28.4553483Z shell: /home/runner/externals/node20/bin/node {0}
30+
2026-07-31T01:17:28.4553786Z ##[endgroup]
31+
2026-07-31T01:17:29.9525127Z It looks like you might be trying to authenticate with OIDC. Did you mean to set the `id-token` permission? If you are not trying to authenticate with OIDC and the action is working successfully, you can ignore this message.
32+
#=MATCH=# 2026-07-31T01:17:30.9756718Z ##[error]Credentials could not be loaded, please check your action inputs: ‹Could not load credentials from any providers›
33+
2026-07-31T01:17:31.1708213Z ##[error][OSDC] Step script exited with code 1. This is a script/workflow error, not an infrastructure issue. Check the step logs above for the actual failure.
34+
2026-07-31T01:17:31.1868453Z ##[error]Process completed with exit code 1.
35+
2026-07-31T01:17:31.1966443Z ##[error]Executing the custom container implementation failed. Please contact your self hosted runner administrator.
36+
2026-07-31T01:17:31.2053782Z ##[group]Run pytorch/pytorch/.github/actions/download-build-artifacts@main
37+
2026-07-31T01:17:31.2054272Z with:
38+
2026-07-31T01:17:31.2054484Z name: linux-jammy-py3.10-clang21-asan
39+
2026-07-31T01:17:31.2054772Z s3-bucket: gha-artifacts
40+
2026-07-31T01:17:31.2054998Z use-gha: true
41+
2026-07-31T01:17:31.2055459Z env:
42+
2026-07-31T01:17:31.2055642Z GIT_DEFAULT_BRANCH: main
43+
2026-07-31T01:17:31.2055881Z AWS_DEFAULT_REGION: us-east-1
44+
2026-07-31T01:17:31.2056125Z AWS_REGION: us-east-1
45+
2026-07-31T01:17:31.2056332Z ##[endgroup]
46+
2026-07-31T01:17:31.2061635Z ##[start-action display=Download PyTorch Build Artifacts from S3;id=__pytorch_pytorch.__seemethere_download-artifact-s3]
47+
2026-07-31T01:17:31.2066763Z ##[end-action id=__pytorch_pytorch.__seemethere_download-artifact-s3;outcome=skipped;conclusion=skipped;duration_ms=0]
48+
2026-07-31T01:17:31.2069016Z ##[start-action display=Download PyTorch Build Artifacts from GHA;id=__pytorch_pytorch.__actions_download-artifact]
49+
2026-07-31T01:17:31.2117617Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
50+
2026-07-31T01:17:31.2119028Z ##[group]Run actions/download-artifact@v4
51+
2026-07-31T01:17:31.2119304Z with:
52+
2026-07-31T01:17:31.2119511Z name: linux-jammy-py3.10-clang21-asan
53+
2026-07-31T01:17:31.2119797Z merge-multiple: false
54+
2026-07-31T01:17:31.2120039Z repository: pytorch/pytorch
55+
2026-07-31T01:17:31.2120285Z run-id: 30595033143
56+
2026-07-31T01:17:31.2120481Z env:
57+
2026-07-31T01:17:31.2120662Z GIT_DEFAULT_BRANCH: main
58+
2026-07-31T01:17:31.2120903Z AWS_DEFAULT_REGION: us-east-1
59+
2026-07-31T01:17:31.2121147Z AWS_REGION: us-east-1
60+
2026-07-31T01:17:31.2121358Z ##[endgroup]
61+
2026-07-31T01:17:31.2134879Z ##[group]Run '/home/runner/hook-extensions/wrapper.js'
62+
2026-07-31T01:17:31.2135957Z shell: /home/runner/externals/node20/bin/node {0}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#=SOURCE=# https://ossci-raw-job-status.s3.amazonaws.com/log/90482586125
2+
2026-07-29T04:35:58.8546573Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
3+
2026-07-29T04:35:58.8547694Z hint: 'development'. The just-created branch can be renamed via this command:
4+
2026-07-29T04:35:58.8548585Z hint:
5+
2026-07-29T04:35:58.8549067Z hint: git branch -m <name>
6+
2026-07-29T04:35:58.8549620Z hint:
7+
2026-07-29T04:35:58.8550333Z hint: Disable this message with "git config set advice.defaultBranchName false"
8+
2026-07-29T04:35:58.8551736Z Initialized empty Git repository in /home/runner/work/pytorch/pytorch/.git/
9+
2026-07-29T04:35:58.8553746Z [command]/usr/bin/git remote add origin https://github.com/pytorch/pytorch
10+
2026-07-29T04:35:58.8586586Z ##[endgroup]
11+
2026-07-29T04:35:58.8587517Z ##[group]Disabling automatic garbage collection
12+
2026-07-29T04:35:58.8590315Z [command]/usr/bin/git config --local gc.auto 0
13+
2026-07-29T04:35:58.8614334Z ##[endgroup]
14+
2026-07-29T04:35:58.8614904Z ##[group]Setting up auth
15+
2026-07-29T04:35:58.8615761Z Removing SSH command configuration
16+
2026-07-29T04:35:58.8621151Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
17+
2026-07-29T04:35:58.8647986Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
18+
2026-07-29T04:35:59.0713407Z Removing HTTP extra header
19+
2026-07-29T04:35:59.0718444Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
20+
2026-07-29T04:35:59.0745839Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
21+
2026-07-29T04:35:59.0928655Z Removing includeIf entries pointing to credentials config files
22+
2026-07-29T04:35:59.0934161Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
23+
2026-07-29T04:35:59.0961281Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
24+
2026-07-29T04:35:59.1153918Z [command]/usr/bin/git config --file /home/runner/work/_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config http.https://github.com/.extraheader AUTHORIZATION: basic ***
25+
2026-07-29T04:35:59.1185815Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/pytorch/pytorch/.git.path /home/runner/work/_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config
26+
2026-07-29T04:35:59.1211782Z [command]/usr/bin/git config --local includeIf.gitdir:/home/runner/work/pytorch/pytorch/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config
27+
2026-07-29T04:35:59.1273788Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config
28+
2026-07-29T04:35:59.1312394Z [command]/usr/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config
29+
2026-07-29T04:35:59.1335939Z ##[endgroup]
30+
2026-07-29T04:35:59.1336944Z ##[group]Fetching the repository
31+
2026-07-29T04:35:59.1344849Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +refs/tags/ciflow/b200/190903:refs/tags/ciflow/b200/190903
32+
2026-07-29T04:35:59.6896036Z ##[error]fatal: couldn't find remote ref refs/tags/ciflow/b200/190903
33+
2026-07-29T04:35:59.6903342Z The process '/usr/bin/git' failed with exit code 128
34+
2026-07-29T04:35:59.6903958Z Waiting 10 seconds before trying again
35+
2026-07-29T04:36:09.6914096Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +refs/tags/ciflow/b200/190903:refs/tags/ciflow/b200/190903
36+
2026-07-29T04:36:10.0689596Z ##[error]fatal: couldn't find remote ref refs/tags/ciflow/b200/190903
37+
2026-07-29T04:36:10.0701435Z The process '/usr/bin/git' failed with exit code 128
38+
2026-07-29T04:36:28.0743565Z Waiting 18 seconds before trying again
39+
2026-07-29T04:36:28.0744884Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +refs/tags/ciflow/b200/190903:refs/tags/ciflow/b200/190903
40+
#=MATCH=# 2026-07-29T04:36:28.4540735Z ##[error]fatal: ‹couldn't find remote ref› refs/tags/ciflow/b200/190903
41+
2026-07-29T04:36:28.4585558Z ##[error]The process '/usr/bin/git' failed with exit code 128
42+
2026-07-29T04:36:28.4811820Z Post job cleanup.
43+
2026-07-29T04:36:28.5551314Z [command]/usr/bin/git version
44+
2026-07-29T04:36:28.5583240Z git version 2.54.0
45+
2026-07-29T04:36:28.5615717Z Temporarily overriding HOME='/home/runner/work/_temp/26b8d1b2-f5f7-4474-8ff7-a9e4c8ff9b18' before making global git config changes
46+
2026-07-29T04:36:28.5616836Z Adding repository directory to the temporary git global config as a safe directory
47+
2026-07-29T04:36:28.5621287Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/pytorch/pytorch
48+
2026-07-29T04:36:28.5651427Z Removing SSH command configuration
49+
2026-07-29T04:36:28.5657551Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
50+
2026-07-29T04:36:28.5714584Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
51+
2026-07-29T04:36:28.5907179Z Removing HTTP extra header
52+
2026-07-29T04:36:28.5912158Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
53+
2026-07-29T04:36:28.5943529Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
54+
2026-07-29T04:36:28.6135977Z Removing includeIf entries pointing to credentials config files
55+
2026-07-29T04:36:28.6143047Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
56+
2026-07-29T04:36:28.6164434Z includeif.gitdir:/home/runner/work/pytorch/pytorch/.git.path
57+
2026-07-29T04:36:28.6165148Z includeif.gitdir:/home/runner/work/pytorch/pytorch/.git/worktrees/*.path
58+
2026-07-29T04:36:28.6165783Z includeif.gitdir:/github/workspace/.git.path
59+
2026-07-29T04:36:28.6166271Z includeif.gitdir:/github/workspace/.git/worktrees/*.path
60+
2026-07-29T04:36:28.6178719Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/pytorch/pytorch/.git.path
61+
2026-07-29T04:36:28.6193206Z /home/runner/work/_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config
62+
2026-07-29T04:36:28.6202870Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/pytorch/pytorch/.git.path /home/runner/work/_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config
63+
2026-07-29T04:36:28.6233524Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/home/runner/work/pytorch/pytorch/.git/worktrees/*.path
64+
2026-07-29T04:36:28.6254907Z /home/runner/work/_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config
65+
2026-07-29T04:36:28.6263948Z [command]/usr/bin/git config --local --unset includeif.gitdir:/home/runner/work/pytorch/pytorch/.git/worktrees/*.path /home/runner/work/_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config
66+
2026-07-29T04:36:28.6389167Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git.path
67+
2026-07-29T04:36:28.6412179Z /github/runner_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config
68+
2026-07-29T04:36:28.6419077Z [command]/usr/bin/git config --local --unset includeif.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config
69+
2026-07-29T04:36:28.6448256Z [command]/usr/bin/git config --local --get-all includeif.gitdir:/github/workspace/.git/worktrees/*.path
70+
2026-07-29T04:36:28.6467523Z /github/runner_temp/git-credentials-5feecffd-d1ed-4188-8a32-d687a7475054.config

0 commit comments

Comments
 (0)