Work with repo without releases

This commit is contained in:
2023-08-17 20:11:15 +00:00
parent 62cdd0f523
commit 735abfa48f

View File

@@ -19,17 +19,31 @@ github_latest_release_metric = Gauge(
# GitHub API token (replace with your actual token) # GitHub API token (replace with your actual token)
github_api_token = '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' github_api_token = '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'
# Function to fetch the latest release version from GitHub # Function to fetch the latest release version or the latest tag from GitHub
def get_latest_release(repo_url): def get_latest_version(repo_url):
api_url = f"https://api.github.com/repos/{repo_url}/releases/latest" api_url = f"https://api.github.com/repos/{repo_url}/releases/latest"
headers = { headers = {
'Authorization': f'Bearer {github_api_token}', 'Authorization': f'Bearer {github_api_token}',
'Accept': 'application/vnd.github.v3+json' 'Accept': 'application/vnd.github.v3+json'
} }
response = requests.get(api_url, headers=headers) response = requests.get(api_url, headers=headers)
# If the repository has releases, get the latest release version
if response.status_code == 200:
data = response.json() data = response.json()
return data["tag_name"] return data["tag_name"]
# If the repository doesn't have releases, get the latest tag
if response.status_code == 404:
api_url = f"https://api.github.com/repos/{repo_url}/tags"
response = requests.get(api_url, headers=headers)
data = response.json()
if data:
return data[0]["name"]
# If both release and tag information is not available, return None
return None
@app.route('/metrics') @app.route('/metrics')
def metrics(): def metrics():
# Get the GitHub repository URL from the query parameter # Get the GitHub repository URL from the query parameter
@@ -38,14 +52,16 @@ def metrics():
return "Error: Please provide a 'repo' parameter.", 400 return "Error: Please provide a 'repo' parameter.", 400
try: try:
latest_release = get_latest_release(repo_url) latest_version = get_latest_version(repo_url)
print(f"Latest release: {latest_release}")
if latest_version:
print(f"Latest version: {latest_version}")
# Reset the metric to its initial state # Reset the metric to its initial state
github_latest_release_metric.clear() github_latest_release_metric.clear()
# Set the metric value to 1 with appropriate labels # Set the metric value to 1 with appropriate labels
github_latest_release_metric.labels(repo=repo_url, version=latest_release).set(1) github_latest_release_metric.labels(repo=repo_url, version=latest_version).set(1)
except Exception as e: except Exception as e:
print(f"Error: {e}") print(f"Error: {e}")