[docs]classVersionGitHubActionsOutput:OUTPUT_ENV_VAR="GITHUB_OUTPUT"def__init__(self,released:bool|None=None,version:Version|None=None)->None:self._released=releasedself._version=version@propertydefreleased(self)->bool|None:returnself._released@released.setterdefreleased(self,value:bool)->None:iftype(value)isnotbool:raiseTypeError("output 'released' is boolean")self._released=value@propertydefversion(self)->Version|None:ifself._versionisNone:returnNonereturnself._version@version.setterdefversion(self,value:Version)->None:iftype(value)isnotVersion:raiseTypeError("output 'released' should be a Version")self._version=value@propertydeftag(self)->str|None:ifself._versionisNone:returnNonereturnself._version.as_tag()
[docs]defto_output_text(self)->str:missing=set()ifself.versionisNone:missing.add("version")ifself.releasedisNone:missing.add("released")ifmissing:raiseValueError(f"some required outputs were not set: {', '.join(missing)}")outputs={"released":str(self.released).lower(),"version":str(self.version),"tag":self.tag,}returnstr.join("",[f"{key}={value!s}\n"forkey,valueinoutputs.items()])
[docs]defwrite_if_possible(self,filename:str|None=None)->None:output_file=filenameoros.getenv(self.OUTPUT_ENV_VAR)ifnotoutput_file:log.info("not writing GitHub Actions output, as no file specified")returnwithopen(output_file,"a",encoding="utf-8")asf:f.write(self.to_output_text())