mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-04-22 21:47:56 +00:00
1295c36241
- Fixed TypeScript type assertion issues - Updated imports from api-augment/substrate to api-augment/bizinikiwi - Fixed imgConvert.mjs header and imports - Added @ts-expect-error for runtime-converted types - Fixed all @polkadot copyright headers to @pezkuwi
108 lines
3.1 KiB
Python
Executable File
108 lines
3.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Slow Crate Publisher - 6 dakikada bir 1 crate publish eder
|
|
Rate limit'e takilmamak icin yavas yavas publish yapar.
|
|
|
|
Kullanim:
|
|
nohup python3 publish_crates_slow.py > publish_log.txt 2>&1 &
|
|
"""
|
|
|
|
import subprocess
|
|
import os
|
|
import time
|
|
from datetime import datetime
|
|
|
|
PLACEHOLDER_DIR = '/home/mamostehp/kurdistan-sdk/crate_placeholders'
|
|
LOG_FILE = '/home/mamostehp/kurdistan-sdk/publish_log.txt'
|
|
INTERVAL_SECONDS = 360 # 6 dakika
|
|
|
|
def log(msg):
|
|
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
|
line = f"[{timestamp}] {msg}"
|
|
print(line, flush=True)
|
|
with open(LOG_FILE, 'a') as f:
|
|
f.write(line + '\n')
|
|
|
|
def is_published(name):
|
|
"""crates.io'da mevcut mu kontrol et"""
|
|
result = subprocess.run(
|
|
['cargo', 'search', name, '--limit', '1'],
|
|
capture_output=True, text=True, timeout=30
|
|
)
|
|
return f'{name} = ' in result.stdout
|
|
|
|
def publish_crate(name):
|
|
"""Tek bir crate publish et"""
|
|
crate_dir = os.path.join(PLACEHOLDER_DIR, name)
|
|
manifest = os.path.join(crate_dir, 'Cargo.toml')
|
|
|
|
if not os.path.exists(manifest):
|
|
return False, "Cargo.toml not found"
|
|
|
|
result = subprocess.run(
|
|
['cargo', 'publish', '--manifest-path', manifest],
|
|
capture_output=True, text=True, cwd=crate_dir, timeout=180
|
|
)
|
|
|
|
if result.returncode == 0:
|
|
return True, "Success"
|
|
elif 'already uploaded' in result.stderr or 'already exists' in result.stderr:
|
|
return True, "Already exists"
|
|
elif '429' in result.stderr or 'Too Many Requests' in result.stderr:
|
|
return False, "Rate limited"
|
|
else:
|
|
return False, result.stderr[:200]
|
|
|
|
def get_unpublished_crates():
|
|
"""Henuz publish edilmemis crate'leri bul"""
|
|
crates = sorted([d for d in os.listdir(PLACEHOLDER_DIR)
|
|
if os.path.isdir(os.path.join(PLACEHOLDER_DIR, d))])
|
|
|
|
unpublished = []
|
|
for crate in crates:
|
|
if not is_published(crate):
|
|
unpublished.append(crate)
|
|
return unpublished
|
|
|
|
def main():
|
|
log("=" * 60)
|
|
log("Slow Crate Publisher baslatildi")
|
|
log(f"Interval: {INTERVAL_SECONDS} saniye (6 dakika)")
|
|
log("=" * 60)
|
|
|
|
unpublished = get_unpublished_crates()
|
|
total = len(unpublished)
|
|
log(f"Toplam {total} crate publish edilecek")
|
|
|
|
success_count = 0
|
|
fail_count = 0
|
|
|
|
for i, crate in enumerate(unpublished, 1):
|
|
log(f"[{i}/{total}] Publishing: {crate}")
|
|
|
|
success, msg = publish_crate(crate)
|
|
|
|
if success:
|
|
log(f" ✓ {msg}")
|
|
success_count += 1
|
|
else:
|
|
log(f" ✗ {msg}")
|
|
fail_count += 1
|
|
|
|
# Rate limit durumunda ekstra bekle
|
|
if "Rate limited" in msg:
|
|
log(" Rate limited! 10 dakika bekleniyor...")
|
|
time.sleep(600)
|
|
|
|
# Sonraki crate icin bekle
|
|
if i < total:
|
|
log(f" Sonraki crate icin {INTERVAL_SECONDS}s bekleniyor...")
|
|
time.sleep(INTERVAL_SECONDS)
|
|
|
|
log("=" * 60)
|
|
log(f"Tamamlandi! Basarili: {success_count}, Basarisiz: {fail_count}")
|
|
log("=" * 60)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|