diff --git a/NEWS b/NEWS index 69355867..b97ff36f 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +1.9.8.dev0 + * Expand the recent contributors documentation section to include ticket submitters—not just code + contributors—because there are multiple ways to contribute to the project! See: + https://torsion.org/borgmatic/#recent-contributors + 1.9.7 * #855: Add a Sentry monitoring hook. See the documentation for more information: https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#sentry-hook diff --git a/docs/fetch-contributors b/docs/fetch-contributors index 66b984ed..81ee6e22 100755 --- a/docs/fetch-contributors +++ b/docs/fetch-contributors @@ -25,27 +25,43 @@ def list_merged_pulls(url): return tuple(pull for pull in response.json() if pull.get('merged_at')) -API_ENDPOINT_URLS = ( +def list_contributing_issues(url): + # labels = bug, design finalized, etc. + response = requests.get(f'{url}?labels=19,20,22,23,32,52,53,54', headers={'Accept': 'application/json', 'Content-Type': 'application/json'}) + + if not response.ok: + response.raise_for_status() + + return tuple(response.json()) + + +PULLS_API_ENDPOINT_URLS = ( 'https://projects.torsion.org/api/v1/repos/borgmatic-collective/borgmatic/pulls', 'https://api.github.com/repos/borgmatic-collective/borgmatic/pulls', ) +ISSUES_API_ENDPOINT_URL = 'https://projects.torsion.org/api/v1/repos/borgmatic-collective/borgmatic/issues' RECENT_CONTRIBUTORS_CUTOFF_DAYS = 365 +def get_item_timestamp(item): + return item.get('merged_at') or item.get('created_at') + + def print_contributors(): ''' Display the recent contributors as a row of avatars in an HTML fragment. ''' - pulls = tuple(itertools.chain.from_iterable(list_merged_pulls(url) for url in API_ENDPOINT_URLS)) + pulls = tuple(itertools.chain.from_iterable(list_merged_pulls(url) for url in PULLS_API_ENDPOINT_URLS)) + issues = list_contributing_issues(ISSUES_API_ENDPOINT_URL) seen_user_ids = set() print('
') - for pull in sorted(pulls, key=operator.itemgetter('merged_at'), reverse=True): - merged_at = pull.get('merged_at') - user = pull.get('user') + for item in sorted(pulls + issues, key=get_item_timestamp, reverse=True): + timestamp = get_item_timestamp(item) + user = item.get('user') - if not merged_at or not user: + if not timestamp or not user: continue user_id = user.get('id') @@ -53,7 +69,7 @@ def print_contributors(): if not user_id or user_id in seen_user_ids: continue - if datetime.datetime.fromisoformat(merged_at) < datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=RECENT_CONTRIBUTORS_CUTOFF_DAYS): + if datetime.datetime.fromisoformat(timestamp) < datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=RECENT_CONTRIBUTORS_CUTOFF_DAYS): continue seen_user_ids.add(user_id) diff --git a/pyproject.toml b/pyproject.toml index 9037da9e..f5195322 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "borgmatic" -version = "1.9.7" +version = "1.9.8.dev0" authors = [ { name="Dan Helfman", email="witten@torsion.org" }, ]