diff --git a/.forgejo/workflows/chores.yml b/.forgejo/workflows/chores.yml new file mode 100644 index 0000000..6a3bea2 --- /dev/null +++ b/.forgejo/workflows/chores.yml @@ -0,0 +1,9 @@ +on: [commit] + #schedule: + # - cron: '0 12 * * 5' + +jobs: + chores: + steps: + - name: Create Chores Issue + run: python3 scripts/chores.py \ No newline at end of file diff --git a/scripts/chores.py b/scripts/chores.py new file mode 100644 index 0000000..865d476 --- /dev/null +++ b/scripts/chores.py @@ -0,0 +1,51 @@ +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"] +except KeyError: + 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", "PrivateCoffee") +REPO_NAME = os.environ.get("CHORES_REPO_NAME", "chores") +EXPIRY_DAYS = os.environ.get("CHORES_EXPIRY_DAYS", 2) +CHORES = os.environ.get( + "CHORES_TEXT", "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"))