Kumi
3d13ae755a
Some checks failed
/ chores (push) Failing after 16s
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.
54 lines
1.3 KiB
Python
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"))
|