Skip to content

Commit 1af76ef

Browse files
authored
Merge pull request #484 from nix-community/fix-reporting
Make github/gitea ci statuses appear earlier for eval and add statuses for deployment
2 parents 7d1f4d7 + b36223c commit 1af76ef

File tree

2 files changed

+52
-23
lines changed

2 files changed

+52
-23
lines changed

buildbot_nix/buildbot_nix/__init__.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,21 @@ def __init__(
100100
**kwargs,
101101
)
102102

103+
async def run(self) -> int: # type: ignore[override]
104+
if self.build and self.master:
105+
await CombinedBuildEvent.produce_event_for_build(
106+
self.master, CombinedBuildEvent.STARTED_NIX_EFFECTS, self.build, None
107+
)
108+
109+
results = await super().run()
110+
111+
if self.build and self.master:
112+
await CombinedBuildEvent.produce_event_for_build(
113+
self.master, CombinedBuildEvent.FINISHED_NIX_EFFECTS, self.build, None
114+
)
115+
116+
return results
117+
103118
def createTriggerProperties(self, props: Any) -> Any: # noqa: N802
104119
return props
105120

@@ -161,12 +176,11 @@ async def produce_event(self, event: str, result: None | int) -> None:
161176
)
162177
if result is not None:
163178
build["results"] = result
164-
self.master.mq.produce(
165-
("builds", str(self.build.buildid), event), copy.deepcopy(build)
166-
)
179+
event_key = ("builds", str(self.build.buildid), event)
180+
self.master.mq.produce(event_key, copy.deepcopy(build))
167181

168182
async def run(self) -> int:
169-
await self.produce_event("started-nix-eval", None)
183+
await self.produce_event(CombinedBuildEvent.STARTED_NIX_EVAL.value, None)
170184

171185
branch_config: BranchConfig = await BranchConfig.extract_during_step(self)
172186

buildbot_nix/buildbot_nix/nix_status_generator.py

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ class CombinedBuildEvent(Enum):
2929
FINISHED_NIX_EVAL = "finished-nix-eval"
3030
STARTED_NIX_BUILD = "started-nix-build"
3131
FINISHED_NIX_BUILD = "finished-nix-build"
32+
STARTED_NIX_EFFECTS = "started-nix-effects"
33+
FINISHED_NIX_EFFECTS = "finished-nix-effects"
3234

3335
@staticmethod
3436
async def produce_event_for_build_requests_by_id(
@@ -70,26 +72,26 @@ async def produce_event_for_build(
7072
build_db: Any = await master.data.get(("builds", str(build.buildid)))
7173
if result is not None:
7274
build_db["results"] = result
73-
master.mq.produce(
74-
("builds", str(build.buildid), event.name), copy.deepcopy(build_db)
75-
)
75+
event_key = ("builds", str(build.buildid), event.value)
76+
master.mq.produce(event_key, copy.deepcopy(build_db))
7677
elif isinstance(build, dict):
7778
if result is not None:
7879
build["results"] = result
79-
master.mq.produce(
80-
("builds", str(build["buildid"]), event.name), copy.deepcopy(build)
81-
)
80+
event_key = ("builds", str(build["buildid"]), event.value)
81+
master.mq.produce(event_key, copy.deepcopy(build))
8282

8383

8484
@implementer(IReportGenerator)
8585
class BuildNixEvalStatusGenerator(BuildStatusGeneratorMixin):
8686
wanted_event_keys: ClassVar[list[Any]] = [
87-
("builds", None, str(CombinedBuildEvent.STARTED_NIX_EVAL.name)),
88-
("builds", None, str(CombinedBuildEvent.FINISHED_NIX_EVAL.name)),
89-
("builds", None, str(CombinedBuildEvent.STARTED_NIX_BUILD.name)),
90-
("builds", None, str(CombinedBuildEvent.FINISHED_NIX_BUILD.name)),
91-
("buildrequests", None, str(CombinedBuildEvent.STARTED_NIX_BUILD.name)),
92-
("buildrequests", None, str(CombinedBuildEvent.FINISHED_NIX_BUILD.name)),
87+
("builds", None, CombinedBuildEvent.STARTED_NIX_EVAL.value),
88+
("builds", None, CombinedBuildEvent.FINISHED_NIX_EVAL.value),
89+
("builds", None, CombinedBuildEvent.STARTED_NIX_BUILD.value),
90+
("builds", None, CombinedBuildEvent.FINISHED_NIX_BUILD.value),
91+
("builds", None, CombinedBuildEvent.STARTED_NIX_EFFECTS.value),
92+
("builds", None, CombinedBuildEvent.FINISHED_NIX_EFFECTS.value),
93+
("buildrequests", None, CombinedBuildEvent.STARTED_NIX_BUILD.value),
94+
("buildrequests", None, CombinedBuildEvent.FINISHED_NIX_BUILD.value),
9395
]
9496

9597
compare_attrs: ClassVar[list[str]] = ["start_formatter", "end_formatter"]
@@ -181,9 +183,14 @@ async def generate(
181183
) -> None | dict[str, Any]:
182184
what, _, event = key
183185
if what == "builds":
184-
is_new = event == "new"
186+
# Check if this is a start event
187+
is_start_event = event in [
188+
CombinedBuildEvent.STARTED_NIX_EVAL.value,
189+
CombinedBuildEvent.STARTED_NIX_BUILD.value,
190+
CombinedBuildEvent.STARTED_NIX_EFFECTS.value,
191+
]
185192

186-
formatter = self.start_formatter if is_new else self.end_formatter
193+
formatter = self.start_formatter if is_start_event else self.end_formatter
187194

188195
await getDetailsForBuild(
189196
master,
@@ -200,9 +207,8 @@ async def generate(
200207
report: dict[str, Any] = await self.build_message(
201208
formatter, master, reporter, data
202209
)
203-
204-
event_typed: CombinedBuildEvent = CombinedBuildEvent.__members__[event]
205-
match event_typed:
210+
event_type = CombinedBuildEvent(event)
211+
match event_type:
206212
case (
207213
CombinedBuildEvent.STARTED_NIX_EVAL
208214
| CombinedBuildEvent.FINISHED_NIX_EVAL
@@ -223,14 +229,23 @@ async def generate(
223229
"nix-build",
224230
"generator",
225231
)
232+
case (
233+
CombinedBuildEvent.STARTED_NIX_EFFECTS
234+
| CombinedBuildEvent.FINISHED_NIX_EFFECTS
235+
):
236+
report["builds"][0]["properties"]["status_name"] = (
237+
"nix-effects",
238+
"generator",
239+
)
226240
case _:
227-
msg = f"Unexpected event: {event_typed}"
241+
msg = f"Unexpected event: {event_type}"
228242
raise ValueError(msg)
229243

230-
match event_typed:
244+
match event_type:
231245
case (
232246
CombinedBuildEvent.FINISHED_NIX_EVAL
233247
| CombinedBuildEvent.FINISHED_NIX_BUILD
248+
| CombinedBuildEvent.FINISHED_NIX_EFFECTS
234249
):
235250
report["builds"][0]["complete"] = True
236251
report["builds"][0]["complete_at"] = datetime.now(tz=UTC)

0 commit comments

Comments
 (0)