AI Implementation feature(1084): Blog Repository Clone and Pull Workflow (#3)
This commit was merged in pull request #3.
This commit is contained in:
1 parent
207e2e6bbb
commit
3fe2b90f51
9 files changed
+477
-23
No files matched your search
@@ -22,7 +22,7 @@ REQUIRED_KEYS = (
|
||||
"TZ",
|
||||
)
|
||||
|
||||
OPTIONAL_KEYS: tuple[str, ...] = ()
|
||||
OPTIONAL_KEYS: tuple[str, ...] = ("BLOG_REPO_URL", "BLOG_DIR")
|
||||
|
||||
DEFAULTS = {
|
||||
"VISIBILITY": "public",
|
||||
@@ -30,6 +30,8 @@ DEFAULTS = {
|
||||
"MAX_RETRIES": "3",
|
||||
"TZ": "Europe/Berlin",
|
||||
"RUN_AT": "09:00",
|
||||
"BLOG_REPO_URL": "https://git.chaospott.de/Chaospott/site",
|
||||
"BLOG_DIR": "blog",
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +54,8 @@ class Config:
|
||||
run_at: str
|
||||
tz: str
|
||||
data_dir: Path = field(default_factory=lambda: Path("/app/data"))
|
||||
blog_repo_url: str = "https://git.chaospott.de/Chaospott/site"
|
||||
blog_dir: Path = field(default_factory=lambda: Path("/app/data/blog"))
|
||||
extra: dict = field(default_factory=dict)
|
||||
|
||||
@property
|
||||
@@ -103,6 +107,13 @@ def load_config(dotenv_path: Optional[Path] = None) -> Config:
|
||||
|
||||
data_dir = Path(os.environ.get("DATA_DIR", "/app/data")).resolve()
|
||||
|
||||
blog_dir_raw = Path(merged["BLOG_DIR"]).expanduser()
|
||||
blog_dir = (
|
||||
blog_dir_raw
|
||||
if blog_dir_raw.is_absolute()
|
||||
else (data_dir / blog_dir_raw).resolve()
|
||||
)
|
||||
|
||||
extra = {k: v for k, v in merged.items() if k not in REQUIRED_KEYS + OPTIONAL_KEYS}
|
||||
|
||||
return Config(
|
||||
@@ -116,6 +127,8 @@ def load_config(dotenv_path: Optional[Path] = None) -> Config:
|
||||
run_at=merged["RUN_AT"],
|
||||
tz=merged["TZ"],
|
||||
data_dir=data_dir,
|
||||
blog_repo_url=merged["BLOG_REPO_URL"],
|
||||
blog_dir=blog_dir,
|
||||
extra=extra,
|
||||
)
|
||||
|
||||
@@ -151,6 +164,12 @@ def validate_config(values: dict[str, str]) -> None:
|
||||
f"VISIBILITY={visibility!r} must be one of: {sorted(ALLOWED_VISIBILITY)}"
|
||||
)
|
||||
|
||||
blog_repo_url = values.get("BLOG_REPO_URL", "")
|
||||
if blog_repo_url and not _is_valid_url(blog_repo_url):
|
||||
errors.append(
|
||||
f"BLOG_REPO_URL={blog_repo_url!r} must be a valid http(s) URL"
|
||||
)
|
||||
|
||||
tz = values.get("TZ", "")
|
||||
if tz and not _is_valid_tz(tz):
|
||||
errors.append(f"TZ={tz!r} must be a valid IANA timezone")
|
||||
|
||||
Reference in new issue
Block a user