@@ -64,10 +64,17 @@ class Assignment:
6464 name : str
6565 value : str
6666
67+ @property
68+ def deletes_variable (self ) -> bool :
69+ return self .value == ""
70+
6771 def gh_command (self , * , redact_body : bool = False , redact_metadata : bool = False ) -> list [str ]:
68- body = redacted_value () if redact_body else self .value
6972 repository = redacted_value () if redact_metadata else self .repository
70- command = ["gh" , "variable" , "set" , self .name , "--repo" , repository , "--body" , body ]
73+ if self .deletes_variable :
74+ command = ["gh" , "variable" , "delete" , self .name , "--repo" , repository ]
75+ else :
76+ body = redacted_value () if redact_body else self .value
77+ command = ["gh" , "variable" , "set" , self .name , "--repo" , repository , "--body" , body ]
7178 if self .variable_scope == "environment" :
7279 environment = redacted_value () if redact_metadata else (self .environment or "" )
7380 command .extend (["--env" , environment ])
@@ -91,6 +98,7 @@ def assignment_payload(assignment: Assignment, *, redact_values: bool = False) -
9198 "variable_scope" : assignment .variable_scope ,
9299 "environment" : assignment .environment ,
93100 "name" : assignment .name ,
101+ "action" : "delete" if assignment .deletes_variable else "set" ,
94102 "value" : redacted_value () if redact_values else assignment .value ,
95103 }
96104 if redact_values :
@@ -570,7 +578,24 @@ def command_apply(args: argparse.Namespace) -> int:
570578 return 0
571579
572580 for assignment in all_assignments :
573- subprocess .run (assignment .gh_command (), check = True )
581+ result = subprocess .run (
582+ assignment .gh_command (),
583+ text = True ,
584+ capture_output = assignment .deletes_variable ,
585+ check = False ,
586+ )
587+ if result .returncode == 0 :
588+ continue
589+ if assignment .deletes_variable :
590+ detail = f"{ result .stderr } \n { result .stdout } " .lower ()
591+ if "not found" in detail or "could not find" in detail or "http 404" in detail :
592+ print (f"{ assignment .name } was already absent; delete skipped." )
593+ continue
594+ if result .stderr :
595+ print (result .stderr , file = sys .stderr , end = "" )
596+ if result .stdout :
597+ print (result .stdout , file = sys .stderr , end = "" )
598+ raise subprocess .CalledProcessError (result .returncode , assignment .gh_command ())
574599 return 0
575600
576601
0 commit comments