67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
"""Construye y publica el Bot de Descarga en el prefijo latest de MinIO."""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import boto3
|
|
from botocore.config import Config
|
|
|
|
from package_bot import DEFAULT_OUTPUT, build_package, sha256
|
|
|
|
|
|
DEFAULT_ENDPOINT = "https://s3.builker.xyz"
|
|
DEFAULT_BUCKET = "apps-versions"
|
|
DEFAULT_KEY = "BotDescargaPYSCuentasMedicas/latest/bot_descarga.zip"
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT)
|
|
parser.add_argument("--build-only", action="store_true")
|
|
args = parser.parse_args()
|
|
artifact = build_package(output=args.output.resolve())
|
|
print(f"Paquete validado: {artifact} ({sha256(artifact)})")
|
|
if args.build_only:
|
|
return 0
|
|
|
|
access = os.getenv("MINIO_ACCESS_KEY") or os.getenv("AWS_ACCESS_KEY_ID")
|
|
secret = os.getenv("MINIO_SECRET_KEY") or os.getenv("AWS_SECRET_ACCESS_KEY")
|
|
if not access or not secret:
|
|
print("Faltan MINIO_ACCESS_KEY/MINIO_SECRET_KEY para publicar.", file=sys.stderr)
|
|
return 2
|
|
endpoint = os.getenv("MINIO_ENDPOINT", DEFAULT_ENDPOINT).rstrip("/")
|
|
bucket = os.getenv("MINIO_APPS_BUCKET", DEFAULT_BUCKET)
|
|
key = os.getenv("DOWNLOAD_PACKAGE_KEY", DEFAULT_KEY).strip("/")
|
|
client = boto3.client(
|
|
"s3",
|
|
endpoint_url=endpoint,
|
|
aws_access_key_id=access,
|
|
aws_secret_access_key=secret,
|
|
region_name=os.getenv("MINIO_REGION", "us-east-1"),
|
|
config=Config(s3={"addressing_style": "path"}),
|
|
)
|
|
client.upload_file(
|
|
str(artifact),
|
|
bucket,
|
|
key,
|
|
ExtraArgs={"ContentType": "application/zip"},
|
|
)
|
|
remote = client.head_object(Bucket=bucket, Key=key)
|
|
remote_size = int(remote.get("ContentLength") or 0)
|
|
if remote_size != artifact.stat().st_size:
|
|
print(
|
|
f"La verificación remota falló: local={artifact.stat().st_size}, remoto={remote_size}.",
|
|
file=sys.stderr,
|
|
)
|
|
return 3
|
|
print(f"Publicado: {endpoint}/{bucket}/{key}")
|
|
print(f"Verificado: {remote_size} bytes")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|