diff options
author | Christian Cleberg <156287552+ccleberg@users.noreply.github.com> | 2024-10-28 18:58:58 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-28 18:58:58 +0000 |
commit | c9cd2f443a8b96d9f535d330ca5bc54fc1550281 (patch) | |
tree | 07cb27592b60d570cc9ad1791465195482b77546 /github/github_commits.py | |
parent | 0ef8420632bc04f2f92d3c2146d8881182660547 (diff) | |
download | audit-tools-c9cd2f443a8b96d9f535d330ca5bc54fc1550281.tar.gz audit-tools-c9cd2f443a8b96d9f535d330ca5bc54fc1550281.tar.bz2 audit-tools-c9cd2f443a8b96d9f535d330ca5bc54fc1550281.zip |
add github API scripts
Diffstat (limited to 'github/github_commits.py')
-rw-r--r-- | github/github_commits.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/github/github_commits.py b/github/github_commits.py new file mode 100644 index 0000000..f35d5d6 --- /dev/null +++ b/github/github_commits.py @@ -0,0 +1,75 @@ +""" +Gather all commits from a specific branch of a repository in a GitHub organization. +""" + +import requests + +GITHUB_TOKEN = 'your_personal_access_token' +ORGANIZATION = 'your_organization' +REPOSITORY = 'your_repository' +BRANCH = 'your_branch' + +# Headers for authentication +headers = { + 'Authorization': f'token {GITHUB_TOKEN}', + 'Accept': 'application/vnd.github.v3+json' +} + +# Define a timeout value (in seconds) +TIMEOUT = 10 + +def get_commit_log(org, repo, branch): + """ + Get the full commit log for a repository branch + """ + commits = [] + page = 1 + while True: + url = (f'https://api.github.com/repos/{org}/{repo}/commits?sha={branch}' + f'&page={page}&per_page=100') + response = requests.get(url, headers=headers, timeout=TIMEOUT) + response.raise_for_status() + page_commits = response.json() + if not page_commits: + break + commits.extend(page_commits) + page += 1 + return commits + +def get_commit_details(org, repo, sha): + """ + Get detailed information for a specific commit + """ + url = f'https://api.github.com/repos/{org}/{repo}/commits/{sha}' + response = requests.get(url, headers=headers, timeout=TIMEOUT) + response.raise_for_status() + return response.json() + +if __name__ == '__main__': + try: + # Get the full commit log for the specified branch + commit_log = get_commit_log(ORGANIZATION, REPOSITORY, BRANCH) + print(f"Total commits in the repository '{REPOSITORY}' on branch " + f"'{BRANCH}': {len(commit_log)}") + + # Get detailed information for each commit + for commit in commit_log: + sha_hash = commit['sha'] + commit_details = get_commit_details(ORGANIZATION, REPOSITORY, + sha_hash) + print(f"\nCommit SHA: {commit_details['sha']}") + print(f"Author: {commit_details['commit']['author']['name']} " + f"<{commit_details['commit']['author']['email']}>") + print(f"Date: {commit_details['commit']['author']['date']}") + print(f"Message: {commit_details['commit']['message']}") + print(f"URL: {commit_details['html_url']}") + print("Files changed:") + for file in commit_details['files']: + print(f" - {file['filename']} ({file['status']})") + print(f" Additions: {file['additions']}, " + f"Deletions: {file['deletions']}, " + f"Changes: {file['changes']}") + except requests.exceptions.Timeout: + print("The request timed out") + except requests.exceptions.RequestException as e: + print(f"An error occurred: {e}") |