pipelines/scripts/chores.py
Kumi 3d13ae755a
Some checks failed
/ chores (push) Failing after 16s
Enhance env var handling in chore script
Refactored the chores script to improve the robustness of environment
variable handling. This includes mandatory checks for the FORGEJO_TOKEN
and default values or prompts for missing optional environment
variables. Added assertion to ensure the token is present after
retrieval which, combined with the KeyError, will provide better error
handling. Optional variables now use a fallback value directly in the
get method for concise expression.

Resolves issue with silent failures when required environment settings
are not provided.
2024-02-18 13:21:39 +01:00

54 lines
1.3 KiB
Python

import pathlib
import json
import argparse
import os
import urllib.request
import logging
from datetime import datetime, timedelta
FORGEJO_URL = os.environ.get("FORGEJO_URL", "https://git.private.coffee")
try:
TOKEN = os.environ["FORGEJO_TOKEN"]
assert TOKEN
except (KeyError, AssertionError):
logging.error("FORGEJO_TOKEN environment variable is required")
exit(1)
ASSIGNEES = os.environ.get("CHORES_ASSIGNEES").split()
REPO_OWNER = os.environ.get("CHORES_REPO_OWNER") or "PrivateCoffee"
REPO_NAME = os.environ.get("CHORES_REPO_NAME") or "chores"
EXPIRY_DAYS = int(os.environ.get("CHORES_EXPIRY_DAYS") or 2)
CHORES = (
os.environ.get("CHORES_TEXT")
or "Looks like you forgot to set the CHORES_TEXT environment variable."
)
due_date = (datetime.utcnow() + timedelta(days=EXPIRY_DAYS)).isoformat()
payload = {
"token": TOKEN,
"title": "Weekly Chores",
"body": CHORES,
"due_date": due_date,
}
if ASSIGNEES:
payload["assignees"] = ASSIGNEES
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
}
request = urllib.request.Request(
f"{FORGEJO_URL}/api/v1/repos/{REPO_OWNER}/{REPO_NAME}/issues",
data=json.dumps(payload).encode("utf-8"),
headers=headers,
method="POST",
)
with urllib.request.urlopen(request) as response:
print(response.read().decode("utf-8"))