Browse Source

fix(deploys) Fix 500 when deploying releases with long names (#12052)

When deploying a release with a long version number we would respond
with a 500 as the `sentry_activity.ident` column would overflow. In
other places where we create activity for releases we truncate the
ident value with this same function.

Fixes APP-1119
Mark Story 6 years ago
parent
commit
9b0088a1b9
2 changed files with 27 additions and 1 deletions
  1. 1 1
      src/sentry/models/deploy.py
  2. 26 0
      tests/sentry/models/test_deploy.py

+ 1 - 1
src/sentry/models/deploy.py

@@ -77,7 +77,7 @@ class Deploy(Model):
                 activity = Activity.objects.create(
                     type=Activity.DEPLOY,
                     project=project,
-                    ident=release.version,
+                    ident=Activity.get_version_ident(release.version),
                     data={
                         'version': release.version,
                         'deploy_id': deploy.id,

+ 26 - 0
tests/sentry/models/test_deploy.py

@@ -6,6 +6,32 @@ from sentry.testutils import TestCase
 
 
 class DeployNotifyTest(TestCase):
+    def test_notify_if_ready_long_release(self):
+        org = self.create_organization()
+        project = self.create_project(organization=org)
+        release = Release.objects.create(
+            version='a' * 200,
+            organization=org,
+        )
+        release.add_project(project)
+        env = Environment.objects.create(
+            name='production',
+            organization_id=org.id,
+        )
+        deploy = Deploy.objects.create(
+            release=release,
+            organization_id=org.id,
+            environment_id=env.id,
+        )
+        Deploy.notify_if_ready(deploy.id)
+
+        # make sure activity has been created
+        record = Activity.objects.get(
+            type=Activity.DEPLOY,
+            project=project,
+        )
+        assert release.version.startswith(record.ident)
+
     def test_already_notified(self):
         org = self.create_organization()
         project = self.create_project(organization=org)