1414from typing import Any , Iterator , Literal , cast
1515
1616import click
17+ from bo4e_cli .io .version_file import create_version_file
18+ from bo4e_cli .models .version import Version
1719from pydantic import BaseModel , TypeAdapter
1820from pydantic .json_schema import GenerateJsonSchema as _GenerateJsonSchema
1921from pydantic .json_schema import JsonSchemaValue
2022from pydantic_core import core_schema
2123
22- from bo4e import ZusatzAttribut
24+ from bo4e import ZusatzAttribut , __gh_version__
2325
2426logging .basicConfig (level = logging .INFO , stream = sys .stdout )
2527_logger = logging .getLogger (__name__ )
@@ -148,6 +150,15 @@ def generate_schema(file_path: Path, schema_json_dict: dict[str, Any]) -> None:
148150 json_schema_file .write ("\n " )
149151
150152
153+ def generate_version_file (file_path : Path , version : str ) -> None :
154+ """
155+ Generate a version file with the given version
156+ """
157+ with open (file_path , "w+" , encoding = "utf-8" ) as version_file :
158+ version_file .write (version )
159+ _logger .info ("Generated version file at %s with content %s" , file_path , version )
160+
161+
151162def replace_refs (
152163 schema_json_dict : dict [str , Any ], namespace : dict [str , tuple [str , str , PARSABLE_CLASS_TYPE ]], target_version : str
153164) -> None :
@@ -200,11 +211,12 @@ def traverse_dict(obj: dict[str, Any]) -> None:
200211 required = False ,
201212 type = click .STRING ,
202213 envvar = "TARGET_VERSION" ,
203- default = "v0.0.0" ,
214+ default = None ,
204215)
205- def generate_or_validate_json_schemas (mode : Literal ["validate" , "generate" ], target_version : str ) -> None :
216+ def generate_or_validate_json_schemas (mode : Literal ["validate" , "generate" ], target_version : str | None ) -> None :
206217 """generate json schemas for all BOs and COMs"""
207- _logger .info ("Mode: %s, target version: %s" , mode , target_version )
218+ version = Version .from_str (target_version or __gh_version__ )
219+ _logger .info ("Mode: %s, target version: %s" , mode , version )
208220 packages = ["bo" , "com" , "enum" ]
209221
210222 if mode == "generate" :
@@ -224,7 +236,7 @@ def generate_or_validate_json_schemas(mode: Literal["validate", "generate"], tar
224236 file_path = output_directory / pkg / (name + ".json" )
225237
226238 schema_json_dict = get_schema_json_dict (cls )
227- replace_refs (schema_json_dict , namespace , target_version )
239+ replace_refs (schema_json_dict , namespace , str ( version ) )
228240
229241 if mode == "validate" :
230242 validate_schema (file_path , schema_json_dict , name )
@@ -233,6 +245,9 @@ def generate_or_validate_json_schemas(mode: Literal["validate", "generate"], tar
233245 _logger .info ("Generated schema for %s" , name )
234246 else :
235247 raise ValueError (f"Unknown mode '{ mode } '" )
248+ if mode == "generate" :
249+ create_version_file (output_directory , version )
250+ _logger .info ("Generated version file at %s with version %s" , output_directory / ".version" , version )
236251
237252
238253if __name__ == "__main__" :
0 commit comments