Created
November 3, 2024 13:48
-
-
Save Yiannistaos/e5b5a3d73b8ce0abc489a9874dad971e to your computer and use it in GitHub Desktop.
Delete all releases and tags from a GitHub repository
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import requests | |
| import os | |
| from typing import Optional | |
| class GitHubCleaner: | |
| def __init__(self, token: str, org: str, repo: str): | |
| """ | |
| Initialize with GitHub personal access token, organization name, and repository name. | |
| """ | |
| self.base_url = "https://api.github.com" | |
| self.headers = { | |
| "Authorization": f"token {token}", | |
| "Accept": "application/vnd.github.v3+json" | |
| } | |
| self.org = org | |
| self.repo = repo | |
| def delete_all_releases(self) -> None: | |
| """Delete all releases from the repository.""" | |
| url = f"{self.base_url}/repos/{self.org}/{self.repo}/releases" | |
| while True: | |
| response = requests.get(url, headers=self.headers) | |
| releases = response.json() | |
| if not releases: | |
| break | |
| for release in releases: | |
| release_id = release['id'] | |
| delete_url = f"{self.base_url}/repos/{self.org}/{self.repo}/releases/{release_id}" | |
| requests.delete(delete_url, headers=self.headers) | |
| print(f"Deleted release: {release['tag_name']}") | |
| def delete_all_tags(self) -> None: | |
| """Delete all tags from the repository.""" | |
| url = f"{self.base_url}/repos/{self.org}/{self.repo}/git/refs/tags" | |
| response = requests.get(url, headers=self.headers) | |
| tags = response.json() | |
| for tag in tags: | |
| tag_name = tag['ref'].split('/')[-1] | |
| delete_url = f"{self.base_url}/repos/{self.org}/{self.repo}/git/refs/tags/{tag_name}" | |
| requests.delete(delete_url, headers=self.headers) | |
| print(f"Deleted tag: {tag_name}") | |
| def main(): | |
| # Get environment variables or prompt for input | |
| token = os.getenv("GITHUB_TOKEN") or input("Enter your GitHub personal access token: ") | |
| org = input("Enter organization name: ") | |
| repo = input("Enter repository name: ") | |
| cleaner = GitHubCleaner(token, org, repo) | |
| # Confirm before proceeding | |
| confirm = input(f"Are you sure you want to delete ALL releases and tags from {org}/{repo}? (yes/no): ") | |
| if confirm.lower() != 'yes': | |
| print("Operation cancelled.") | |
| return | |
| try: | |
| print("Deleting releases...") | |
| cleaner.delete_all_releases() | |
| print("Deleting tags...") | |
| cleaner.delete_all_tags() | |
| print("Cleanup completed successfully!") | |
| except Exception as e: | |
| print(f"An error occurred: {str(e)}") | |
| if __name__ == "__main__": | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment