Skip to content

Commit 06248c7

Browse files
authored
Merge pull request #4927 from getsentry/bugfix/allow-more-chars-in-release
Soften release version regex
2 parents 686617c + 05ebc67 commit 06248c7

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

src/sentry/api/endpoints/project_releases.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from __future__ import absolute_import
2-
import string
32

43
from django.db import IntegrityError, transaction
54

@@ -43,20 +42,15 @@ def list_releases_scenario(runner):
4342

4443

4544
class ReleaseSerializer(serializers.Serializer):
46-
version = serializers.RegexField(r'[a-zA-Z0-9\-_\.]', max_length=64, required=True)
45+
version = serializers.RegexField(r'^[a-zA-Z0-9\-_\. \(\)]+\Z',
46+
max_length=64, required=True)
4747
ref = serializers.CharField(max_length=64, required=False)
4848
url = serializers.URLField(required=False)
4949
owner = UserField(required=False)
5050
dateStarted = serializers.DateTimeField(required=False)
5151
dateReleased = serializers.DateTimeField(required=False)
5252
commits = ListField(child=CommitSerializer(), required=False)
5353

54-
def validate_version(self, attrs, source):
55-
value = attrs[source]
56-
if not set(value).isdisjoint(set(string.whitespace)):
57-
raise serializers.ValidationError('Enter a valid value')
58-
return attrs
59-
6054

6155
class ProjectReleasesEndpoint(ProjectEndpoint):
6256
doc_section = DocSection.RELEASES

tests/sentry/api/endpoints/test_project_releases.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,29 @@ def test_minimal(self):
113113
assert release.organization == project.organization
114114
assert release.projects.first() == project
115115

116+
def test_ios_release(self):
117+
self.login_as(user=self.user)
118+
119+
project = self.create_project(name='foo')
120+
121+
url = reverse('sentry-api-0-project-releases', kwargs={
122+
'organization_slug': project.organization.slug,
123+
'project_slug': project.slug,
124+
})
125+
response = self.client.post(url, data={
126+
'version': '1.2.1 (123)',
127+
})
128+
129+
assert response.status_code == 201, response.content
130+
assert response.data['version']
131+
132+
release = Release.objects.get(
133+
version=response.data['version'],
134+
)
135+
assert not release.owner
136+
assert release.organization == project.organization
137+
assert release.projects.first() == project
138+
116139
def test_duplicate(self):
117140
self.login_as(user=self.user)
118141

0 commit comments

Comments
 (0)