Skip to content

Commit ce484d2

Browse files
committed
add packaging script
1 parent 5ea0fdf commit ce484d2

File tree

2 files changed

+79
-1
lines changed

2 files changed

+79
-1
lines changed

package.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import shutil
2+
import typing as t
3+
from pathlib import Path
4+
5+
from packaging.version import InvalidVersion
6+
from packaging.version import Version as PkgVersion
7+
import tomli
8+
9+
FilePath = t.Union[str, Path]
10+
11+
12+
def create_package(
13+
source_folder: FilePath,
14+
typst_packages_folder: FilePath,
15+
package_paths: t.List[str | FilePath],
16+
version: str,
17+
package_name: str,
18+
namespace="preview",
19+
exist_ok=False,
20+
):
21+
try:
22+
PkgVersion(version)
23+
except InvalidVersion:
24+
raise ValueError(f"{version} is not a valid version")
25+
26+
upload_folder = Path(typst_packages_folder) / namespace / package_name / version
27+
if upload_folder.exists() and not exist_ok:
28+
raise FileExistsError(f"{upload_folder} already exists")
29+
elif upload_folder.exists():
30+
shutil.rmtree(upload_folder)
31+
upload_folder.mkdir(parents=True)
32+
33+
src = Path(source_folder)
34+
for path in map(Path, package_paths):
35+
if path.is_dir():
36+
shutil.copytree(
37+
src.joinpath(path), upload_folder.joinpath(path), dirs_exist_ok=True
38+
)
39+
else:
40+
shutil.copy(src.joinpath(path), upload_folder.joinpath(path))
41+
return upload_folder
42+
43+
44+
if "__main__" == __name__:
45+
import argparse
46+
import os
47+
48+
here = Path(__file__).resolve().parent
49+
default_packages_folder = os.environ.get("typst_packages_folder", None)
50+
51+
parser = argparse.ArgumentParser()
52+
parser.add_argument("toml", help="path to typst.toml", default=here / "typst.toml")
53+
parser.add_argument("--namespace", default="preview")
54+
parser.add_argument("--exist-ok", action="store_true")
55+
parser.add_argument("--typst-packages-folder", default=default_packages_folder)
56+
args = parser.parse_args()
57+
58+
toml_file = Path(args.toml).resolve()
59+
with open(toml_file, "rb") as ifile:
60+
toml_text = tomli.load(ifile) # type: ignore
61+
version = toml_text["package"]["version"]
62+
package_name = toml_text["package"]["name"]
63+
package_paths = toml_text["tool"]["packager"]["paths"]
64+
package_paths.append(toml_file.name)
65+
66+
folder = create_package(
67+
Path(args.toml).resolve().parent,
68+
args.typst_packages_folder,
69+
package_paths,
70+
version,
71+
package_name,
72+
namespace=args.namespace,
73+
exist_ok=args.exist_ok,
74+
)
75+
print(f"Created package in {folder}")

typst.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@ authors = ["Nathan Jessurun"]
66
license = "Unlicense"
77
description = "Helpful functions for content positioning and margin comments/notes"
88
repository = "https://github.com/ntjess/typst-drafting"
9-
keywords = ["comments", "notes", "margins", "positioning", "layout", "ruler"]
9+
keywords = ["comments", "notes", "margins", "positioning", "layout", "ruler"]
10+
11+
[tool.packager]
12+
paths = ["drafting.typ", "LICENSE", "README.md"]

0 commit comments

Comments
 (0)