From: Michael Tremer Date: Thu, 23 Jan 2025 11:28:34 +0000 (+0000) Subject: builds: Relax relationship between test groups X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3d6776aee5b340855c900006a718ceb21d708cab;p=pbs.git builds: Relax relationship between test groups Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/builds.py b/src/buildservice/builds.py index d09e7259..7ff5e26c 100644 --- a/src/buildservice/builds.py +++ b/src/buildservice/builds.py @@ -465,8 +465,22 @@ class Build(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Group - group = sqlalchemy.orm.relationship("BuildGroup", back_populates="builds", - foreign_keys=[build_group_id], lazy="selectin") + async def get_group(self): + """ + Returns the build group this build is in + """ + stmt = ( + sqlalchemy + .select( + BuildGroup, + ) + .where( + BuildGroup.deleted_at == None, + BuildGroup.id == self.build_group_id, + ) + ) + + return await self.db.fetch_one(stmt) # Severity @@ -1081,11 +1095,6 @@ class Build(database.Base, database.BackendMixin, database.SoftDeleteMixin): def is_test(self): return self.test - @functools.cached_property - def test_build_for(self): - if self.group: - return self.group.tested_build - # Disable Test Builds? disable_test_builds = Column(Boolean, nullable=False, default=False) @@ -1152,18 +1161,27 @@ class Build(database.Base, database.BackendMixin, database.SoftDeleteMixin): await self._send_email("builds/messages/test-builds-failed.txt", build=self, test_builds=self.test_builds) - # Test Group ID + # Tests - test_group_id = Column(Integer, ForeignKey("build_groups.id")) - - # Test Group + async def get_tests(self): + """ + Returns the test group + """ + stmt = ( + sqlalchemy + .select( + BuildGroup, + ) + .where( + BuildGroup.deleted_at == None, + BuildGroup.tested_build == self, + ) + ) - test_group = sqlalchemy.orm.relationship( - "BuildGroup", foreign_keys=[test_group_id], lazy="joined", - ) + return await self.db.fetch_one(stmt) -class BuildGroup(database.Base, database.BackendMixin, database.SoftDeleteMixin): +class BuildGroup(database.Base, database.SoftDeleteMixin): __tablename__ = "build_groups" def __str__(self): @@ -1206,8 +1224,9 @@ class BuildGroup(database.Base, database.BackendMixin, database.SoftDeleteMixin) # Builds - builds = sqlalchemy.orm.relationship("Build", back_populates="group", - foreign_keys=[Build.build_group_id], lazy="selectin") + builds = sqlalchemy.orm.relationship( + "Build", foreign_keys=[Build.build_group_id], lazy="selectin", + ) @staticmethod def _sort_builds(build): @@ -1243,8 +1262,9 @@ class BuildGroup(database.Base, database.BackendMixin, database.SoftDeleteMixin) # Tested Build - tested_build = sqlalchemy.orm.relationship("Build", - foreign_keys=[tested_build_id], lazy="joined") + tested_build = sqlalchemy.orm.relationship( + "Build", foreign_keys=[tested_build_id], lazy="joined", + ) # Test? diff --git a/src/buildservice/events.py b/src/buildservice/events.py index b5c18d4b..a759ee3e 100644 --- a/src/buildservice/events.py +++ b/src/buildservice/events.py @@ -415,11 +415,10 @@ class Events(base.Object): # Build Group ID builds.BuildGroup.id.label("build_group_id"), ) - .select_from(builds.BuildGroup) + .select_from(builds.Build) .join( - builds.Build, - builds.Build.test_group_id == builds.BuildGroup.id, - isouter=True, + builds.BuildGroup, + builds.BuildGroup.tested_build_id == builds.Build.id, ) .where( builds.BuildGroup.deleted_at == None, diff --git a/src/database.sql b/src/database.sql index 123c14b3..444da994 100644 --- a/src/database.sql +++ b/src/database.sql @@ -251,7 +251,6 @@ CREATE TABLE public.builds ( deprecating_build_id integer, deprecated_at timestamp without time zone, deprecated_by_id integer, - test_group_id integer, test boolean DEFAULT false NOT NULL, disable_test_builds boolean DEFAULT false NOT NULL, points integer DEFAULT 0 NOT NULL, @@ -2125,14 +2124,6 @@ ALTER TABLE ONLY public.builds ADD CONSTRAINT builds_pkg_id FOREIGN KEY (pkg_id) REFERENCES public.packages(id); --- --- Name: builds builds_test_group_id; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.builds - ADD CONSTRAINT builds_test_group_id FOREIGN KEY (test_group_id) REFERENCES public.build_groups(id); - - -- -- Name: job_packages job_packages_job_id; Type: FK CONSTRAINT; Schema: public; Owner: - -- diff --git a/src/templates/builds/show.html b/src/templates/builds/show.html index 023b88ea..b538d885 100644 --- a/src/templates/builds/show.html +++ b/src/templates/builds/show.html @@ -12,6 +12,9 @@ {% block title %}{{ _("Build") }} - {{ build }}{% endblock %} {% block body %} + {# Fetch the group #} + {% set group = build.get_group() %} +
{{ _("Test Build") }} - - {{ build.test_build_for }} + + {{ group.tested_build }} {% else %} @@ -197,14 +200,19 @@
- {% elif build.test_group %} -
-
-
{{ _("Test Builds")}}
+ {% else %} + {# Fetch all tests #} + {% set tests = build.get_tests() %} - {{ BuildGroupList(build.test_group, limit=8) }} -
-
+ {% if tests %} +
+
+
{{ _("Test Builds")}}
+ + {{ BuildGroupList(tests, limit=8) }} +
+
+ {% endif %} {% endif %} {# Log #}