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"], 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)