# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# ruff linter deprecates List, required for Python 3.8 compatibility
from typing import List, Optional # noqa UP035
from mach.decorators import Command, CommandArgument, SubCommand
@Command(
"manifest",
category= "testing",
description= "Manifest operations",
virtualenv_name= "manifest",
)
def manifest(_command_context):
"""
All functions implemented as subcommands.
"""
@SubCommand(
"manifest",
"skip-fails",
description= "Update manifests to skip failing tests",
)
@CommandArgument( "try_url", nargs= 1, help= "Treeherder URL for try (please use quotes)")
@CommandArgument(
"-b",
"--bugzilla",
default= None,
help= "Bugzilla instance [disable]",
)
@CommandArgument(
"-C",
"--clear-cache",
nargs= "?",
const= "all",
default= None,
help= "clear cache REVISION (or all)",
)
@CommandArgument(
"-c",
"--carryover",
action= "store_true",
help= "Set carryover mode (only skip failures for platform matches)",
)
@CommandArgument(
"-d",
"--dry-run",
action= "store_true",
help= "Determine manifest changes, but do not write them",
)
@CommandArgument(
"-F",
"--use-failures",
default= None,
help= "Use failures from file",
)
@CommandArgument(
"-f",
"--save-failures",
default= None,
help= "Save failures to file",
)
@CommandArgument(
"-I",
"--implicit-vars",
action= "store_true",
help= "Use implicit variables in reftest manifests",
)
@CommandArgument(
"-i",
"--task-id",
default= None,
help= "Task id to write a condition for instead of all tasks from the push",
)
@CommandArgument(
"-k",
"--known-intermittents",
action= "store_true",
help= "Set known intermittents mode (only skip failures known intermittents)",
)
@CommandArgument(
"-M",
"--max-failures",
type=int,
default=- 1,
help= "Maximum number of failures to skip (-1 == no limit)",
)
@CommandArgument( "-m", "--meta-bug-id", type=int, default= None, help= "Meta Bug id")
@CommandArgument(
"-n",
"--new-version",
default= None,
help= "New version to use for annotations",
)
@CommandArgument(
"-N",
"--new-failures",
action= "store_true",
help= "Set new failures mode (only add conditions for new failures)",
)
@CommandArgument(
"-r",
"--failure-ratio",
type=float,
default= 0. 4,
help= "Ratio of test failures/total to skip [0.4]",
)
@CommandArgument(
"-R",
"--replace-tbd",
action= "store_true",
help= "Replace Bug TBD in manifests by filing new bugs",
)
@CommandArgument(
"-s",
"--turbo",
action= "store_true",
help= "Skip all secondary failures",
)
@CommandArgument( "-T", "--use-tasks", default= None, help= "Use tasks from file")
@CommandArgument( "-t", "--save-tasks", default= None, help= "Save tasks to file")
@CommandArgument(
"-u",
"--user-agent",
default= None,
help= "User-Agent to use for mozci if queries are forbidden from treeherder",
)
@CommandArgument( "-v", "--verbose", action= "store_true", help= "Verbose mode")
def skipfails(
command_context,
try_url,
bugzilla: Optional[str] = None,
meta_bug_id: Optional[int] = None,
turbo: bool = False,
save_tasks: Optional[str] = None,
use_tasks: Optional[str] = None,
save_failures: Optional[str] = None,
use_failures: Optional[str] = None,
max_failures: int = - 1,
verbose: bool = False,
dry_run: bool = False,
implicit_vars: bool = False,
new_version: Optional[str] = None,
task_id: Optional[str] = None,
user_agent: Optional[str] = None,
failure_ratio: float = 0. 4,
clear_cache: Optional[str] = None,
carryover: bool = False,
known_intermittents: bool = False,
new_failures: bool = False,
replace_tbd: bool = False,
):
from skipfails import Skipfails, SkipfailsMode
mode: int = SkipfailsMode.from_flags(
carryover,
known_intermittents,
new_failures,
replace_tbd,
)
Skipfails(
command_context,
try_url,
verbose,
bugzilla,
dry_run,
turbo,
implicit_vars,
new_version,
task_id,
user_agent,
clear_cache,
).run(
meta_bug_id,
save_tasks,
use_tasks,
save_failures,
use_failures,
max_failures,
failure_ratio,
mode,
)
@SubCommand(
"manifest",
"high-freq-skip-fails",
description= "Update manifests to skip failing tests",
)
@CommandArgument(
"-f",
"--failures",
default= "30",
dest= "failures",
help= "Minimum number of failures for the bug to be skipped",
)
@CommandArgument(
"-d",
"--days",
default= "7",
dest= "days",
help= "Number of days to look for failures since now",
)
def high_freq_skipfails(command_context, failures: str, days: str):
from high_freq_skipfails import HighFreqSkipfails
try:
failures_num = int(failures)
except ValueError:
failures_num = 30
try:
days_num = int(days)
except ValueError:
days_num = 7
HighFreqSkipfails(command_context, failures_num, days_num).run()
@SubCommand(
"manifest",
"clean-skip-fails",
description= "Update manifests to remove skip-if conditions for a specific platform. Only works for TOML manifests.",
)
@CommandArgument(
"manifest_search_path",
nargs= 1,
help= "Path to the folder containing the manifests to update, or the path to a single manifest",
)
@CommandArgument(
"-o",
"--os",
default= None,
dest= "os_name",
help= "OS to remove (linux, mac, win)",
)
@CommandArgument(
"-s",
"--os_version",
default= None,
dest= "os_version",
help= "Version of the OS to remove (eg: 18.04 for linux)",
)
@CommandArgument(
"-p",
"--processor",
default= None,
dest= "processor",
help= "Type of processor architecture to remove (eg: x86)",
)
def clean_skipfails(
command_context,
manifest_search_path: List[str], # noqa UP006
os_name: Optional[str] = None,
os_version: Optional[str] = None,
processor: Optional[str] = None,
):
from clean_skipfails import CleanSkipfails
CleanSkipfails(
command_context, manifest_search_path[ 0], os_name, os_version, processor
).run()
¤ Dauer der Verarbeitung: 0.2 Sekunden
(vorverarbeitet am 2026-11-08)
¤
*© Formatika GbR, Deutschland
|
|