Add Gitea release management script with upload functionality and .gitignore
This commit is contained in:
		
						commit
						d251a13aa7
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| /upload/ | ||||
| .env | ||||
							
								
								
									
										96
									
								
								gitea-uploader.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								gitea-uploader.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | ||||
| import os | ||||
| import sys | ||||
| import argparse | ||||
| import requests | ||||
| from concurrent.futures import ThreadPoolExecutor | ||||
| from dotenv import load_dotenv | ||||
| 
 | ||||
| # Load environment variables | ||||
| load_dotenv() | ||||
| GITEA_SERVER = os.getenv("GITEA_SERVER") | ||||
| API_TOKEN = os.getenv("API_TOKEN") | ||||
| 
 | ||||
| if not GITEA_SERVER or not API_TOKEN: | ||||
|     print("Error: GITEA_SERVER and API_TOKEN must be set in a .env file.") | ||||
|     sys.exit(1) | ||||
| 
 | ||||
| # Helper functions | ||||
| def list_releases(owner, repo): | ||||
|     url = f"{GITEA_SERVER}/api/v1/repos/{owner}/{repo}/releases" | ||||
|     headers = {"Authorization": f"token {API_TOKEN}"} | ||||
| 
 | ||||
|     response = requests.get(url, headers=headers) | ||||
| 
 | ||||
|     if response.status_code == 200: | ||||
|         releases = response.json() | ||||
|         if not releases: | ||||
|             print("No releases found.") | ||||
|         else: | ||||
|             print("Releases:") | ||||
|             for release in releases: | ||||
|                 print(f"ID: {release['id']}, Tag: {release['tag_name']}, Name: {release['name']}") | ||||
|     else: | ||||
|         print(f"Failed to list releases: {response.status_code} {response.text}") | ||||
| 
 | ||||
| def upload_file(owner, repo, release_id, file_path): | ||||
|     url = f"{GITEA_SERVER}/api/v1/repos/{owner}/{repo}/releases/{release_id}/assets" | ||||
|     headers = {"Authorization": f"token {API_TOKEN}"} | ||||
| 
 | ||||
|     file_name = os.path.basename(file_path) | ||||
|     with open(file_path, 'rb') as file: | ||||
|         files = {"attachment": (file_name, file)} | ||||
|         params = {"name": file_name} | ||||
|         response = requests.post(url, headers=headers, files=files, params=params) | ||||
| 
 | ||||
|         if response.status_code == 201: | ||||
|             print(f"Successfully uploaded {file_name}.") | ||||
|         else: | ||||
|             print(f"Failed to upload {file_name}: {response.status_code} {response.text}") | ||||
| 
 | ||||
| def upload_folder(owner, repo, release_id, folder_path="upload"): | ||||
|     if not os.path.isdir(folder_path): | ||||
|         print(f"Folder '{folder_path}' does not exist.") | ||||
|         return | ||||
| 
 | ||||
|     files_to_upload = [os.path.join(folder_path, file_name) for file_name in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, file_name))] | ||||
| 
 | ||||
|     if not files_to_upload: | ||||
|         print(f"No files found in folder '{folder_path}'.") | ||||
|         return | ||||
| 
 | ||||
|     print(f"Uploading {len(files_to_upload)} files from '{folder_path}'...") | ||||
| 
 | ||||
|     # Use ThreadPoolExecutor for parallel uploads | ||||
|     with ThreadPoolExecutor() as executor: | ||||
|         futures = [executor.submit(upload_file, owner, repo, release_id, file_path) for file_path in files_to_upload] | ||||
|         for future in futures: | ||||
|             future.result()  # Wait for each upload to complete | ||||
| 
 | ||||
| def main(): | ||||
|     parser = argparse.ArgumentParser(description="Gitea Release Management Script") | ||||
|     subparsers = parser.add_subparsers(dest="command", required=True) | ||||
| 
 | ||||
|     # List releases | ||||
|     list_parser = subparsers.add_parser("list", help="List releases") | ||||
|     list_parser.add_argument("owner", help="Repository owner") | ||||
|     list_parser.add_argument("repo", help="Repository name") | ||||
| 
 | ||||
|     # Upload file(s) | ||||
|     upload_parser = subparsers.add_parser("upload", help="Upload file(s) to a release") | ||||
|     upload_parser.add_argument("owner", help="Repository owner") | ||||
|     upload_parser.add_argument("repo", help="Repository name") | ||||
|     upload_parser.add_argument("id", help="Release ID") | ||||
|     upload_parser.add_argument("file", nargs="?", default=None, help="File path to upload (if not specified, upload from 'upload' folder)") | ||||
| 
 | ||||
|     args = parser.parse_args() | ||||
| 
 | ||||
|     if args.command == "list": | ||||
|         list_releases(args.owner, args.repo) | ||||
|     elif args.command == "upload": | ||||
|         if args.file: | ||||
|             upload_file(args.owner, args.repo, args.id, args.file) | ||||
|         else: | ||||
|             upload_folder(args.owner, args.repo, args.id) | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     main() | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user