Skip to content

Commit f392a2c

Browse files
authored
Merge pull request #52 from linuxserver/51-feat-fail-tests-if-screenshot-fails
If amd64 tag fails the screenshot test, mark CI.report_status with "FAIL".
2 parents e929867 + 611d43c commit f392a2c

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

ci/ci.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,11 @@ def container_test(self, tag: str) -> None:
326326
return
327327

328328
# Screenshot the web interface and check connectivity
329-
self.take_screenshot(container, tag)
329+
screenshot: bool = self.take_screenshot(container, tag)
330+
if not screenshot and self.get_platform(tag) == "amd64": # Allow ARM tags to fail the screenshot test
331+
self.logger.error("Test of %s FAILED after %.2f seconds", tag, time.time() - start_time)
332+
self._endtest(container, tag, build_info, sbom, False, start_time)
333+
return
330334

331335
self._endtest(container, tag, build_info, sbom, True, start_time)
332336
self.logger.success("Test of %s PASSED after %.2f seconds", tag, time.time() - start_time)
@@ -723,17 +727,20 @@ def _add_test_result(self, tag:str, test:str, status:str, message:str, start_tim
723727
"message":message,
724728
"runtime": runtime}.items())))
725729

726-
def take_screenshot(self, container: Container, tag:str) -> None:
730+
def take_screenshot(self, container: Container, tag:str) -> bool:
727731
"""Take a screenshot and save it to self.outdir if self.screenshot is True
728732
729733
Takes a screenshot using a ChromiumDriver instance.
730734
731735
Args:
732736
container (Container): Container object
733737
tag (str): The container tag we are testing.
738+
739+
Returns:
740+
bool: Return True if the screenshot was successful, otherwise False.
734741
"""
735742
if not self.screenshot:
736-
return
743+
return True
737744
proto: Literal["https", "http"] = "https" if self.ssl.upper() == "TRUE" else "http"
738745
screenshot_timeout = time.time() + self.screenshot_timeout
739746
test = "Get screenshot"
@@ -757,7 +764,7 @@ def take_screenshot(self, container: Container, tag:str) -> None:
757764
raise FileNotFoundError(f"Screenshot '{self.outdir}/{tag}.png' not found")
758765
self._add_test_result(tag, test, "PASS", "-", start_time)
759766
self.logger.success("Screenshot %s: PASSED after %.2f seconds", tag, time.time() - start_time)
760-
return
767+
return True
761768
except Exception as error:
762769
logger.debug("Failed to take screenshot of %s at %s, trying again in 3 seconds", tag, endpoint, exc_info=error)
763770
time.sleep(3)
@@ -768,12 +775,18 @@ def take_screenshot(self, container: Container, tag:str) -> None:
768775
except (requests.Timeout, requests.ConnectionError, KeyError) as error:
769776
self._add_test_result(tag, test, "FAIL", f"CONNECTION ERROR: {str(error)}", start_time)
770777
self.logger.exception("Screenshot %s FAIL CONNECTION ERROR", tag)
778+
self.report_status = "FAIL"
779+
return False
771780
except TimeoutException as error:
772781
self._add_test_result(tag, test, "FAIL", f"TIMEOUT: {str(error)}", start_time)
773782
self.logger.exception("Screenshot %s FAIL TIMEOUT", tag)
783+
self.report_status = "FAIL"
784+
return False
774785
except (WebDriverException, Exception) as error:
775786
self._add_test_result(tag, test, "FAIL", f"UNKNOWN: {str(error)}", start_time)
776787
self.logger.exception("Screenshot %s FAIL UNKNOWN", tag)
788+
self.report_status = "FAIL"
789+
return False
777790
finally:
778791
try:
779792
driver.quit()

readme-vars.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ full_custom_readme: |
5353
-e CI_S6_VERBOSITY=<optional, Updates the S6_VERBOSITY env. Defaults to '2'> \
5454
-e CI_LOG_LEVEL=<optional, Sets the ci logging level. Defaults to 'INFO'> \
5555
-e DOCKER_LOGS_TIMEOUT=<optional, How long to wait in seconds while tailing the container logs before timing out. Defaults to '120'> \
56-
-e DRY_RUN=<optional, Set to 'true' when you don't want to upload files to S3 when testing>
56+
-e DRY_RUN=<optional, Set to 'true' when you don't want to upload files to S3 when testing> \
57+
-e NODE_NAME=<optional, Name of the builder that runs the CI test.> \
5758
-t lsiodev/ci:latest \
5859
python3 test_build.py
5960
```

0 commit comments

Comments
 (0)