Adds project initialization command
All checks were successful
Build Wheels / build (push) Successful in 4m44s

Introduces an `init` command to initialize new HDLBuild projects.
Includes creation of default `.gitignore` and `project.yml` files
from templates if they do not already exist. Updates command
registration to include the new `init` command.
This commit is contained in:
2025-04-27 17:58:11 +00:00
parent 9274461d7a
commit 7cf69aa16f
2 changed files with 44 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
from hdlbuild.commands.build import BuildCommand from hdlbuild.commands.build import BuildCommand
from hdlbuild.commands.clean import CleanCommand from hdlbuild.commands.clean import CleanCommand
from hdlbuild.commands.dep import DepCommand from hdlbuild.commands.dep import DepCommand
from hdlbuild.commands.init import InitCommand
from hdlbuild.commands.test import TestCommand from hdlbuild.commands.test import TestCommand
@@ -10,7 +11,8 @@ def register_commands(subparsers):
CleanCommand(), CleanCommand(),
BuildCommand(), BuildCommand(),
DepCommand(), DepCommand(),
TestCommand() TestCommand(),
InitCommand(),
] ]
for command in commands: for command in commands:

View File

@@ -0,0 +1,41 @@
from pathlib import Path
import shutil
from hdlbuild.dependencies.resolver import DependencyResolver
from hdlbuild.utils.console_utils import ConsoleUtils
from hdlbuild.utils.project_loader import load_project_config
class InitCommand:
def __init__(self):
self.console_utils = ConsoleUtils("hdlbuild")
self.project = load_project_config()
def register(self, subparsers):
parser = subparsers.add_parser("init", help="Initialize a new HDLBuild project")
parser.set_defaults(func=self.execute)
def execute(self, args):
"""Initialize a new HDLBuild project."""
project_dir = Path.cwd()
# Paths to templates
template_dir = Path(__file__).parent / "templates"
# .gitignore
gitignore_template = template_dir / "gitignore.template"
gitignore_target = project_dir / ".gitignore"
if not gitignore_target.exists():
shutil.copy(gitignore_template, gitignore_target)
self.console_utils.print("Created .gitignore")
else:
self.console_utils.print(".gitignore already exists, skipping.")
# project.yml
project_yml_template = template_dir / "project.yml.template"
project_yml_target = project_dir / "project.yml"
if not project_yml_target.exists():
shutil.copy(project_yml_template, project_yml_target)
self.console_utils.print("Created project.yml")
else:
self.console_utils.print("project.yml already exists, skipping.")