diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index 8b4f249..1d381d4 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -22,3 +22,15 @@ jobs: tag: "0.10.1" image_name: "upstream-daily-tests" quay_application_token: ${{ secrets.QUAY_IMAGE_SCLORG_UPDATE_DESC }} + + - name: Build and push eol-checker image to quay.io registry + uses: sclorg/build-and-push-action@v4 + with: + registry: "quay.io" + registry_namespace: "sclorg" + registry_username: ${{ secrets.QUAY_IMAGE_SCLORG_BUILDER_USERNAME }} + registry_token: ${{ secrets.QUAY_IMAGE_SCLORG_BUILDER_TOKEN }} + dockerfile: Dockerfile.eol-checker + tag: "0.10.2" + image_name: "upstream-eol-checker" + quay_application_token: ${{ secrets.QUAY_IMAGE_SCLORG_UPDATE_DESC }} diff --git a/Dockerfile.eol-checker b/Dockerfile.eol-checker new file mode 100644 index 0000000..c68f236 --- /dev/null +++ b/Dockerfile.eol-checker @@ -0,0 +1,29 @@ +FROM quay.io/fedora/fedora:42 + +ENV VERSION="42" \ + RELEASE_UPSTREAM="0.10.2" \ + HOME="/home/eol-checker" \ + SUMMARY="EOL checker for SCL org projects" \ + DESCRIPTION="This image is used to run EOL checker for SCL org projects in CI." \ + NAME="eol-checker" \ + WORK_DIR="/home/eol-checker/eol-checker" + +LABEL summary="${SUMMARY}" \ + description="${DESCRIPTION}" \ + io.k8s.description="${DESCRIPTION}" \ + io.k8s.display-name="EOL Checker for SCL org projects" \ + io.k8s.vendor="SCL org" \ + architecture="x86_64" + +RUN dnf install -y python3.13-pip git && \ + dnf clean all + +COPY requirements.sh requirements.txt "${WORK_DIR}" +RUN bash "${WORK_DIR}/requirements.sh" && pip3 install -r "${WORK_DIR}/requirements.txt" + +COPY . /root/ci-scripts +WORKDIR "${HOME}" + +# USER 900 + +CMD ["/root/ci-scripts/eol-checker/eol-checker"] diff --git a/Makefile b/Makefile index fc23f06..9deee4d 100644 --- a/Makefile +++ b/Makefile @@ -8,3 +8,4 @@ shellcheck: build_images: podman build -t quay.io/sclorg/upstream-daily-tests:0.10.1 -f Dockerfile.daily-tests . + podman build -t quay.io/sclorg/upstream-eol-checker:0.10.2 -f Dockerfile.eol-checker . diff --git a/eol-checker/eol-checker b/eol-checker/eol-checker index d497950..231cc05 100755 --- a/eol-checker/eol-checker +++ b/eol-checker/eol-checker @@ -30,7 +30,6 @@ import sys import argparse import urllib3 -from eol_checker.custom_logger import setup_logger from eol_checker.checker import ContainerEolChecker urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) @@ -66,8 +65,7 @@ def main(args): The exit code. 0 if successful, 1 if error. """ print(f"Arguments: {args}") - setup_logger(level=logging.DEBUG if args.debug else logging.INFO) - checker = ContainerEolChecker(send_email=args.send_email) + checker = ContainerEolChecker(debug=args.debug, send_email=args.send_email) checker.run() sys.exit(0) diff --git a/eol-checker/eol_checker/checker.py b/eol-checker/eol_checker/checker.py index 773e62a..de1365e 100755 --- a/eol-checker/eol_checker/checker.py +++ b/eol-checker/eol_checker/checker.py @@ -37,6 +37,7 @@ from typing import Any, Dict, List from eol_checker.jira import JiraFetcher +from eol_checker.custom_logger import setup_logger from eol_checker.yaml_loader import YamlLoader from eol_checker.utils import ( get_jira_ticket_url, @@ -57,7 +58,7 @@ class ContainerEolChecker(object): Checker for container image EOL dates from lifecycle YAML. """ - def __init__(self, send_email: bool = False): + def __init__(self, debug: bool = False, send_email: bool = False): self.today = date.today() self.lifecycle_data: Any = None self.eol_images: dict = {} @@ -68,7 +69,19 @@ def __init__(self, send_email: bool = False): self.container_to_analyze: str = "" self.jira_fetcher = JiraFetcher() self.eol_sme_mails = load_mails_from_environment() - self.send_email = send_email + # Used for OpenShift CronJob + env_debug = os.getenv("DEBUG") + debug_enabled = ( + debug if env_debug is None else env_debug.strip().lower() in {"1", "true", "yes", "on"} + ) + self._setup_logger(debug=debug_enabled) + + env_send_email = os.getenv("SEND_EMAIL") + self.send_email = ( + send_email + if env_send_email is None + else env_send_email.strip().lower() in {"1", "true", "yes", "on"} + ) self.smtp_port = 25 self.smtp_server = "smtp.redhat.com" self.end_line = "
" if self.send_email else "\n" @@ -76,6 +89,18 @@ def __init__(self, send_email: bool = False): self.bold_line_end = "" if self.send_email else "" self.mime_msg = MIMEMultipart() self.body = "" + self.debug = bool(os.getenv("DEBUG", "False")) + + def _setup_logger(self, debug: bool = False): + """ + Setup the logger. + Args: + debug: The debug flag. + """ + if debug: + setup_logger(level=logging.DEBUG) + else: + setup_logger(level=logging.INFO) def check_enddate(self, lifecycle: Dict[str, Any]) -> None: """ @@ -159,7 +184,6 @@ def summary_for_images(self, images: dict, os_name: str, eol_type: bool = True) report += ( self.bold_line + f"Summary report for {os_name}:" + self.bold_line_end + self.end_line ) - report += self.end_line + "\n" logger.debug("EOL images: '%s'", images) for container_name, values in images[os_name].items(): logger.info("Processing container: '%s' with values: '%s'", container_name, values) @@ -196,6 +220,8 @@ def summary_report(self) -> str: The summary report. """ report = "\n" + if self.jira_fetcher.jira is None: + report += "The EOL checker is not able to connect to Jira. Update the Jira credentials in the environment variables." for os_name in OS_NAMES: if len(self.already_eol_images[os_name]) != 0: report += self.summary_for_images(images=self.already_eol_images, os_name=os_name) @@ -243,7 +269,6 @@ def send_emails(self): logger.debug(", ".join(self.default_mails)) self.smtp_server = get_env_variable("SMTP_SERVER", "smtp.redhat.com") self.smtp_port = int(get_env_variable("SMTP_PORT", "25")) - self.send_email = bool(get_env_variable("SEND_EMAIL", "False")) send_from = "phracek@redhat.com" send_to = self.default_mails diff --git a/eol-checker/tests/test_checker.py b/eol-checker/tests/test_checker.py index e13f73b..aa8d59a 100644 --- a/eol-checker/tests/test_checker.py +++ b/eol-checker/tests/test_checker.py @@ -220,7 +220,10 @@ def test_summary_report_returns_newlines_when_no_images(checker): checker.approaching_eol_images[os_name] = {} checker.already_eol_images[os_name] = {} - assert checker.summary_report() == "\n\n" + assert ( + checker.summary_report() + == "\nThe EOL checker is not able to connect to Jira. Update the Jira credentials in the environment variables.\n" + ) def test_analyze_containers_skips_when_yaml_url_missing(checker):