Add docker admin bootstrap for clean release

This commit is contained in:
2026-03-13 11:41:44 +03:00
parent 1cef3f7e84
commit 36742cd20c
12 changed files with 254 additions and 25 deletions

View File

@@ -31,10 +31,13 @@ from src.core.logger import logger, belief_scope
#
# @PARAM: username (str) - Admin username.
# @PARAM: password (str) - Admin password.
def create_admin(username, password):
# @PARAM: email (str | None) - Optional admin email.
def create_admin(username, password, email=None):
with belief_scope("create_admin"):
db = AuthSessionLocal()
try:
normalized_email = email.strip() if isinstance(email, str) and email.strip() else None
# 1. Ensure Admin role exists
admin_role = db.query(Role).filter(Role.name == "Admin").first()
if not admin_role:
@@ -48,12 +51,13 @@ def create_admin(username, password):
existing_user = db.query(User).filter(User.username == username).first()
if existing_user:
logger.warning(f"User {username} already exists.")
return
return "exists"
# 3. Create Admin user
logger.info(f"Creating admin user: {username}")
new_user = User(
username=username,
email=normalized_email,
password_hash=get_password_hash(password),
auth_source="LOCAL",
is_active=True
@@ -62,10 +66,12 @@ def create_admin(username, password):
db.add(new_user)
db.commit()
logger.info(f"Admin user {username} created successfully.")
return "created"
except Exception as e:
logger.error(f"Failed to create admin user: {e}")
db.rollback()
raise
finally:
db.close()
# [/DEF:create_admin:Function]
@@ -74,10 +80,15 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Create initial admin user")
parser.add_argument("--username", required=True, help="Admin username")
parser.add_argument("--password", required=True, help="Admin password")
parser.add_argument("--email", required=False, help="Admin email")
args = parser.parse_args()
# Ensure DB is initialized before creating admin
init_db()
create_admin(args.username, args.password)
try:
# Ensure DB is initialized before creating admin
init_db()
create_admin(args.username, args.password, args.email)
sys.exit(0)
except Exception:
sys.exit(1)
# [/DEF:backend.src.scripts.create_admin:Module]