mirror of
https://github.com/Cian-H/iform-invenio.git
synced 2026-08-16 16:32:50 +01:00
119 lines
3.6 KiB
Python
119 lines
3.6 KiB
Python
import trustme
|
|
import typer
|
|
from loguru import logger
|
|
|
|
from cli.config import config
|
|
from cli.utils import docker_compose, get_project_root, get_repo_dir
|
|
|
|
app = typer.Typer(help="Tool for generating development SSL certificates.")
|
|
|
|
|
|
@app.command()
|
|
def generate():
|
|
"""Generates a self-signed localhost certificate using trustme."""
|
|
repo_dir = get_repo_dir()
|
|
nginx_dir = repo_dir / "docker" / "nginx"
|
|
|
|
cert_path = repo_dir / config.ssl_cert_name
|
|
key_path = repo_dir / config.ssl_key_name
|
|
|
|
if cert_path.exists() and key_path.exists():
|
|
logger.info(f"Certificates already exist at {nginx_dir}. Skipping generation.")
|
|
return
|
|
|
|
logger.info("Generating self-signed dev certificates using trustme...")
|
|
|
|
ca = trustme.CA()
|
|
server_cert = ca.issue_cert("localhost", "127.0.0.1", "::1")
|
|
|
|
server_cert.private_key_pem.write_to_path(key_path)
|
|
server_cert.cert_chain_pems[0].write_to_path(cert_path)
|
|
|
|
logger.success(f"Successfully generated {cert_path.name} and {key_path.name}.")
|
|
|
|
|
|
@app.command()
|
|
def fmt():
|
|
"""Format codebase using prettier via npx."""
|
|
logger.info("Running prettier via npx...")
|
|
from plumbum.cmd import npx
|
|
|
|
try:
|
|
npx(
|
|
"prettier",
|
|
"--write",
|
|
"**/*.{js,jsx,ts,tsx,html,css,scss,sass,svelte,yaml,json,markdown}",
|
|
)
|
|
logger.success("Formatting complete.")
|
|
except Exception as e:
|
|
logger.error(f"Formatting failed: {e}")
|
|
raise typer.Exit(1)
|
|
|
|
|
|
@app.command()
|
|
def build_wheels():
|
|
"""Build and copy wheels for local packages (theme and config)."""
|
|
from plumbum import local
|
|
from plumbum.cmd import cp, direnv, rm
|
|
|
|
root = get_project_root()
|
|
theme_dir = root.parent / config.theme_dir_name
|
|
config_dir = root.parent / config.config_dir_name
|
|
repo_dir = get_repo_dir()
|
|
|
|
logger.info("Building theme wheel...")
|
|
with local.cwd(theme_dir):
|
|
rm("-rf", "dist")
|
|
direnv("exec", ".", "uv", "build", "--package", config.theme_dir_name)
|
|
|
|
logger.info("Building config wheel...")
|
|
with local.cwd(config_dir):
|
|
rm("-rf", "dist")
|
|
direnv("exec", ".", "uv", "build", "--package", config.config_dir_name)
|
|
|
|
logger.info("Copying wheels to repository...")
|
|
wheels_dir = repo_dir / config.local_wheels_dir
|
|
wheels_dir.mkdir(exist_ok=True)
|
|
rm("-f", local.path(str(wheels_dir)) // "*.whl")
|
|
|
|
for whl in local.path(str(theme_dir / "dist")) // "*.whl":
|
|
cp(whl, wheels_dir)
|
|
for whl in local.path(str(config_dir / "dist")) // "*.whl":
|
|
cp(whl, wheels_dir)
|
|
|
|
logger.success("Successfully built and copied fresh wheels.")
|
|
|
|
|
|
@app.command()
|
|
def test_local():
|
|
"""Rebuild and restart local docker stack with fresh wheels."""
|
|
from plumbum import local
|
|
from plumbum.cmd import curl, docker
|
|
|
|
build_wheels()
|
|
|
|
logger.info("Rebuilding and restarting local docker stack...")
|
|
repo_dir = get_repo_dir()
|
|
|
|
with local.cwd(repo_dir):
|
|
docker_compose("down")
|
|
docker(
|
|
"build",
|
|
"-t",
|
|
config.docker_image_name,
|
|
"--no-cache",
|
|
"--build-arg",
|
|
"INSTALL_LOCAL_WHEELS=true",
|
|
".",
|
|
)
|
|
docker_compose("up", "-d", "--wait")
|
|
|
|
setup_cmd = "invenio db init || true; invenio db create || true; invenio alembic upgrade || true; invenio index init || true"
|
|
docker_compose("exec", "worker", "bash", "-c", setup_cmd)
|
|
|
|
try:
|
|
curl("-skI", "https://127.0.0.1:8443/")
|
|
logger.success("HTTPS verification successful.")
|
|
except Exception:
|
|
logger.warning("HTTPS verification failed.")
|