Add shared auth, deployment config, and dev tooling

This commit is contained in:
brutsalvadi
2026-05-01 21:55:55 +02:00
parent c416dbc226
commit 2b440b02e6
7 changed files with 766 additions and 95 deletions
+134
View File
@@ -0,0 +1,134 @@
#!/usr/bin/env python3
"""Wiki dev test.
Starts the wiki edit sidecar + Astro dev server pointing at the
bincio_activity dev database so both apps share the same users.
Prerequisites:
Run bincio_activity's dev_test.py first to create the shared DB:
cd ~/src/bincio_activity
uv run python scripts/dev_test.py --fresh
Run from the bincio_wiki project root:
uv run python scripts/dev_test.py [--wiki-only]
Options:
--wiki-only Add a wiki-only user (no activity access) to test that path
Credentials (same as bincio_activity dev):
dave / testpass (admin, wiki + activity)
brut / testpass (wiki + activity)
wiki_user / testpass (wiki only, if --wiki-only is used)
URL: http://localhost:4321
"""
import argparse
import os
import platform
import resource
import subprocess
import sys
from pathlib import Path
PROJECT_DIR = Path(__file__).resolve().parent.parent
ACTIVITY_DIR = PROJECT_DIR.parent / "bincio_activity"
SHARED_DB = Path("/tmp/bincio_dev_test/instance.db")
PASSWORD = "testpass"
def section(msg: str) -> None:
print(f"\n\033[1;36m▸ {msg}\033[0m")
def ok(msg: str) -> None:
print(f" \033[32m✓\033[0m {msg}")
def warn(msg: str) -> None:
print(f" \033[33m·\033[0m {msg}")
def err(msg: str) -> None:
print(f" \033[31m✗\033[0m {msg}", file=sys.stderr)
def check_shared_db() -> None:
section("Checking shared DB")
if not SHARED_DB.exists():
err(f"Shared DB not found at {SHARED_DB}")
err("Run bincio_activity's dev_test.py first:")
err(f" cd {ACTIVITY_DIR}")
err(" uv run python scripts/dev_test.py --fresh")
sys.exit(1)
ok(f"Found {SHARED_DB}")
def add_wiki_only_user() -> None:
section("Adding wiki-only test user")
sys.path.insert(0, str(ACTIVITY_DIR))
from bincio.serve.db import open_db, get_user, create_user
db = open_db(SHARED_DB.parent)
if get_user(db, "wiki_user"):
warn("user 'wiki_user' already exists — skipping")
else:
create_user(db, "wiki_user", "Wiki User", PASSWORD, is_admin=False,
wiki_access=True, activity_access=False)
ok("wiki-only user 'wiki_user' created")
def start_dev() -> None:
section("Starting wiki dev server")
print()
print(" \033[1mCredentials\033[0m")
print(f" dave / {PASSWORD} (admin, wiki + activity)")
print(f" brut / {PASSWORD} (wiki + activity)")
print()
print(" \033[1mURL\033[0m http://localhost:4321")
print()
print(" Press Ctrl+C to stop.\n")
env = os.environ.copy()
env["SHARED_DB_PATH"] = str(SHARED_DB)
try:
subprocess.run(
["bash", "scripts/dev.sh", "--edit"],
cwd=PROJECT_DIR,
env=env,
)
except KeyboardInterrupt:
pass
def raise_open_file_limit() -> None:
if platform.system() != "Darwin":
return
target = 65536
soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
if soft < target:
resource.setrlimit(resource.RLIMIT_NOFILE, (min(target, hard), hard))
ok(f"open-file limit raised to {min(target, hard)}")
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("--wiki-only", action="store_true",
help="Add a wiki-only user (no activity access) for testing")
args = parser.parse_args()
raise_open_file_limit()
print(f"\033[1mbincio_wiki dev test\033[0m → shared DB: {SHARED_DB}")
check_shared_db()
if args.wiki_only:
add_wiki_only_user()
start_dev()
if __name__ == "__main__":
main()