def test(self): with pytest.raises(Release.DoesNotExist): # no releases exist period environment = None get_latest_release([self.project], environment) old = Release.objects.create( organization_id=self.project.organization_id, version='old' ) old.add_project(self.project) new_date = old.date_added + timedelta(minutes=1) new = Release.objects.create( version='new-but-in-environment', organization_id=self.project.organization_id, date_released=new_date, ) new.add_project(self.project) ReleaseEnvironment.get_or_create( project=self.project, release=new, environment=self.environment, datetime=new_date, ) ReleaseProjectEnvironment.get_or_create( project=self.project, release=new, environment=self.environment, datetime=new_date, ) newest = Release.objects.create( version='newest-overall', organization_id=self.project.organization_id, date_released=old.date_added + timedelta(minutes=5), ) newest.add_project(self.project) # latest overall (no environment filter) environment = None result = get_latest_release([self.project], environment) assert result == newest.version # latest in environment environment = self.environment result = get_latest_release([self.project], [environment]) assert result == new.version with pytest.raises(Release.DoesNotExist): # environment with no releases environment = self.create_environment() result = get_latest_release([self.project], [environment]) assert result == new.version
def test(self): with pytest.raises(Release.DoesNotExist): # no releases exist period environment = None get_latest_release([self.project], environment) old = Release.objects.create( organization_id=self.project.organization_id, version="old") old.add_project(self.project) new_date = old.date_added + timedelta(minutes=1) new = Release.objects.create( version="new-but-in-environment", organization_id=self.project.organization_id, date_released=new_date, ) new.add_project(self.project) ReleaseEnvironment.get_or_create(project=self.project, release=new, environment=self.environment, datetime=new_date) ReleaseProjectEnvironment.get_or_create(project=self.project, release=new, environment=self.environment, datetime=new_date) newest = Release.objects.create( version="newest-overall", organization_id=self.project.organization_id, date_released=old.date_added + timedelta(minutes=5), ) newest.add_project(self.project) # latest overall (no environment filter) environment = None result = get_latest_release([self.project], environment) assert result == newest.version # latest in environment environment = self.environment result = get_latest_release([self.project], [environment]) assert result == new.version assert get_latest_release([self.project.id], [environment]) == "" assert (get_latest_release( [self.project.id], [environment], self.project.organization_id) == new.version) # Verify that not passing an environment correctly gets the latest one assert get_latest_release([self.project], None) == newest.version assert get_latest_release([self.project], []) == newest.version with pytest.raises(Release.DoesNotExist): # environment with no releases environment = self.create_environment() result = get_latest_release([self.project], [environment]) assert result == new.version
def test_semver(self): project_2 = self.create_project() release_1 = self.create_release(version="[email protected]") self.create_release(version="[email protected]") self.create_release(version="[email protected]") # Check when we're using a single project that we sort by semver assert get_latest_release([self.project], None) == [release_1.version] assert get_latest_release([project_2, self.project], None) == [release_1.version] release_4 = self.create_release(project_2, version="[email protected]") assert get_latest_release([project_2, self.project], None) == [ release_4.version, release_1.version, ]
def get_latest_release(self, event: Event) -> Release | None: environment_id = None if self.rule is None else self.rule.environment_id cache_key = get_project_release_cache_key(event.group.project_id, environment_id) latest_release = cache.get(cache_key) if latest_release is None: organization_id = event.group.project.organization_id environments = None if environment_id: environments = [Environment.objects.get(id=environment_id)] try: latest_release_versions = get_latest_release( [event.group.project], environments, organization_id, ) except Release.DoesNotExist: return None latest_releases = list( Release.objects.filter(version=latest_release_versions[0], organization_id=organization_id)) if latest_releases: cache.set(cache_key, latest_releases[0], 600) return latest_releases[0] else: cache.set(cache_key, False, 600) return latest_release
def test_multiple_projects_mixed_versions(self): project_2 = self.create_project() release_1 = self.create_release(version="[email protected]") self.create_release(project_2, version="not_semver") release_2 = self.create_release(project_2, version="not_semver_2") self.create_release(version="[email protected]") assert get_latest_release([project_2, self.project], None) == [ release_2.version, release_1.version, ]
def test(self): with pytest.raises(Release.DoesNotExist): # no releases exist period environment = None get_latest_release([self.project], environment) old = self.create_release(version="old") new_date = old.date_added + timedelta(minutes=1) new = self.create_release( version="new-but-in-environment", environments=[self.environment], date_released=new_date, ) newest = self.create_release(version="newest-overall", date_released=old.date_added + timedelta(minutes=5)) # latest overall (no environment filter) environment = None result = get_latest_release([self.project], environment) assert result == [newest.version] # latest in environment environment = self.environment result = get_latest_release([self.project], [environment]) assert result == [new.version] assert get_latest_release([self.project.id], [environment]) == [] assert get_latest_release( [self.project.id], [environment], self.project.organization_id) == [new.version] # Verify that not passing an environment correctly gets the latest one assert get_latest_release([self.project], None) == [newest.version] assert get_latest_release([self.project], []) == [newest.version] with pytest.raises(Release.DoesNotExist): # environment with no releases new_environment = self.create_environment() get_latest_release([self.project], [new_environment]) project_2 = self.create_project() other_project_env_release = self.create_release( project_2, version="other_project_env", environments=[self.environment]) other_project_release = self.create_release(project_2, version="other_project") assert get_latest_release([project_2], None) == [other_project_release.version] assert get_latest_release( [project_2], [environment]) == [other_project_env_release.version] assert get_latest_release([self.project, project_2], None) == [ newest.version, other_project_release.version, ] assert get_latest_release([self.project, project_2], [environment]) == [ new.version, other_project_env_release.version, ]