mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-15 03:18:07 +00:00
add regression testing tasks (#664)
This commit is contained in:
@ -4,7 +4,7 @@
|
||||
# Licensed under the MIT License.
|
||||
|
||||
import logging
|
||||
from typing import Iterator, List, Optional
|
||||
from typing import Iterator, List, Optional, Union
|
||||
|
||||
from azure.devops.connection import Connection
|
||||
from azure.devops.credentials import BasicAuthentication
|
||||
@ -24,7 +24,7 @@ from azure.devops.v6_0.work_item_tracking.work_item_tracking_client import (
|
||||
WorkItemTrackingClient,
|
||||
)
|
||||
from memoization import cached
|
||||
from onefuzztypes.models import ADOTemplate, Report
|
||||
from onefuzztypes.models import ADOTemplate, RegressionReport, Report
|
||||
from onefuzztypes.primitives import Container
|
||||
|
||||
from ..secrets import get_secret_string_value
|
||||
@ -51,7 +51,11 @@ def get_valid_fields(
|
||||
|
||||
class ADO:
|
||||
def __init__(
|
||||
self, container: Container, filename: str, config: ADOTemplate, report: Report
|
||||
self,
|
||||
container: Container,
|
||||
filename: str,
|
||||
config: ADOTemplate,
|
||||
report: Report,
|
||||
):
|
||||
self.config = config
|
||||
self.renderer = Render(container, filename, report)
|
||||
@ -203,8 +207,20 @@ class ADO:
|
||||
|
||||
|
||||
def notify_ado(
|
||||
config: ADOTemplate, container: Container, filename: str, report: Report
|
||||
config: ADOTemplate,
|
||||
container: Container,
|
||||
filename: str,
|
||||
report: Union[Report, RegressionReport],
|
||||
) -> None:
|
||||
if isinstance(report, RegressionReport):
|
||||
logging.info(
|
||||
"ado integration does not support regression reports. "
|
||||
"container:%s filename:%s",
|
||||
container,
|
||||
filename,
|
||||
)
|
||||
return
|
||||
|
||||
logging.info(
|
||||
"notify ado: job_id:%s task_id:%s container:%s filename:%s",
|
||||
report.job_id,
|
||||
|
@ -4,13 +4,18 @@
|
||||
# Licensed under the MIT License.
|
||||
|
||||
import logging
|
||||
from typing import List, Optional
|
||||
from typing import List, Optional, Union
|
||||
|
||||
from github3 import login
|
||||
from github3.exceptions import GitHubException
|
||||
from github3.issues import Issue
|
||||
from onefuzztypes.enums import GithubIssueSearchMatch
|
||||
from onefuzztypes.models import GithubAuth, GithubIssueTemplate, Report
|
||||
from onefuzztypes.models import (
|
||||
GithubAuth,
|
||||
GithubIssueTemplate,
|
||||
RegressionReport,
|
||||
Report,
|
||||
)
|
||||
from onefuzztypes.primitives import Container
|
||||
|
||||
from ..secrets import get_secret_obj
|
||||
@ -107,10 +112,18 @@ def github_issue(
|
||||
config: GithubIssueTemplate,
|
||||
container: Container,
|
||||
filename: str,
|
||||
report: Optional[Report],
|
||||
report: Optional[Union[Report, RegressionReport]],
|
||||
) -> None:
|
||||
if report is None:
|
||||
return
|
||||
if isinstance(report, RegressionReport):
|
||||
logging.info(
|
||||
"github issue integration does not support regression reports. "
|
||||
"container:%s filename:%s",
|
||||
container,
|
||||
filename,
|
||||
)
|
||||
return
|
||||
|
||||
try:
|
||||
handler = GithubIssue(config, container, filename, report)
|
||||
|
@ -10,12 +10,18 @@ from uuid import UUID
|
||||
from memoization import cached
|
||||
from onefuzztypes import models
|
||||
from onefuzztypes.enums import ErrorCode, TaskState
|
||||
from onefuzztypes.events import EventCrashReported, EventFileAdded
|
||||
from onefuzztypes.events import (
|
||||
EventCrashReported,
|
||||
EventFileAdded,
|
||||
EventRegressionReported,
|
||||
)
|
||||
from onefuzztypes.models import (
|
||||
ADOTemplate,
|
||||
Error,
|
||||
GithubIssueTemplate,
|
||||
NotificationTemplate,
|
||||
RegressionReport,
|
||||
Report,
|
||||
Result,
|
||||
TeamsTemplate,
|
||||
)
|
||||
@ -26,7 +32,7 @@ from ..azure.queue import send_message
|
||||
from ..azure.storage import StorageType
|
||||
from ..events import send_event
|
||||
from ..orm import ORMMixin
|
||||
from ..reports import get_report
|
||||
from ..reports import get_report_or_regression
|
||||
from ..tasks.config import get_input_container_queues
|
||||
from ..tasks.main import Task
|
||||
from .ado import notify_ado
|
||||
@ -102,7 +108,7 @@ def get_queue_tasks() -> Sequence[Tuple[Task, Sequence[str]]]:
|
||||
|
||||
|
||||
def new_files(container: Container, filename: str) -> None:
|
||||
report = get_report(container, filename)
|
||||
report = get_report_or_regression(container, filename)
|
||||
|
||||
notifications = get_notifications(container)
|
||||
if notifications:
|
||||
@ -134,9 +140,15 @@ def new_files(container: Container, filename: str) -> None:
|
||||
)
|
||||
send_message(task.task_id, bytes(url, "utf-8"), StorageType.corpus)
|
||||
|
||||
if report:
|
||||
if isinstance(report, Report):
|
||||
send_event(
|
||||
EventCrashReported(report=report, container=container, filename=filename)
|
||||
)
|
||||
elif isinstance(report, RegressionReport):
|
||||
send_event(
|
||||
EventRegressionReported(
|
||||
regression_report=report, container=container, filename=filename
|
||||
)
|
||||
)
|
||||
else:
|
||||
send_event(EventFileAdded(container=container, filename=filename))
|
||||
|
@ -4,10 +4,10 @@
|
||||
# Licensed under the MIT License.
|
||||
|
||||
import logging
|
||||
from typing import Any, Dict, List, Optional
|
||||
from typing import Any, Dict, List, Optional, Union
|
||||
|
||||
import requests
|
||||
from onefuzztypes.models import Report, TeamsTemplate
|
||||
from onefuzztypes.models import RegressionReport, Report, TeamsTemplate
|
||||
from onefuzztypes.primitives import Container
|
||||
|
||||
from ..azure.containers import auth_download_url
|
||||
@ -54,12 +54,15 @@ def send_teams_webhook(
|
||||
|
||||
|
||||
def notify_teams(
|
||||
config: TeamsTemplate, container: Container, filename: str, report: Optional[Report]
|
||||
config: TeamsTemplate,
|
||||
container: Container,
|
||||
filename: str,
|
||||
report: Optional[Union[Report, RegressionReport]],
|
||||
) -> None:
|
||||
text = None
|
||||
facts: List[Dict[str, str]] = []
|
||||
|
||||
if report:
|
||||
if isinstance(report, Report):
|
||||
task = Task.get(report.job_id, report.task_id)
|
||||
if not task:
|
||||
logging.error(
|
||||
|
Reference in New Issue
Block a user