]> git.ipfire.org Git - pbs.git/commitdiff
builds: Allow disabling test builds over the API
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 5 May 2023 06:29:28 +0000 (06:29 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 5 May 2023 06:29:28 +0000 (06:29 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builds.py
src/database.sql
src/web/builds.py

index a4c7f3adc1ef65033f14978977dad2a0adcd717f..1f6b5cd5bf393d9401f0ba4a423e5eb52d17d732 100644 (file)
@@ -173,7 +173,8 @@ class Builds(base.Object):
 
                return list(builds)
 
-       async def create(self, repo, package, owner=None, group=None, test=False):
+       async def create(self, repo, package, owner=None, group=None, test=False,
+                       disable_test_builds=False):
                """
                        Creates a new build based on the given distribution and package
                """
@@ -189,11 +190,12 @@ class Builds(base.Object):
                                pkg_id,
                                owner_id,
                                build_group_id,
-                               test
+                               test,
+                               disable_test_builds
                        )
                        VALUES
                        (
-                               %s, %s, %s, %s, %s
+                               %s, %s, %s, %s, %s, %s
                        )
                        RETURNING *""",
                        repo,
@@ -201,6 +203,7 @@ class Builds(base.Object):
                        owner,
                        group,
                        test,
+                       disable_test_builds,
                )
 
                # Populate cache
@@ -641,7 +644,7 @@ class Build(base.DataObject):
                        self._send_email("builds/messages/failed.txt")
 
                # Create any test builds
-               if success and not self.is_test():
+               if success:
                        return await self.create_test_builds()
 
        def has_finished(self):
@@ -920,6 +923,15 @@ class Build(base.DataObject):
                """
                        This creates test builds for this build
                """
+               # You cannot create any test builds for test builds
+               if self.is_test():
+                       return
+
+               # Don't create any test builds if requested to be disabled
+               if self.data.disable_test_builds:
+                       log.debug("Creating test builds has been disabled for %s" % self)
+                       return
+
                builds = {}
 
                # Map all builds by their name
index ec5416b6c00f151cf4db75ceab2b05f7f6e6909b..587645f7eba28ec38b54748cd900cf2c6385ec3a 100644 (file)
@@ -126,7 +126,8 @@ CREATE TABLE public.builds (
     deprecated_at timestamp without time zone,
     deprecated_by integer,
     test_group_id integer,
-    test boolean DEFAULT false NOT NULL
+    test boolean DEFAULT false NOT NULL,
+    disable_tests boolean DEFAULT false NOT NULL
 );
 
 
index a9e81ded21822e849451b35d58011ac23312d908..27c11f137a02d66868a683c5a51e86d6f0f15ed8 100644 (file)
@@ -25,6 +25,9 @@ class APIv1IndexHandler(base.APIMixin, base.BaseHandler):
                # Fetch the repository
                repo_name = self.get_argument("repo", None)
 
+               # Did the uploader request to disable test builds?
+               disable_test_builds = self.get_argument_bool("disable_test_builds")
+
                with self.db.transaction():
                        # Import the package
                        try:
@@ -41,7 +44,8 @@ class APIv1IndexHandler(base.APIMixin, base.BaseHandler):
                                raise tornado.web.HTTPError(404, "Could not find repository")
 
                        # Create a new build
-                       build = await self.backend.builds.create(repo, package, owner=self.current_user)
+                       build = await self.backend.builds.create(repo, package,
+                               owner=self.current_user, disable_test_builds=disable_test_builds)
 
                        # Delete the upload
                        await upload.delete()