argocd-helm/scripts/release-analysis/fetch_releases.py

58 lines
2 KiB
Python
Raw Normal View History

import csv
import os
from datetime import datetime
import requests
# List of GitHub repository URLs we care about
repos = [
("argo-cd", "https://api.github.com/repos/argoproj/argo-cd/releases"),
("argo-workflows", "https://api.github.com/repos/argoproj/argo-workflows/releases"),
("argo-events", "https://api.github.com/repos/argoproj/argo-events/releases"),
("argo-rollouts", "https://api.github.com/repos/argoproj/argo-rollouts/releases"),
]
# Get the GitHub token from environment variables
github_token = os.getenv("GITHUB_TOKEN")
if not github_token:
raise ValueError("GITHUB_TOKEN environment variable is not set")
# Fetch all releases with pagination
def fetch_all_releases(url):
releases = []
headers = {"Authorization": f"token {github_token}"}
while url:
response = requests.get(url, headers=headers)
response.raise_for_status()
releases.extend(response.json())
url = response.links.get("next", {}).get("url")
return releases
# Fetch releases and write to a CSV file
def fetch_and_write_releases(csv_file):
with open(csv_file, mode="w", newline="") as file:
writer = csv.writer(file)
writer.writerow(["Repository", "Release Tag", "Release Date", "Release Time"])
for repo_name, repo_url in repos:
releases = fetch_all_releases(repo_url)
for release in releases:
tag_name = release["tag_name"]
published_at = release["published_at"]
release_date = datetime.strptime(
published_at, "%Y-%m-%dT%H:%M:%SZ"
).date()
release_time = datetime.strptime(
published_at, "%Y-%m-%dT%H:%M:%SZ"
).time()
writer.writerow([repo_name, tag_name, release_date, release_time])
print(f"Release data has been written to {csv_file}")
# Example usage
if __name__ == "__main__":
fetch_and_write_releases("argo_releases.csv")