Added set-version logic && Fixed CustomScriptService to handle arguments
This commit is contained in:
parent
539ed13be4
commit
a66ce96dbf
@ -11,7 +11,7 @@
|
|||||||
"hello-world": "echo 'Hello World'",
|
"hello-world": "echo 'Hello World'",
|
||||||
|
|
||||||
"sv": "cpl set-version",
|
"sv": "cpl set-version",
|
||||||
"set-version": "echo 'Set versions for all projects'; cpl run set-version; echo '';",
|
"set-version": "echo 'Set versions for all projects'; cpl run set-version $ARGS; echo '';",
|
||||||
|
|
||||||
"docs-build": "echo 'Build Documentation'; cd docs/; sphinx-apidoc -o source/ ../src/cpl_core; sphinx-apidoc -o source/ ../src/cpl_query; make clean; make html; rm source/cpl_query.tests.rst;",
|
"docs-build": "echo 'Build Documentation'; cd docs/; sphinx-apidoc -o source/ ../src/cpl_core; sphinx-apidoc -o source/ ../src/cpl_query; make clean; make html; rm source/cpl_query.tests.rst;",
|
||||||
"db": "cpl build-docs",
|
"db": "cpl build-docs",
|
||||||
|
@ -35,7 +35,15 @@ class CustomScriptService(CommandABC):
|
|||||||
if script != cmd:
|
if script != cmd:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
command = self._workspace.scripts[script]
|
command = ''
|
||||||
|
external_args = self._config.get_configuration('ARGS')
|
||||||
|
if external_args is not None:
|
||||||
|
command += f'ARGS="{external_args}";'
|
||||||
|
|
||||||
|
command += self._workspace.scripts[script]
|
||||||
|
env_vars = os.environ
|
||||||
|
env_vars['CPL_ARGS'] = " ".join(args)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
subprocess.run(command, shell=True if os.name == 'posix' else None)
|
subprocess.run(command, shell=True if os.name == 'posix' else None)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "2022",
|
"Major": "2022",
|
||||||
"Minor": "6",
|
"Minor": "6",
|
||||||
"Micro": "15.dev1"
|
"Micro": "15"
|
||||||
},
|
},
|
||||||
"Author": "Sven Heidemann",
|
"Author": "Sven Heidemann",
|
||||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "2022",
|
"Major": "2022",
|
||||||
"Minor": "6",
|
"Minor": "6",
|
||||||
"Micro": "15.dev1"
|
"Micro": "15"
|
||||||
},
|
},
|
||||||
"Author": "Sven Heidemann",
|
"Author": "Sven Heidemann",
|
||||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
"Version": {
|
"Version": {
|
||||||
"Major": "2022",
|
"Major": "2022",
|
||||||
"Minor": "6",
|
"Minor": "6",
|
||||||
"Micro": "15.dev1"
|
"Micro": "15"
|
||||||
},
|
},
|
||||||
"Author": "Sven Heidemann",
|
"Author": "Sven Heidemann",
|
||||||
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
"AuthorEmail": "sven.heidemann@sh-edraft.de",
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
|
import traceback
|
||||||
|
|
||||||
|
from cpl_cli.configuration import WorkspaceSettings
|
||||||
from cpl_core.application import ApplicationABC
|
from cpl_core.application import ApplicationABC
|
||||||
from cpl_core.configuration import ConfigurationABC
|
from cpl_core.configuration import ConfigurationABC
|
||||||
from cpl_core.console import Console
|
from cpl_core.console import Console
|
||||||
from cpl_core.dependency_injection import ServiceProviderABC
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
|
from set_version.git_service import GitService
|
||||||
|
from set_version.version_setter_service import VersionSetterService
|
||||||
|
|
||||||
|
|
||||||
class Application(ApplicationABC):
|
class Application(ApplicationABC):
|
||||||
@ -9,8 +14,49 @@ class Application(ApplicationABC):
|
|||||||
def __init__(self, config: ConfigurationABC, services: ServiceProviderABC):
|
def __init__(self, config: ConfigurationABC, services: ServiceProviderABC):
|
||||||
ApplicationABC.__init__(self, config, services)
|
ApplicationABC.__init__(self, config, services)
|
||||||
|
|
||||||
|
self._workspace: WorkspaceSettings = config.get_configuration(WorkspaceSettings)
|
||||||
|
|
||||||
|
self._git_service: GitService = self._services.get_service(GitService)
|
||||||
|
self._version_setter: VersionSetterService = self._services.get_service(VersionSetterService)
|
||||||
|
|
||||||
def configure(self):
|
def configure(self):
|
||||||
pass
|
self._configuration.parse_console_arguments(self._services)
|
||||||
|
|
||||||
def main(self):
|
def main(self):
|
||||||
Console.write_line('Hello World from tools')
|
Console.write_line('Set versions:')
|
||||||
|
args = self._configuration.additional_arguments
|
||||||
|
version = {}
|
||||||
|
branch = ""
|
||||||
|
suffix = ""
|
||||||
|
if len(args) > 1:
|
||||||
|
Console.error(f'Unexpected argument(s): {", ".join(args[1:])}')
|
||||||
|
return
|
||||||
|
|
||||||
|
if len(args) == 1:
|
||||||
|
suffix = f'.{args[0]}'
|
||||||
|
|
||||||
|
try:
|
||||||
|
branch = self._git_service.get_active_branch_name()
|
||||||
|
Console.write_line(f'Found branch: {branch}')
|
||||||
|
except Exception as e:
|
||||||
|
Console.error('Branch could not be found', traceback.format_exc())
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
version['Major'] = branch.split('.')[0]
|
||||||
|
version['Minor'] = branch.split('.')[1]
|
||||||
|
version['Micro'] = f'{branch.split(".")[2]}{suffix}'
|
||||||
|
except Exception as e:
|
||||||
|
Console.error(f'Branch {branch} does not contain valid version')
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
for project in self._workspace.projects:
|
||||||
|
if not project.startswith('cpl'):
|
||||||
|
continue
|
||||||
|
|
||||||
|
Console.write_line(f'Set version {version["Major"]}.{version["Minor"]}.{version["Micro"]} for {project}')
|
||||||
|
self._version_setter.set_version(self._workspace.projects[project], version)
|
||||||
|
except Exception as e:
|
||||||
|
Console.error('Version could not be set', traceback.format_exc())
|
||||||
|
return
|
||||||
|
18
tools/set_version/git_service.py
Normal file
18
tools/set_version/git_service.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
from cpl_core.environment import ApplicationEnvironmentABC
|
||||||
|
|
||||||
|
|
||||||
|
class GitService:
|
||||||
|
|
||||||
|
def __init__(self, env: ApplicationEnvironmentABC):
|
||||||
|
self._env = env
|
||||||
|
|
||||||
|
def get_active_branch_name(self) -> str:
|
||||||
|
head_dir = os.path.join(self._env.working_directory, '.git/HEAD')
|
||||||
|
with open(head_dir, 'r') as f:
|
||||||
|
content = f.read().splitlines()
|
||||||
|
|
||||||
|
for line in content:
|
||||||
|
if line[0:4] == "ref:":
|
||||||
|
return line.partition("refs/heads/")[2]
|
@ -2,9 +2,9 @@
|
|||||||
"ProjectSettings": {
|
"ProjectSettings": {
|
||||||
"Name": "set-version",
|
"Name": "set-version",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "0",
|
"Major": "2022",
|
||||||
"Minor": "0",
|
"Minor": "6",
|
||||||
"Micro": "0"
|
"Micro": "15"
|
||||||
},
|
},
|
||||||
"Author": "",
|
"Author": "",
|
||||||
"AuthorEmail": "",
|
"AuthorEmail": "",
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
from cpl_cli.configuration import WorkspaceSettings
|
||||||
from cpl_core.application import StartupABC
|
from cpl_core.application import StartupABC
|
||||||
from cpl_core.configuration import ConfigurationABC
|
from cpl_core.configuration import ConfigurationABC
|
||||||
from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC
|
from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC
|
||||||
from cpl_core.environment import ApplicationEnvironment
|
from cpl_core.environment import ApplicationEnvironment
|
||||||
|
from set_version.git_service import GitService
|
||||||
|
from set_version.version_setter_service import VersionSetterService
|
||||||
|
|
||||||
|
|
||||||
class Startup(StartupABC):
|
class Startup(StartupABC):
|
||||||
@ -10,7 +15,15 @@ class Startup(StartupABC):
|
|||||||
StartupABC.__init__(self)
|
StartupABC.__init__(self)
|
||||||
|
|
||||||
def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC:
|
def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC:
|
||||||
|
configuration.add_json_file('cpl-workspace.json', optional=True, output=False)
|
||||||
|
if configuration.get_configuration(WorkspaceSettings) is None:
|
||||||
|
environment.set_working_directory(os.path.join(environment.working_directory, '../../'))
|
||||||
|
configuration.add_json_file('cpl-workspace.json', optional=False, output=False)
|
||||||
|
|
||||||
return configuration
|
return configuration
|
||||||
|
|
||||||
def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC:
|
def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC:
|
||||||
|
services.add_transient(GitService)
|
||||||
|
services.add_transient(VersionSetterService)
|
||||||
|
|
||||||
return services.build_service_provider()
|
return services.build_service_provider()
|
||||||
|
22
tools/set_version/version_setter_service.py
Normal file
22
tools/set_version/version_setter_service.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
|
from cpl_core.environment import ApplicationEnvironmentABC
|
||||||
|
|
||||||
|
|
||||||
|
class VersionSetterService:
|
||||||
|
|
||||||
|
def __init__(self, env: ApplicationEnvironmentABC):
|
||||||
|
self._env = env
|
||||||
|
|
||||||
|
def set_version(self, file: str, version: dict):
|
||||||
|
project_json = {}
|
||||||
|
with open(os.path.join(self._env.working_directory, file), 'r', encoding='utf-8') as f:
|
||||||
|
# load json
|
||||||
|
project_json = json.load(f)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
project_json['ProjectSettings']['Version'] = version
|
||||||
|
with open(os.path.join(self._env.working_directory, file), 'w', encoding='utf-8') as f:
|
||||||
|
f.write(json.dumps(project_json, indent=2))
|
||||||
|
f.close()
|
Loading…
Reference in New Issue
Block a user