haraka 0.2.13__tar.gz → 0.2.15__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- haraka-0.2.15/MANIFEST.in +1 -0
- {haraka-0.2.13 → haraka-0.2.15}/PKG-INFO +1 -1
- {haraka-0.2.13 → haraka-0.2.15}/haraka/post_gen/config/config.py +1 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/post_gen/runner.py +32 -3
- {haraka-0.2.13 → haraka-0.2.15}/haraka/post_gen/service/command.py +12 -2
- {haraka-0.2.13 → haraka-0.2.15}/haraka/post_gen/service/files.py +18 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/post_gen/service/gitops.py +36 -8
- {haraka-0.2.13 → haraka-0.2.15}/haraka/post_gen/service/purge.py +16 -1
- {haraka-0.2.13 → haraka-0.2.15}/haraka/utils/logging/log_util.py +8 -3
- haraka-0.2.15/haraka/utils/manifests/go-grpc-gateway-buf.yml +0 -0
- haraka-0.2.15/haraka/utils/manifests/go-grpc-protoc.yml +26 -0
- haraka-0.2.15/haraka/utils/manifests/java-springboot.yml +23 -0
- haraka-0.2.15/haraka/utils/manifests/python-fastapi.yml +23 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka.egg-info/PKG-INFO +1 -1
- {haraka-0.2.13 → haraka-0.2.15}/haraka.egg-info/SOURCES.txt +6 -1
- {haraka-0.2.13 → haraka-0.2.15}/pyproject.toml +8 -1
- {haraka-0.2.13 → haraka-0.2.15}/haraka/__init__.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/art/__init__.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/art/ascii/__init__.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/art/ascii/assets.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/art/ascii/frame/__init__.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/art/ascii/frame/border.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/art/ascii/frame/framer.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/art/ascii/frame/width_utils.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/art/create.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/post_gen/__init__.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/post_gen/config/__init__.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/post_gen/service/__init__.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/post_gen/service/assets.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/utils/__init__.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/utils/common/__init__.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/utils/common/utils.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka/utils/logging/__init__.py +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka.egg-info/dependency_links.txt +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/haraka.egg-info/top_level.txt +0 -0
- {haraka-0.2.13 → haraka-0.2.15}/setup.cfg +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
include haraka/utils/manifests/*.yml
|
@@ -1,5 +1,3 @@
|
|
1
|
-
from post_gen.gen_ascii.ascii_art import goLang
|
2
|
-
|
3
1
|
from haraka.art.create import Create
|
4
2
|
from haraka.art.ascii.assets import *
|
5
3
|
from .config import PostGenConfig
|
@@ -13,35 +11,61 @@ from haraka.post_gen.service.gitops import GitOps
|
|
13
11
|
def main(cfg: PostGenConfig) -> None:
|
14
12
|
|
15
13
|
_logger = Logger(cfg.variant)
|
16
|
-
|
14
|
+
|
15
|
+
logger = _logger.start_logger(cfg.verbose)
|
16
|
+
logger.debug("Logger instance created for variant: {cfg.variant}")
|
17
|
+
logger.debug(f"Logger started with verbosity: {cfg.verbose}")
|
17
18
|
|
18
19
|
try:
|
19
20
|
cmd = CommandRunner(logger)
|
21
|
+
logger.debug("CommandRunner initialized")
|
22
|
+
|
20
23
|
fops = FileOps(logger)
|
24
|
+
logger.debug("FileOps initialized")
|
25
|
+
|
21
26
|
purge = ResourcePurger(fops, logger)
|
27
|
+
logger.debug("ResourcePurger initialized with FileOps")
|
28
|
+
|
22
29
|
git = GitOps(cmd, logger)
|
30
|
+
logger.debug("GitOps initialized with CommandRunner")
|
23
31
|
except Exception as e:
|
24
32
|
logger.error(f"Failed to initialize components: {e}")
|
25
33
|
raise
|
26
34
|
|
27
35
|
divider("1️⃣ / 4️⃣ – Purge template junk")
|
36
|
+
logger.debug("Starting template junk purge")
|
37
|
+
|
28
38
|
purge.purge(cfg.variant, cfg.project_dir)
|
39
|
+
logger.debug(f"Purge completed for variant: {cfg.variant} in directory: {cfg.project_dir}")
|
40
|
+
|
29
41
|
logger.info("Skipping git repo creation (steps 2-4)...")
|
42
|
+
logger.debug(f"Configuration for create_repo: {cfg.create_repo}")
|
30
43
|
|
31
44
|
if cfg.create_repo:
|
32
45
|
|
33
46
|
divider("2️⃣ / 4️⃣ – Initialise Git repo")
|
47
|
+
logger.debug("Starting Git repository initialization")
|
48
|
+
|
34
49
|
git.init_repo(cfg.project_dir)
|
50
|
+
logger.debug(f"Git repository initialized in directory: {cfg.project_dir}")
|
35
51
|
|
36
52
|
divider("3️⃣ / 4️⃣ – Commit scaffold")
|
53
|
+
logger.debug("Starting staging and initial commit")
|
54
|
+
|
37
55
|
git.stage_commit(cfg.project_dir)
|
56
|
+
logger.debug(f"Initial commit completed in directory: {cfg.project_dir}")
|
38
57
|
|
39
58
|
divider("4️⃣ / 4️⃣ – Create GitHub repo & push")
|
59
|
+
logger.debug("Starting GitHub repository creation and push")
|
60
|
+
|
40
61
|
git.push_to_github(cfg.project_dir, cfg.author, cfg.project_slug, cfg.description)
|
62
|
+
logger.debug(f"Pushed to GitHub: Author: {cfg.author}, Slug: {cfg.project_slug}, Description: {cfg.description}")
|
41
63
|
|
42
64
|
divider("🎉 Project generation complete 🎉")
|
65
|
+
logger.debug("Project generation completed")
|
43
66
|
|
44
67
|
if cfg.variant == "go-grpc-protoc":
|
68
|
+
logger.debug(f"Detected variant: {cfg.variant}, beginning Go-specific steps")
|
45
69
|
go_emoji_logo = [emoji["go"]]
|
46
70
|
go_performance_mode = [
|
47
71
|
goLang, divider_xl, performance_mode, divider_l, tools, divider_s,
|
@@ -53,5 +77,10 @@ def main(cfg: PostGenConfig) -> None:
|
|
53
77
|
by, wjb_dev
|
54
78
|
]
|
55
79
|
Create.emoji(go_emoji_logo)
|
80
|
+
logger.debug("Generated Go emoji logo")
|
81
|
+
|
56
82
|
Create.ascii(go_performance_mode)
|
83
|
+
logger.debug("Generated Go performance mode ASCII art")
|
84
|
+
|
57
85
|
Create.logo(go_fast)
|
86
|
+
logger.debug("Generated Go fast ASCII logo")
|
@@ -9,6 +9,7 @@ class CommandRunner:
|
|
9
9
|
|
10
10
|
def __init__(self, logger: Logger) -> None:
|
11
11
|
self._log = logger
|
12
|
+
self._log.debug("CommandRunner initialized with logger")
|
12
13
|
|
13
14
|
def run(
|
14
15
|
self,
|
@@ -18,8 +19,10 @@ class CommandRunner:
|
|
18
19
|
check: bool = True,
|
19
20
|
) -> Optional[subprocess.CompletedProcess]:
|
20
21
|
cmd_str = " ".join(cmd)
|
22
|
+
self._log.debug(f"Command to be run: {cmd_str}")
|
21
23
|
self._log.info(f"Running: {cmd_str}")
|
22
24
|
try:
|
25
|
+
self._log.debug(f"Executing command with subprocess: {cmd_str}, cwd={cwd}, check={check}")
|
23
26
|
result = subprocess.run(
|
24
27
|
cmd,
|
25
28
|
cwd=str(cwd) if cwd else None,
|
@@ -28,13 +31,19 @@ class CommandRunner:
|
|
28
31
|
stderr=subprocess.PIPE,
|
29
32
|
text=True,
|
30
33
|
)
|
34
|
+
self._log.debug(f"Command execution completed with return code: {result.returncode}")
|
31
35
|
if result.stdout:
|
36
|
+
|
37
|
+
self._log.debug("Processing command stdout")
|
32
38
|
self._log.info(f"stdout:\n{result.stdout.strip()}")
|
39
|
+
|
40
|
+
self._log.debug("Checking for command stderr")
|
33
41
|
if result.stderr:
|
34
42
|
self._log.warn(f"stderr:\n{result.stderr.strip()}", file=sys.stderr)
|
35
43
|
return result
|
36
44
|
except subprocess.CalledProcessError as e:
|
37
|
-
self._log.error(f"
|
45
|
+
self._log.error(f"Command execution raised CalledProcessError: ({cmd_str})", file=sys.stderr)
|
46
|
+
self._log.debug(f"Return code: {e.returncode}, stdout: {e.stdout}, stderr: {e.stderr}")
|
38
47
|
if e.stdout:
|
39
48
|
self._log.error(f"stdout:\n{e.stdout.strip()}", file=sys.stderr)
|
40
49
|
if e.stderr:
|
@@ -43,7 +52,8 @@ class CommandRunner:
|
|
43
52
|
sys.exit(e.returncode)
|
44
53
|
return None
|
45
54
|
except FileNotFoundError:
|
46
|
-
self._log.error(f"
|
55
|
+
self._log.error(f"Command not found: {cmd[0]}", file=sys.stderr)
|
56
|
+
self._log.debug(f"Ensure that the command '{cmd[0]}' is installed and available in PATH")
|
47
57
|
if check:
|
48
58
|
sys.exit(1)
|
49
59
|
return None
|
@@ -15,31 +15,49 @@ class FileOps:
|
|
15
15
|
return str(path) if self.test_mode else f"<non-project-path>: {path}"
|
16
16
|
|
17
17
|
def remove_file(self, path: Path) -> None:
|
18
|
+
self.logger.debug(f"Attempting to remove file: {self._relpath(path)}")
|
18
19
|
try:
|
19
20
|
if path.is_file():
|
21
|
+
self.logger.debug(f"Confirmed {self._relpath(path)} is a file")
|
22
|
+
|
20
23
|
path.unlink()
|
24
|
+
self.logger.debug(f"File {self._relpath(path)} successfully unlinked")
|
21
25
|
self.logger.info(f"Removed file: {self._relpath(path)}")
|
22
26
|
elif path.is_dir():
|
27
|
+
self.logger.debug(f"{self._relpath(path)} is a directory, not a file. Proceeding to remove it as a directory")
|
28
|
+
|
23
29
|
shutil.rmtree(path, ignore_errors=True)
|
30
|
+
self.logger.debug(f"Directory {self._relpath(path)} removed when file was expected")
|
24
31
|
self.logger.info(f"Removed directory (expected file): {self._relpath(path)}")
|
25
32
|
except Exception as e:
|
33
|
+
self.logger.error(f"Error occurred while attempting to remove file {self._relpath(path)}: {e}")
|
26
34
|
self.logger.warn(f"Could not remove {self._relpath(path)}: {e}")
|
27
35
|
|
28
36
|
def remove_dir(self, path: Path) -> None:
|
37
|
+
self.logger.debug(f"Attempting to remove directory: {self._relpath(path)}")
|
38
|
+
|
29
39
|
if path.exists():
|
40
|
+
self.logger.debug(f"Confirmed {self._relpath(path)} exists")
|
30
41
|
try:
|
31
42
|
shutil.rmtree(path, ignore_errors=True)
|
43
|
+
self.logger.debug(f"Directory {self._relpath(path)} successfully removed")
|
32
44
|
self.logger.info(f"Removed directory: {self._relpath(path)}")
|
33
45
|
except Exception as e:
|
46
|
+
self.logger.error(f"Error occurred while attempting to remove directory {self._relpath(path)}: {e}")
|
34
47
|
self.logger.warn(f"Could not remove directory {self._relpath(path)}: {e}")
|
35
48
|
|
36
49
|
def print_tree(self, path: Path, prefix: str = "") -> None:
|
50
|
+
self.logger.debug(f"Printing directory tree starting at: {self._relpath(path)}")
|
51
|
+
|
37
52
|
if not path.exists():
|
53
|
+
self.logger.debug(f"Path {self._relpath(path)} does not exist")
|
38
54
|
self.logger.warn(f"Path does not exist: {path}")
|
39
55
|
return
|
40
56
|
entries = sorted(path.iterdir(), key=lambda p: (p.is_file(), p.name.lower()))
|
57
|
+
self.logger.debug(f"Found {len(entries)} entries in directory {self._relpath(path)}")
|
41
58
|
for i, entry in enumerate(entries):
|
42
59
|
branch = "└── " if i == len(entries) - 1 else "├── "
|
60
|
+
self.logger.debug(f"Processing entry: {entry.name} ({'directory' if entry.is_dir() else 'file'})")
|
43
61
|
print(prefix + branch + entry.name)
|
44
62
|
if entry.is_dir():
|
45
63
|
ext = " " if i == len(entries) - 1 else "│ "
|
@@ -14,47 +14,75 @@ class GitOps:
|
|
14
14
|
|
15
15
|
# ------------- public API ----------------------------------------- #
|
16
16
|
def init_repo(self, project_dir: Path) -> None:
|
17
|
+
self._log.debug(f"Checking if {project_dir}/.git exists…")
|
17
18
|
if not (project_dir / ".git").exists():
|
19
|
+
|
18
20
|
self._log.info("Initializing Git repository…")
|
21
|
+
self._log.debug(f"Running 'git init' in {project_dir}…")
|
22
|
+
|
19
23
|
self._r.run(["git", "init"], cwd=project_dir)
|
24
|
+
self._log.debug("Git repository initialized successfully.")
|
25
|
+
|
26
|
+
self._log.debug("Setting default branch to 'main'…")
|
20
27
|
self._r.run(["git", "branch", "-M", "main"], cwd=project_dir)
|
28
|
+
self._log.debug("Default branch set successfully.")
|
21
29
|
else:
|
22
|
-
self._log.warn("
|
30
|
+
self._log.warn(f"{project_dir}/.git already exists; skipping git init.")
|
23
31
|
|
24
32
|
def stage_commit(self, project_dir: Path) -> None:
|
25
33
|
self._log.info("Staging files…")
|
34
|
+
self._log.debug(f"Running 'git add .' in {project_dir}…")
|
35
|
+
|
26
36
|
self._r.run(["git", "add", "."], cwd=project_dir)
|
37
|
+
self._log.debug("Files staged successfully.")
|
38
|
+
|
39
|
+
self._log.debug("Committing changes with message: 'Initial commit'…")
|
27
40
|
res = self._r.run(["git", "commit", "-m", "Initial commit"],
|
28
41
|
cwd=project_dir, check=False)
|
29
42
|
if not res or res.returncode:
|
30
|
-
self._log.error("'git commit' failed (
|
43
|
+
self._log.error("'git commit' failed (perhaps nothing to commit); continuing…", file=sys.stderr)
|
44
|
+
else:
|
45
|
+
self._log.debug("'git commit' executed successfully.")
|
31
46
|
|
32
47
|
def push_to_github(self, project_dir: Path, author: str,
|
33
48
|
slug: str, description: str) -> None:
|
49
|
+
self._log.debug("Checking if GitHub CLI ('gh') is installed…")
|
34
50
|
if not self._has_gh():
|
51
|
+
self._log.warn("GitHub CLI ('gh') not found; skipping.")
|
35
52
|
return
|
53
|
+
self._log.debug(f"Checking existing remotes in {project_dir}…")
|
36
54
|
if "origin" in self._current_remotes(project_dir):
|
55
|
+
self._log.debug("Remote 'origin' already exists; skipping creation.")
|
37
56
|
self._log.warn("Remote 'origin' already exists; skipping create.")
|
38
57
|
return
|
58
|
+
self._log.debug("No existing 'origin' found; proceeding to create a new GitHub repo.")
|
39
59
|
repo = f"{author}/{slug}"
|
60
|
+
self._log.debug(f"Prepared repository slug: {repo}")
|
61
|
+
|
40
62
|
self._log.info(f"Creating GitHub repo {repo} & pushing…")
|
63
|
+
self._log.debug(f"Running 'gh repo create' for {repo} with description: '{description}'…")
|
41
64
|
self._r.run([
|
42
65
|
"gh", "repo", "create", repo,
|
43
66
|
"--public", "--description", description,
|
44
67
|
"--source", ".", "--remote", "origin", "--push", "--confirm"
|
45
68
|
], cwd=project_dir)
|
69
|
+
self._log.debug(f"GitHub repo {repo} created and code pushed successfully.")
|
46
70
|
|
47
71
|
# ------------- internals ------------------------------------------ #
|
48
|
-
|
49
|
-
def _current_remotes(project_dir: Path):
|
72
|
+
def _current_remotes(self, project_dir: Path):
|
50
73
|
try:
|
74
|
+
self._log.debug(f"Fetching remotes for repository at {project_dir}…")
|
51
75
|
res = subprocess.run(["git", "remote"], cwd=project_dir,
|
52
76
|
check=True, text=True,
|
53
77
|
stdout=subprocess.PIPE)
|
54
|
-
|
78
|
+
remotes = [r.strip() for r in res.stdout.splitlines()]
|
79
|
+
self._log.debug(f"Found remotes: {remotes}")
|
80
|
+
return remotes
|
55
81
|
except subprocess.CalledProcessError:
|
82
|
+
self._log.warn("Failed to fetch remotes; returning an empty list.")
|
56
83
|
return []
|
57
84
|
|
58
|
-
|
59
|
-
|
60
|
-
|
85
|
+
def _has_gh(self) -> bool:
|
86
|
+
result = shutil.which("gh") is not None
|
87
|
+
self._log.debug(f"'gh' command found: {result}")
|
88
|
+
return result
|
@@ -42,6 +42,7 @@ class ResourcePurger:
|
|
42
42
|
def __init__(self, fops: FileOps, logger: Logger | None = None) -> None:
|
43
43
|
self._f = fops
|
44
44
|
self._log = logger or Logger("ResourcePurger")
|
45
|
+
self._log.debug("ResourcePurger initialized with FileOps instance and Logger.")
|
45
46
|
|
46
47
|
# ------------------------------ public API ----------------------------- #
|
47
48
|
def purge(self, variant: str, project_dir: Path) -> None:
|
@@ -57,13 +58,20 @@ class ResourcePurger:
|
|
57
58
|
"""
|
58
59
|
variant = variant.lower()
|
59
60
|
self._log.info(f"Starting purge for variant: {variant}")
|
61
|
+
self._log.debug(f"Loaded variant for purge: {variant}")
|
60
62
|
|
61
63
|
keep_patterns = config.load_manifest(variant)
|
64
|
+
self._log.debug(f"Loaded manifest for variant '{variant}': {keep_patterns}")
|
65
|
+
|
62
66
|
spec = config.build_spec(keep_patterns)
|
67
|
+
self._log.debug(f"Built PathSpec for keep patterns. Total patterns: {len(keep_patterns)}")
|
63
68
|
|
64
69
|
self._log.info(f"Keeping {len(keep_patterns)} pattern(s)")
|
70
|
+
for pattern in keep_patterns:
|
71
|
+
self._log.debug(f"Keep pattern: {pattern}")
|
65
72
|
|
66
73
|
self._purge_unrelated(project_dir, spec)
|
74
|
+
self._log.debug(f"Finished purging unrelated paths in project directory: {project_dir}")
|
67
75
|
|
68
76
|
divider("Project tree after purge…")
|
69
77
|
self._f.print_tree(project_dir)
|
@@ -73,13 +81,20 @@ class ResourcePurger:
|
|
73
81
|
"""
|
74
82
|
Walk the project tree; delete every path NOT matched by *spec*.
|
75
83
|
"""
|
84
|
+
|
76
85
|
for path in root.rglob("*"):
|
86
|
+
self._log.debug(f"Scanning path: {path}")
|
77
87
|
rel = path.relative_to(root).as_posix()
|
88
|
+
self._log.debug(f"Relative path for inspection: {rel}")
|
78
89
|
|
79
90
|
if spec.match_file(rel):
|
80
|
-
|
91
|
+
self._log.debug(f"Path matches keep patterns: {rel}")
|
92
|
+
self._log.debug(f"Keeping: {rel}")
|
93
|
+
continue
|
81
94
|
|
82
95
|
if path.is_dir():
|
83
96
|
self._f.remove_dir(path)
|
97
|
+
self._log.debug(f"Deleted directory: {path}")
|
84
98
|
else:
|
85
99
|
self._f.remove_file(path)
|
100
|
+
self._log.debug(f"Deleted file: {path}")
|
@@ -4,16 +4,21 @@ from typing import TextIO
|
|
4
4
|
|
5
5
|
|
6
6
|
class Logger:
|
7
|
-
def __init__(self, label: str = ""):
|
7
|
+
def __init__(self, label: str = "", verbose: bool = False) -> None:
|
8
8
|
self.label = label
|
9
|
+
self.verbose = verbose
|
9
10
|
|
10
|
-
def start_logger(self) -> Logger:
|
11
|
+
def start_logger(self, verbose) -> Logger:
|
11
12
|
label = Logger.get_label(self.label)
|
12
|
-
return Logger(label)
|
13
|
+
return Logger(label, verbose)
|
13
14
|
|
14
15
|
def info(self, msg: str) -> None:
|
15
16
|
print(f"{self.label} INFO: {msg}")
|
16
17
|
|
18
|
+
def debug(self, msg: str) -> None:
|
19
|
+
if self.verbose:
|
20
|
+
print(f"🔴 DEBUG: {msg}")
|
21
|
+
|
17
22
|
def warn(self, msg: str, file: TextIO = sys.stderr) -> None:
|
18
23
|
print(f"{self.label} WARNING: {msg}", file=file)
|
19
24
|
|
File without changes
|
@@ -0,0 +1,26 @@
|
|
1
|
+
variant: go-grpc-protoc
|
2
|
+
|
3
|
+
keep:
|
4
|
+
# ── application source (Go) ─────────────────────────
|
5
|
+
- cmd/**
|
6
|
+
- internal/**
|
7
|
+
- pkg/proto/**
|
8
|
+
- configs/**
|
9
|
+
- go.mod
|
10
|
+
- git.ignore
|
11
|
+
|
12
|
+
# ── tests ───────────────────────────────────────────
|
13
|
+
- test/**
|
14
|
+
|
15
|
+
# ── build & project metadata ────────────────────────
|
16
|
+
- Makefile
|
17
|
+
- Dockerfile
|
18
|
+
- README.md
|
19
|
+
|
20
|
+
# ── IDE / run configs ───────────────────────────────
|
21
|
+
- runConfigurations/Go/**
|
22
|
+
|
23
|
+
# ── deployment & infra (shared) ─────────────────────
|
24
|
+
- skaffold.yaml
|
25
|
+
- chart/**
|
26
|
+
- infra/**
|
@@ -0,0 +1,23 @@
|
|
1
|
+
variant: java-springboot
|
2
|
+
|
3
|
+
keep:
|
4
|
+
# ── application source ────────────────────────────
|
5
|
+
- src/main/java/**
|
6
|
+
- src/main/resources/**
|
7
|
+
|
8
|
+
# ── tests ─────────────────────────────────────────
|
9
|
+
- src/test/java/**
|
10
|
+
|
11
|
+
# ── build & project metadata ──────────────────────
|
12
|
+
- pom.xml
|
13
|
+
- Dockerfile
|
14
|
+
- Makefile
|
15
|
+
- README.md
|
16
|
+
|
17
|
+
# ── IDE / run configs ─────────────────────────────
|
18
|
+
- runConfigurations/SpringBoot/**
|
19
|
+
|
20
|
+
# ── deployment & infra (shared) ───────────────────
|
21
|
+
- skaffold.yaml
|
22
|
+
- chart/**
|
23
|
+
- infra/**
|
@@ -0,0 +1,23 @@
|
|
1
|
+
variant: python-fastapi
|
2
|
+
|
3
|
+
keep:
|
4
|
+
# ── application source ─────────────────────────────
|
5
|
+
- src/app/**
|
6
|
+
|
7
|
+
# ── tests ──────────────────────────────────────────
|
8
|
+
- tests/**
|
9
|
+
- pytest.ini
|
10
|
+
|
11
|
+
# ── project scripts & metadata ─────────────────────
|
12
|
+
- Dockerfile
|
13
|
+
- Makefile
|
14
|
+
- requirements.txt
|
15
|
+
- README.md
|
16
|
+
|
17
|
+
# ── IDE / run configs ──────────────────────────────
|
18
|
+
- runConfigurations/Python/FastAPI.run.xml
|
19
|
+
|
20
|
+
# ── deployment & infra (shared) ────────────────────
|
21
|
+
- skaffold.yaml
|
22
|
+
- chart/**
|
23
|
+
- infra/**
|
@@ -1,3 +1,4 @@
|
|
1
|
+
MANIFEST.in
|
1
2
|
pyproject.toml
|
2
3
|
haraka/__init__.py
|
3
4
|
haraka.egg-info/PKG-INFO
|
@@ -26,4 +27,8 @@ haraka/utils/__init__.py
|
|
26
27
|
haraka/utils/common/__init__.py
|
27
28
|
haraka/utils/common/utils.py
|
28
29
|
haraka/utils/logging/__init__.py
|
29
|
-
haraka/utils/logging/log_util.py
|
30
|
+
haraka/utils/logging/log_util.py
|
31
|
+
haraka/utils/manifests/go-grpc-gateway-buf.yml
|
32
|
+
haraka/utils/manifests/go-grpc-protoc.yml
|
33
|
+
haraka/utils/manifests/java-springboot.yml
|
34
|
+
haraka/utils/manifests/python-fastapi.yml
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "haraka"
|
7
|
-
version = "0.2.
|
7
|
+
version = "0.2.15"
|
8
8
|
description = "Reusable post-generation helper for Cookiecutter micro-service templates"
|
9
9
|
readme = "README.md"
|
10
10
|
license = {text = "MIT"}
|
@@ -24,3 +24,10 @@ Source = "https://github.com/wjb-dev/comet-postgen"
|
|
24
24
|
|
25
25
|
[tool.setuptools.packages.find]
|
26
26
|
where = ["."]
|
27
|
+
|
28
|
+
[tool.setuptools.package-data]
|
29
|
+
"haraka.utils.manifests" = ["*.yml"]
|
30
|
+
|
31
|
+
[tool.setuptools]
|
32
|
+
include-package-data = true
|
33
|
+
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|