实现更新版本管理
This commit is contained in:
141
.gitea/scripts/upload_installer_to_ks3.py
Normal file
141
.gitea/scripts/upload_installer_to_ks3.py
Normal file
@@ -0,0 +1,141 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Upload GUI installer to KS3 object storage
|
||||
- Target directory: installers/
|
||||
- Set proper HTTP headers for browser download
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from ks3.connection import Connection
|
||||
|
||||
# Configure logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s [%(levelname)s] %(message)s'
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# KS3 Configuration (using actual project config)
|
||||
KS3_ACCESS_KEY = 'AKLT0Ey7Nq7ZSXykki0X0RGG'
|
||||
KS3_SECRET_KEY = 'OONxkt9wwJa1FIco21vCbirs1HB6AGzDWdRyV0k2'
|
||||
KS3_ENDPOINT = 'ks3-cn-guangzhou.ksyuncs.com' # Guangzhou region
|
||||
KS3_BUCKET = 'shuidrop-chat-server'
|
||||
KS3_IS_SECURE = True # Use HTTPS
|
||||
KS3_PREFIX = 'installers/'
|
||||
|
||||
|
||||
def get_ks3_connection():
|
||||
"""Get KS3 connection"""
|
||||
try:
|
||||
connection = Connection(
|
||||
KS3_ACCESS_KEY,
|
||||
KS3_SECRET_KEY,
|
||||
host=KS3_ENDPOINT,
|
||||
is_secure=KS3_IS_SECURE,
|
||||
timeout=300,
|
||||
)
|
||||
logger.info(f"KS3 connection established: {KS3_ENDPOINT}")
|
||||
return connection
|
||||
except Exception as e:
|
||||
logger.error(f"KS3 connection failed: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def find_latest_installer():
|
||||
"""Find the latest generated installer"""
|
||||
project_root = Path(__file__).parent.parent.parent
|
||||
installer_dir = project_root / 'installer' / 'output'
|
||||
|
||||
if not installer_dir.exists():
|
||||
logger.error(f"Installer directory not found: {installer_dir}")
|
||||
return None
|
||||
|
||||
installers = list(installer_dir.glob('*.exe'))
|
||||
if not installers:
|
||||
logger.error(f"No installer files found in: {installer_dir}")
|
||||
return None
|
||||
|
||||
latest_installer = max(installers, key=lambda p: p.stat().st_mtime)
|
||||
file_size_mb = latest_installer.stat().st_size / 1024 / 1024
|
||||
|
||||
logger.info(f"Found installer: {latest_installer.name}")
|
||||
logger.info(f"File size: {file_size_mb:.2f} MB")
|
||||
|
||||
return latest_installer
|
||||
|
||||
|
||||
def upload_installer(connection, installer_path):
|
||||
"""Upload installer to KS3"""
|
||||
try:
|
||||
bucket = connection.get_bucket(KS3_BUCKET)
|
||||
ks3_key = f"{KS3_PREFIX}{installer_path.name}"
|
||||
|
||||
logger.info(f"Starting upload to KS3...")
|
||||
logger.info(f"Target path: {ks3_key}")
|
||||
|
||||
key = bucket.new_key(ks3_key)
|
||||
|
||||
with open(installer_path, 'rb') as f:
|
||||
key.set_contents_from_file(
|
||||
f,
|
||||
headers={
|
||||
'Content-Type': 'application/octet-stream',
|
||||
'Content-Disposition': f'attachment; filename="{installer_path.name}"',
|
||||
'Cache-Control': 'public, max-age=3600',
|
||||
'x-kss-storage-class': 'STANDARD'
|
||||
}
|
||||
)
|
||||
|
||||
key.set_acl('public-read')
|
||||
|
||||
# Generate download URL (using HTTPS)
|
||||
protocol = 'https' if KS3_IS_SECURE else 'http'
|
||||
download_url = f"{protocol}://{KS3_ENDPOINT}/{KS3_BUCKET}/{ks3_key}"
|
||||
|
||||
logger.info(f"Upload successful!")
|
||||
logger.info(f"Download URL: {download_url}")
|
||||
|
||||
return download_url
|
||||
except Exception as e:
|
||||
logger.error(f"Upload failed: {e}")
|
||||
import traceback
|
||||
logger.error(traceback.format_exc())
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
"""Main function"""
|
||||
logger.info("=" * 70)
|
||||
logger.info("Starting GUI installer upload to KS3")
|
||||
logger.info(f"KS3 Endpoint: {KS3_ENDPOINT}")
|
||||
logger.info(f"Bucket: {KS3_BUCKET}")
|
||||
logger.info(f"Target directory: {KS3_PREFIX}")
|
||||
logger.info("=" * 70)
|
||||
|
||||
installer_path = find_latest_installer()
|
||||
if not installer_path:
|
||||
return 1
|
||||
|
||||
connection = get_ks3_connection()
|
||||
if not connection:
|
||||
return 1
|
||||
|
||||
download_url = upload_installer(connection, installer_path)
|
||||
if not download_url:
|
||||
return 1
|
||||
|
||||
logger.info("=" * 70)
|
||||
logger.info("Task completed successfully!")
|
||||
logger.info(f"Installer: {installer_path.name}")
|
||||
logger.info(f"Download URL: {download_url}")
|
||||
logger.info("=" * 70)
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
|
||||
Reference in New Issue
Block a user