hack/images/update_image_list.py (27 lines of code) (raw):
import subprocess
import re
HELM_RELEASE_NAME = "edp-tekton" # Specify your Helm release name
HELM_CHART_PATH = "charts/pipelines-library" # Specify the path to your Helm chart
IMAGES_FILE_PATH = "images.txt" # Output file for unique images
# This script generate a list of unique images used in the Helm chart based on enabled pipelines
# that defined into the charts/pipeline-library/values.yaml in section .Values.pipelines.deployableResources
def run_helm_template():
"""Run 'helm template' and return the output as a string."""
command = f"helm template {HELM_RELEASE_NAME} {HELM_CHART_PATH}"
result = subprocess.run(command, shell=True, capture_output=True, text=True)
if result.returncode != 0:
print(f"Error running helm template: {result.stderr}")
raise Exception("Failed to run helm template")
return result.stdout
def extract_docker_images(manifests):
"""Extract all unique images from 'docker.io' registry in the manifests."""
# Regex pattern to match images from docker.io
docker_image_pattern = re.compile(r"docker\.io/[a-zA-Z0-9._/-]+:[a-zA-Z0-9._-]+")
images = set(docker_image_pattern.findall(manifests)) # Use a set to remove duplicates
return sorted(images) # Sort the images alphabetically
def save_images_to_file(images, file_path):
"""Save images to a text file, one per line."""
with open(file_path, 'w') as file:
for image in images:
file.write(f"{image}\n")
print(f"Saved {len(images)} unique images to {file_path}")
def main():
# Run helm template and get the manifests
manifests = run_helm_template()
# Extract images from docker.io registry
images = extract_docker_images(manifests)
# Save images to the images.txt file
save_images_to_file(images, IMAGES_FILE_PATH)
if __name__ == "__main__":
main()