aboutsummaryrefslogtreecommitdiff
path: root/root/scripts/sync-monorepo-public.py
diff options
context:
space:
mode:
authorvkcku <[email protected]>2026-06-01 20:39:06 +0530
committervkcku <[email protected]>2026-06-01 20:39:06 +0530
commit849fa5b012d71eb0b8e3510127f5817a9f0e1aa7 (patch)
tree3c41f7449b71c619b17272684eb9b15aad82f2cd /root/scripts/sync-monorepo-public.py
parentinfra: create monorepo-public repo if needed (diff)
root: add script to push to public monorepo
monorepo-revid: a185caa6046909e6a4a04114a2876052555af252
Diffstat (limited to 'root/scripts/sync-monorepo-public.py')
-rw-r--r--root/scripts/sync-monorepo-public.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/root/scripts/sync-monorepo-public.py b/root/scripts/sync-monorepo-public.py
new file mode 100644
index 0000000..fe1592f
--- /dev/null
+++ b/root/scripts/sync-monorepo-public.py
@@ -0,0 +1,60 @@
+import os
+import re
+import shutil
+import subprocess
+import typing
+
+import git_filter_repo
+
+TRAILER_KEY = b"monorepo-revid:"
+TRAILER_LINE_RE = re.compile(rb"^[A-Za-z0-9-]+:\s")
+REMOTE_URL = "ssh://git@plato/~/monorepo-public"
+
+
+def commit_callback(commit: git_filter_repo.Commit, metadata: object) -> None:
+ if not commit.message:
+ return
+
+ assert isinstance(commit.message, bytes), (
+ f"commit.message was not bytes but was {type(commit.message)}"
+ )
+ assert TRAILER_KEY not in commit.message, (
+ f"found monorepo-revid trailer header in:\n\n{commit.message}"
+ )
+
+ lines = commit.message.splitlines()
+
+ assert isinstance(commit.original_id, bytes), (
+ f"commit.original_id was not bytes but was {type(commit.original_id)}"
+ )
+
+ trailer = TRAILER_KEY + b" " + commit.original_id
+ in_trailer_block = (
+ bool(lines) and len(lines) > 1 and TRAILER_LINE_RE.match(lines[-1]) is not None
+ )
+ if not in_trailer_block and lines and lines[-1] != b"":
+ lines.append(b"")
+
+ lines.append(trailer)
+
+ commit.message = b"\n".join(lines) + b"\n"
+
+
+def main(src: str, dst: str) -> None:
+ subprocess.run(["git", "clone", "--no-local", "--", src, dst], check=True)
+ os.chdir(dst)
+ git_filter_repo.RepoFilter(
+ git_filter_repo.FilteringOptions.parse_args(
+ ["--path", "private/", "--invert-paths"]
+ ),
+ commit_callback=commit_callback,
+ ).run()
+ subprocess.run(["git", "remote", "add", "origin", REMOTE_URL], check=True)
+ subprocess.run(["git", "push", "--force", "--all", "origin"], check=True)
+
+
+if __name__ == "__main__":
+ src = os.getcwd()
+ dst = "/tmp/monorepo-public-sync"
+ shutil.rmtree(dst, ignore_errors=True)
+ main(src, dst)