ci/lava: Update lavacli version
- Use new YAML loader derived from ruamel.yaml - Remove PyYAML dependency from LAVA job submitter package Signed-off-by: Guilherme Gallo <guilherme.gallo@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20596>
This commit is contained in:

committed by
Marge Bot

parent
b1f759e750
commit
bbdbf0862c
@@ -92,7 +92,7 @@ ninja install
|
||||
popd
|
||||
rm -rf DirectX-Headers
|
||||
|
||||
pip3 install git+https://git.lavasoftware.org/lava/lavacli@3db3ddc45e5358908bc6a17448059ea2340492b7
|
||||
pip3 install lavacli==1.5.2
|
||||
|
||||
# install bindgen
|
||||
RUSTFLAGS='-L native=/usr/local/lib' cargo install \
|
||||
|
@@ -3,7 +3,7 @@ variables:
|
||||
DEBIAN_BASE_TAG: "2023-01-06-virglrenderer"
|
||||
|
||||
DEBIAN_X86_BUILD_IMAGE_PATH: "debian/x86_build"
|
||||
DEBIAN_BUILD_TAG: "2023-01-06-mold-1_9"
|
||||
DEBIAN_BUILD_TAG: "2023-01-09-lavacli"
|
||||
|
||||
DEBIAN_X86_BUILD_MINGW_IMAGE_PATH: "debian/x86_build-mingw"
|
||||
DEBIAN_BUILD_MINGW_TAG: "2023-01-03-ci-libva-2.17"
|
||||
|
@@ -20,11 +20,11 @@ import traceback
|
||||
import urllib.parse
|
||||
import xmlrpc.client
|
||||
from datetime import datetime, timedelta
|
||||
from io import StringIO
|
||||
from os import getenv
|
||||
from typing import Any, Optional
|
||||
|
||||
import lavacli
|
||||
import yaml
|
||||
from lava.exceptions import (
|
||||
MesaCIException,
|
||||
MesaCIKnownIssueException,
|
||||
@@ -42,7 +42,7 @@ from lava.utils import (
|
||||
hide_sensitive_data,
|
||||
print_log,
|
||||
)
|
||||
from lavacli.utils import loader
|
||||
from lavacli.utils import flow_yaml as lava_yaml
|
||||
|
||||
# Timeout in seconds to decide if the device from the dispatched LAVA job has
|
||||
# hung or not due to the lack of new log output.
|
||||
@@ -62,7 +62,7 @@ NUMBER_OF_RETRIES_TIMEOUT_DETECTION = int(getenv("LAVA_NUMBER_OF_RETRIES_TIMEOUT
|
||||
NUMBER_OF_ATTEMPTS_LAVA_BOOT = int(getenv("LAVA_NUMBER_OF_ATTEMPTS_LAVA_BOOT", 3))
|
||||
|
||||
|
||||
def generate_lava_yaml(args):
|
||||
def generate_lava_yaml_payload(args) -> dict[str, Any]:
|
||||
# General metadata and permissions, plus also inexplicably kernel arguments
|
||||
values = {
|
||||
'job_name': 'mesa: {}'.format(args.pipeline_info),
|
||||
@@ -189,7 +189,7 @@ def generate_lava_yaml(args):
|
||||
{ 'test': test },
|
||||
]
|
||||
|
||||
return yaml.dump(values, width=10000000)
|
||||
return values
|
||||
|
||||
|
||||
def setup_lava_proxy():
|
||||
@@ -281,7 +281,7 @@ class LAVAJob:
|
||||
# Let's extract the data
|
||||
data = data.data
|
||||
# When there is no new log data, the YAML is empty
|
||||
if loaded_lines := yaml.load(data, Loader=loader(False)):
|
||||
if loaded_lines := lava_yaml.load(data):
|
||||
lines = loaded_lines
|
||||
self.last_log_line += len(lines)
|
||||
return lines
|
||||
@@ -346,7 +346,7 @@ def find_exception_from_metadata(metadata, job_id):
|
||||
def find_lava_error(job) -> None:
|
||||
# Look for infrastructure errors and retry if we see them.
|
||||
results_yaml = _call_proxy(job.proxy.results.get_testjob_results_yaml, job.job_id)
|
||||
results = yaml.load(results_yaml, Loader=loader(False))
|
||||
results = lava_yaml.load(results_yaml)
|
||||
for res in results:
|
||||
metadata = res["metadata"]
|
||||
find_exception_from_metadata(metadata, job.job_id)
|
||||
@@ -513,7 +513,9 @@ def main(args):
|
||||
# script section timeout with a reasonable delay.
|
||||
GL_SECTION_TIMEOUTS[LogSectionType.TEST_CASE] = timedelta(minutes=args.job_timeout)
|
||||
|
||||
job_definition = generate_lava_yaml(args)
|
||||
job_definition_stream = StringIO()
|
||||
lava_yaml.dump(generate_lava_yaml_payload(args), job_definition_stream)
|
||||
job_definition = job_definition_stream.getvalue()
|
||||
|
||||
if args.dump_yaml:
|
||||
with GitlabSection(
|
||||
|
@@ -224,5 +224,5 @@ def fatal_err(msg):
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def hide_sensitive_data(yaml_data, hide_tag="HIDEME"):
|
||||
def hide_sensitive_data(yaml_data: str, hide_tag: str ="HIDEME"):
|
||||
return "".join(line for line in yaml_data.splitlines(True) if hide_tag not in line)
|
||||
|
@@ -1,15 +1,22 @@
|
||||
from contextlib import nullcontext as does_not_raise
|
||||
from datetime import datetime
|
||||
from io import StringIO
|
||||
from itertools import cycle
|
||||
from typing import Callable, Generator, Iterable, Optional, Tuple, Union
|
||||
from typing import Any, Callable, Generator, Iterable, Optional, Tuple, Union
|
||||
|
||||
import yaml
|
||||
from freezegun import freeze_time
|
||||
from lava.utils.log_section import (
|
||||
DEFAULT_GITLAB_SECTION_TIMEOUTS,
|
||||
FALLBACK_GITLAB_SECTION_TIMEOUT,
|
||||
LogSectionType,
|
||||
)
|
||||
from lavacli.utils import flow_yaml as lava_yaml
|
||||
|
||||
|
||||
def yaml_dump(data: dict[str, Any]) -> str:
|
||||
stream = StringIO()
|
||||
lava_yaml.dump(data, stream)
|
||||
return stream.getvalue()
|
||||
|
||||
|
||||
def section_timeout(section_type: LogSectionType) -> int:
|
||||
@@ -46,7 +53,7 @@ def jobs_logs_response(
|
||||
|
||||
logs = [timed_msg] if msg is None else msg
|
||||
|
||||
return finished, yaml.safe_dump(logs)
|
||||
return finished, yaml_dump(logs)
|
||||
|
||||
|
||||
def section_aware_message_generator(
|
||||
|
@@ -300,7 +300,7 @@ def test_parse_job_result_from_log(message, expectation, mock_proxy):
|
||||
def test_full_yaml_log(mock_proxy, frozen_time):
|
||||
import random
|
||||
|
||||
import yaml
|
||||
from lavacli.utils import flow_yaml as lava_yaml
|
||||
|
||||
def time_travel_from_log_chunk(data_chunk):
|
||||
if not data_chunk:
|
||||
@@ -319,7 +319,7 @@ def test_full_yaml_log(mock_proxy, frozen_time):
|
||||
# the same of from the job submitter execution
|
||||
with open("/tmp/log.yaml", "r") as f:
|
||||
first_log = f.readline()
|
||||
first_log_time = yaml.safe_load(first_log)[0]["dt"]
|
||||
first_log_time = lava_yaml.load(first_log)[0]["dt"]
|
||||
frozen_time.move_to(first_log_time)
|
||||
|
||||
def load_lines() -> list:
|
||||
|
@@ -8,7 +8,6 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import pytest
|
||||
import yaml
|
||||
from lava.exceptions import MesaCIKnownIssueException, MesaCITimeoutError
|
||||
from lava.utils import (
|
||||
GitlabSection,
|
||||
@@ -18,7 +17,7 @@ from lava.utils import (
|
||||
hide_sensitive_data,
|
||||
)
|
||||
|
||||
from ..lava.helpers import create_lava_yaml_msg, does_not_raise
|
||||
from ..lava.helpers import create_lava_yaml_msg, does_not_raise, lava_yaml, yaml_dump
|
||||
|
||||
GITLAB_SECTION_SCENARIOS = {
|
||||
"start collapsed": (
|
||||
@@ -157,9 +156,9 @@ SENSITIVE_DATA_SCENARIOS = {
|
||||
ids=SENSITIVE_DATA_SCENARIOS.keys(),
|
||||
)
|
||||
def test_hide_sensitive_data(input, expectation, tag):
|
||||
yaml_data = yaml.safe_dump(input)
|
||||
yaml_data = yaml_dump(input)
|
||||
yaml_result = hide_sensitive_data(yaml_data, tag)
|
||||
result = yaml.safe_load(yaml_result)
|
||||
result = lava_yaml.load(yaml_result)
|
||||
|
||||
assert result == expectation
|
||||
|
||||
|
Reference in New Issue
Block a user