Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/build-and-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Comment thread
phracek marked this conversation as resolved.
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 }}
29 changes: 29 additions & 0 deletions Dockerfile.eol-checker
Original file line number Diff line number Diff line change
@@ -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}"
Comment thread
phracek marked this conversation as resolved.
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"]
Comment thread
phracek marked this conversation as resolved.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 .
4 changes: 1 addition & 3 deletions eol-checker/eol-checker
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)

Expand Down
33 changes: 29 additions & 4 deletions eol-checker/eol_checker/checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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 = {}
Expand All @@ -68,14 +69,38 @@ 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 = "<br>" if self.send_email else "\n"
self.bold_line = "<b>" if self.send_email else ""
self.bold_line_end = "</b>" 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:
"""
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
5 changes: 4 additions & 1 deletion eol-checker/tests/test_checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
Loading