]> git.ipfire.org Git - pbs.git/commitdiff
builds: Connect groups to tested build
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 12 May 2023 20:16:50 +0000 (20:16 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 12 May 2023 20:16:50 +0000 (20:16 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builds.py
src/database.sql

index c08a9c0283c56f2b5224152b0a18386a453ba4f8..e4f0bf2d864aade31494cd9d44ad39e362fb8f74 100644 (file)
@@ -967,7 +967,7 @@ class Build(base.DataObject):
                        return
 
                # Create a build group for all tests
-               group = self.backend.builds.groups.create(owner=self.owner)
+               group = self.backend.builds.groups.create(owner=self.owner, tested_build=self)
 
                # Create a test build only for the latest version of each package
                for name in builds:
@@ -1043,7 +1043,7 @@ class Groups(base.Object):
                        """, uuid,
                )
 
-       def create(self, owner=None):
+       def create(self, owner=None, tested_build=None):
                """
                        Creates a new Build Group
                """
@@ -1051,14 +1051,15 @@ class Groups(base.Object):
                        INSERT INTO
                                build_groups
                        (
-                               created_by
+                               created_by,
+                               tested_build_id
                        )
                        VALUES(
-                               %s
+                               %s, %s
                        )
                        RETURNING
                                *
-                       """, owner,
+                       """, owner, tested_build,
                )
 
 
@@ -1141,6 +1142,22 @@ class Group(base.DataObject):
                """
                return [b for b in self.builds if b.has_failed()]
 
+       # Tested Build
+
+       @lazy_property
+       def tested_build(self):
+               if self.data.tested_build_id:
+                       return self.backend.builds.get_by_id(self.data.tested_build_id)
+
+       def is_test(self):
+               """
+                       Returns True if this is a test group
+               """
+               if self.data.tested_build_id:
+                       return True
+
+               return False
+
        # Delete
 
        async def delete(self, user=None):
@@ -1187,12 +1204,6 @@ class Group(base.DataObject):
                """
                return all((b.has_finished() for b in self.builds))
 
-       def is_test(self):
-               """
-                       Returns True if this is a test group (i.e. all builds are test builds)
-               """
-               return all((b.is_test() for b in self.builds))
-
        async def _build_finished(self, build):
                """
                        Called when a build has finished
index f584e34c0e2c7045b28eb8744047fb7026be34f0..b561c244125460d4ee44b8f479ff06920d44ece6 100644 (file)
@@ -66,7 +66,10 @@ CREATE TABLE public.build_groups (
     created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
     created_by integer,
     deleted_at timestamp without time zone,
-    deleted_by integer
+    deleted_by integer,
+    finished_at timestamp without time zone,
+    failed boolean DEFAULT false NOT NULL,
+    tested_build_id integer
 );
 
 
@@ -1677,6 +1680,14 @@ ALTER TABLE ONLY public.build_groups
     ADD CONSTRAINT build_groups_deleted_by FOREIGN KEY (deleted_by) REFERENCES public.users(id);
 
 
+--
+-- Name: build_groups build_groups_tested_build_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.build_groups
+    ADD CONSTRAINT build_groups_tested_build_id FOREIGN KEY (tested_build_id) REFERENCES public.builds(id);
+
+
 --
 -- Name: build_packages build_packages_build_id; Type: FK CONSTRAINT; Schema: public; Owner: -
 --