import argparse
from pathlib import Path
import subprocess
import tomlkit
CARGO_WORKSPACE_DIR = Path(__file__).resolve().parent.parent
CARGO_TOML_FILE = CARGO_WORKSPACE_DIR / "Cargo.toml"
def publish_package(pkg: str, dry_run: bool):
cmd = [
"cargo",
"publish",
"--allow-dirty",
"--locked",
f"--package={pkg}",
]
if dry_run:
print(f"$ {' '.join(cmd)}")
else:
subprocess.run(
[
"cargo",
"publish",
"--allow-dirty",
"--locked",
f"--package={pkg}",
],
check=True,
)
def update_dependencies(manifest: tomlkit.TOMLDocument, version: str):
if "dependencies" not in manifest:
return
for meta in manifest["dependencies"].values():
if not meta.is_inline_table():
continue
meta["version"] = version
def publish(version: str, dry_run: bool):
version = version.removeprefix('transform-sdk/v')
manifest = tomlkit.loads(CARGO_TOML_FILE.read_text())
manifest["workspace"]["package"]["version"] = version
CARGO_TOML_FILE.write_text(tomlkit.dumps(manifest))
for path in CARGO_WORKSPACE_DIR.glob("**/*.toml"):
if "examples" in path.parts:
continue
manifest = tomlkit.loads(path.read_text())
update_dependencies(manifest, version)
path.write_text(tomlkit.dumps(manifest))
for pkg in [
"-varint", "-sr-types", "-sr-sys", "-sr", "-types", "-sys", ""
]:
publish_package(f"redpanda-transform-sdk{pkg}", dry_run)
parser = argparse.ArgumentParser()
parser.add_argument('--version', type=str, required=True)
parser.add_argument('--dry', action='store_true')
if __name__ == '__main__':
args = parser.parse_args()
publish(version=args.version, dry_run=args.dry)