From af2ca20461e82123f27cae773049e9adf5a32424 Mon Sep 17 00:00:00 2001 From: Zack Cerza Date: Tue, 1 Apr 2025 17:49:59 -0600 Subject: [PATCH 1/2] Add test_update_build_same_url_different_* Signed-off-by: Zack Cerza --- shaman/tests/controllers/test_builds.py | 40 +++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/shaman/tests/controllers/test_builds.py b/shaman/tests/controllers/test_builds.py index 2293084..6cf63ff 100644 --- a/shaman/tests/controllers/test_builds.py +++ b/shaman/tests/controllers/test_builds.py @@ -108,6 +108,46 @@ def test_update_build_same_url_different_sha1(self, app): assert result.status_int == 200 assert len(Build.query.all()) == 2 + def test_update_build_same_url_different_distro(self, app): + data = self.data.copy() + data['distro'] = 'centos' + data['distro_version'] = '9' + result = app.post_json('/api/builds/ceph/', params=data) + assert result.status_int == 200 + assert len(Build.query.all()) == 1 + build1 = Build.query.all()[0] + build1_url = build1.url + assert build1.distro == 'centos' + assert build1.distro_version == '9' + data = self.data.copy() + data['distro'] = 'ubuntu' + data['distro_version'] = '24.04' + result = app.post_json('/api/builds/ceph/', params=data) + assert result.status_int == 200 + assert len(Build.query.all()) == 2 + build2 = Build.query.all()[1] + assert build2.distro == 'ubuntu' + assert build2.distro_version == '24.04' + assert build1_url == build2.url + + def test_update_build_same_url_different_arch(self, app): + data = self.data.copy() + data['distro_arch'] = 'x86_64' + result = app.post_json('/api/builds/ceph/', params=data) + assert result.status_int == 200 + assert len(Build.query.all()) == 1 + build1 = Build.query.all()[0] + build1_url = build1.url + assert build1.distro_arch == 'x86_64' + data = self.data.copy() + data['distro_arch'] = 'arm64' + result = app.post_json('/api/builds/ceph/', params=data) + assert result.status_int == 200 + assert len(Build.query.all()) == 2 + build2 = Build.query.all()[1] + assert build2.distro_arch == 'arm64' + assert build1_url == build2.url + def test_update_queued_build_creates_single_object(self, app): data = get_build_data(status='queued', url='jenkins.ceph.com/trigger') app.post_json('/api/builds/ceph/', params=data) From 1bff087515f5964e78664e959520b6b4b6d70ebc Mon Sep 17 00:00:00 2001 From: Zack Cerza Date: Tue, 1 Apr 2025 17:50:34 -0600 Subject: [PATCH 2/2] Don't overwrite builds with the same URL... ... if other parameters are different. This allows shaman to support pipeline builds. Signed-off-by: Zack Cerza --- shaman/controllers/api/builds/projects.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/shaman/controllers/api/builds/projects.py b/shaman/controllers/api/builds/projects.py index f53697f..d3526ae 100644 --- a/shaman/controllers/api/builds/projects.py +++ b/shaman/controllers/api/builds/projects.py @@ -39,14 +39,27 @@ def index_post(self): # wouldn't match queued_build = models.Build.query.filter_by( project=self.project, - sha1=request.json['sha1'], + distro=request.json.get('distro'), + distro_version=request.json.get('distro_version'), + distro_arch=request.json.get('distro_arch'), + flavor=request.json.get("flavor", "default"), ref=request.json['ref'], + sha1=request.json['sha1'], status='queued', ).first() if queued_build: build = queued_build else: - build = models.Build.query.filter_by(url=url, sha1=request.json['sha1']).first() + build = models.Build.query.filter_by( + url=url, + project=self.project, + distro=request.json.get('distro'), + distro_version=request.json.get('distro_version'), + distro_arch=request.json.get('distro_arch'), + flavor=request.json.get("flavor", "default"), + ref=request.json['ref'], + sha1=request.json['sha1'], + ).first() data = dict( project=self.project, ref=request.json["ref"],