cmd/testwrapper: auto-retry every failing test
Previously, testwrapper only retried tests explicitly annotated with flakytest.Mark. Authors don't pre-emptively mark tests that haven't flaked yet, so the first flake of a brand-new test failed CI even when a re-run would have passed. testwrapper now retries every failing test within a per-test wall-clock budget (default: 5 minute per-attempt timeout capped at 1.5x the first failure duration, 10 minute total). A test that fails and then passes on retry is reported as flaky; a test that never passes within the budget remains a real failure (exit non-zero). For flakeapp's existing log scraping, the wire format is preserved: the "flakytest failures JSON:" line is now emitted only for tests that ultimately flaked (passed on retry). Unmarked tests get a fake issue URL of the form https://github.com/{owner}/{repo}/issues/UNKNOWN where owner/repo is detected from GITHUB_REPOSITORY, the local git remote, or falls back to tailscale/tailscale. A new "permanent test failures JSON:" line is emitted for tests that never passed; flakeapp ignores it for now (a follow-up can teach it to record real failures separately). flakytest.Mark stays as an opt-in API: still useful for tracking a known-flaky test against a real issue and for TS_SKIP_FLAKY_TESTS. Updates tailscale/corp#38960 Change-Id: I56dfc9b023486d239f60793a53e9690578ce8017 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
2ee9eacb94
commit
d961e44856
@@ -1,9 +1,14 @@
|
||||
// Copyright (c) Tailscale Inc & contributors
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
// Package flakytest contains test helpers for marking a test as flaky. For
|
||||
// tests run using cmd/testwrapper, a failed flaky test will cause tests to be
|
||||
// re-run a few time until they succeed or exceed our iteration limit.
|
||||
// Package flakytest contains test helpers for marking a test as flaky.
|
||||
//
|
||||
// Marking a test with [Mark] is not required for cmd/testwrapper to retry
|
||||
// failed tests; the wrapper retries any failure within a per-test time
|
||||
// budget and reports a test as flaky if it ever passes on retry. Mark is
|
||||
// useful for tracking a known-flaky test against a GitHub issue and for the
|
||||
// TS_SKIP_FLAKY_TESTS skip behavior used to keep CI green when a flake is
|
||||
// being investigated.
|
||||
package flakytest
|
||||
|
||||
import (
|
||||
|
||||
Reference in New Issue
Block a user