Skip to content

Commit fbd9a30

Browse files
github-actions[bot]mattkrickparabol-release-bot[bot]iamsmrutiDschoordsch
authored
chore(release): Test and deploy to Production v9.0.6 (#11135)
Signed-off-by: Matt Krick <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: Matt Krick <[email protected]> Co-authored-by: parabol-release-bot[bot] <150284312+parabol-release-bot[bot]@users.noreply.github.com> Co-authored-by: Smruti Ranjan Badatya <[email protected]> Co-authored-by: Georg Bremer <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: snyk-bot <[email protected]> Co-authored-by: GitHub Action <[email protected]> Co-authored-by: Nick O'Ferrall <[email protected]> Co-authored-by: Jordan Husney <[email protected]> Co-authored-by: Bruce Tian <[email protected]> Co-authored-by: Rafa <[email protected]> Co-authored-by: Smruti Ranjan Badatya <[email protected]> Co-authored-by: Hemant Kumar Singh <[email protected]> Co-authored-by: Dale Bumblis <[email protected]> Co-authored-by: Terry Acker <[email protected]> Co-authored-by: github-actions <[email protected]>
1 parent 31718be commit fbd9a30

File tree

26 files changed

+273
-305
lines changed

26 files changed

+273
-305
lines changed

Diff for: .release-please-manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "9.0.5"
2+
".": "9.0.6"
33
}

Diff for: CHANGELOG.md

+13
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,19 @@ This project adheres to [Semantic Versioning](http://semver.org/).
55

66
This CHANGELOG follows conventions [outlined here](http://keepachangelog.com/).
77

8+
## [9.0.6](https://github.com/ParabolInc/parabol/compare/v9.0.5...v9.0.6) (2025-04-08)
9+
10+
11+
### Fixed
12+
13+
* turn on dd resolvers ([#11125](https://github.com/ParabolInc/parabol/issues/11125)) ([ba2ef28](https://github.com/ParabolInc/parabol/commit/ba2ef2884be0422cbac5fe461dc438f626838cfa))
14+
15+
16+
### Changed
17+
18+
* refactor teams query in organization ([#11085](https://github.com/ParabolInc/parabol/issues/11085)) ([7134bbb](https://github.com/ParabolInc/parabol/commit/7134bbbe14042e7828c26171e494c1c45488d1df))
19+
* Trace Azure DevOps workItems queries ([#11132](https://github.com/ParabolInc/parabol/issues/11132)) ([f2357c8](https://github.com/ParabolInc/parabol/commit/f2357c835560ca09fa0c37fb3f418c895b4448da))
20+
821
## [9.0.5](https://github.com/ParabolInc/parabol/compare/v9.0.4...v9.0.5) (2025-04-07)
922

1023

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"description": "An open-source app for building smarter, more agile teams.",
44
"author": "Parabol Inc. <[email protected]> (http://github.com/ParabolInc)",
55
"license": "AGPL-3.0",
6-
"version": "9.0.5",
6+
"version": "9.0.6",
77
"repository": {
88
"type": "git",
99
"url": "https://github.com/ParabolInc/parabol"

Diff for: packages/chronos/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "chronos",
3-
"version": "9.0.5",
3+
"version": "9.0.6",
44
"description": "A cron job scheduler",
55
"author": "Matt Krick <[email protected]>",
66
"homepage": "https://github.com/ParabolInc/parabol/tree/master/packages/chronos#readme",
@@ -25,6 +25,6 @@
2525
},
2626
"dependencies": {
2727
"cron": "^2.3.1",
28-
"parabol-server": "9.0.5"
28+
"parabol-server": "9.0.6"
2929
}
3030
}

Diff for: packages/client/components/DashNavList/DashNavList.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ const DashNavList = (props: Props) => {
3030
id
3131
name
3232
tier
33-
viewerTeams {
33+
teams {
3434
id
35+
isViewerOnTeam
3536
}
3637
}
3738
`,
@@ -63,7 +64,7 @@ const DashNavList = (props: Props) => {
6364
</Tooltip>
6465
</div>
6566
<DashNavListTeams onClick={onClick} organizationRef={org} />
66-
{org.viewerTeams.length === 0 && <EmptyTeams organizationRef={org} />}
67+
{!org.teams.some((team) => team.isViewerOnTeam) && <EmptyTeams organizationRef={org} />}
6768
</div>
6869
))}
6970
</div>

Diff for: packages/client/components/DashNavList/DashNavListTeams.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,19 @@ const DashNavListTeams = (props: Props) => {
2929
id
3030
name
3131
tier
32-
viewerTeams {
32+
teams {
3333
...DashNavListTeam @relay(mask: false)
34-
}
35-
publicTeams {
3634
...PublicTeamsModal_team
35+
isViewerOnTeam
3736
}
3837
}
3938
`,
4039
organizationRef
4140
)
4241
const [showModal, setShowModal] = useState(false)
43-
const {publicTeams, viewerTeams} = organization
42+
const allTeams = organization.teams
43+
const viewerTeams = allTeams.filter((team) => team.isViewerOnTeam)
44+
const publicTeams = allTeams.filter((team) => !team.isViewerOnTeam)
4445
const publicTeamsCount = publicTeams.length
4546

4647
const handleClose = () => {

Diff for: packages/client/components/DashNavList/EmptyTeams.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@ const EmptyTeams = (props: Props) => {
1919
fragment EmptyTeams_organization on Organization {
2020
id
2121
name
22-
publicTeams {
22+
teams {
2323
id
24+
isViewerOnTeam
2425
...PublicTeamsModal_team
2526
}
2627
}
2728
`,
2829
organizationRef
2930
)
30-
const {id: orgId, publicTeams} = organization
31+
const {id: orgId, teams} = organization
32+
const publicTeams = teams.filter((team) => !team.isViewerOnTeam)
3133
const hasPublicTeams = publicTeams.length > 0
3234

3335
const viewer = useClientQuery<EmptyTeamsQuery>(
@@ -90,4 +92,5 @@ const EmptyTeams = (props: Props) => {
9092
</>
9193
)
9294
}
95+
9396
export default EmptyTeams

Diff for: packages/client/components/DashNavList/PublicTeamsModal.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,20 @@ const PublicTeamsModal = (props: Props) => {
2424
graphql`
2525
fragment PublicTeamsModal_team on Team @relay(plural: true) {
2626
id
27+
lastMetAt
2728
...PublicTeamItem_team
2829
}
2930
`,
3031
teamsRef
3132
)
3233
const publicTeamsCount = publicTeams.length
3334

35+
const sortedTeams = [...publicTeams].sort((a, b) => {
36+
if (!a.lastMetAt) return 1
37+
if (!b.lastMetAt) return -1
38+
return new Date(b.lastMetAt).getTime() - new Date(a.lastMetAt).getTime()
39+
})
40+
3441
return (
3542
<Dialog isOpen={isOpen} onClose={onClose}>
3643
<DialogContent className='z-10 flex flex-col pr-0'>
@@ -40,7 +47,7 @@ const PublicTeamsModal = (props: Props) => {
4047
<span className='font-semibold'>{orgName}</span>
4148
</DialogDescription>
4249
<div className='overflow-auto pr-6'>
43-
{publicTeams.map((team) => (
50+
{sortedTeams.map((team) => (
4451
<Fragment key={team.id}>
4552
<hr className='my-2 border-t border-slate-300' />
4653
<PublicTeamItem teamRef={team} />

Diff for: packages/client/modules/newTeam/components/NewTeamForm/NewTeamForm.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ const NewTeamForm = (props: Props) => {
125125
lockedAt
126126
name
127127
tier
128-
allTeams {
128+
teams {
129129
name
130130
...NewTeamForm_teams @relay(mask: false)
131131
}
@@ -143,7 +143,7 @@ const NewTeamForm = (props: Props) => {
143143
const [inviteAll, setInviteAll] = useState(false)
144144
const disableFields = !!lockedSelectedOrg && !isNewOrg
145145
const selectedOrg = organizations.find((org) => org.id === orgId)
146-
const selectedOrgTeamMemberEmails = selectedOrg?.allTeams.flatMap(({teamMembers}) =>
146+
const selectedOrgTeamMemberEmails = selectedOrg?.teams.flatMap(({teamMembers}) =>
147147
teamMembers.filter(({isSelf}) => !isSelf).map(({user}) => user.email)
148148
)
149149
const uniqueEmailsFromSelectedOrg = Array.from(new Set(selectedOrgTeamMemberEmails))
@@ -164,7 +164,7 @@ const NewTeamForm = (props: Props) => {
164164
let teamNames: string[] = []
165165
if (!isNewOrg) {
166166
if (selectedOrg) {
167-
teamNames = selectedOrg.allTeams.map((team) => team.name)
167+
teamNames = selectedOrg.teams.map((team) => team.name)
168168
}
169169
}
170170
return teamNameValidation(teamName, teamNames)

Diff for: packages/client/modules/teamDashboard/components/EditTeamName/EditableTeamName.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const EditableTeamName = (props: Props) => {
2828
teamId: id
2929
teamName: name
3030
organization {
31-
allTeams {
31+
teams {
3232
id
3333
name
3434
}
@@ -38,7 +38,7 @@ const EditableTeamName = (props: Props) => {
3838
teamRef
3939
)
4040
const {teamName, teamId, organization} = team
41-
const {allTeams: teams} = organization
41+
const {teams} = organization
4242

4343
const handleSubmit = (rawName: string) => {
4444
if (submitting) return

Diff for: packages/client/modules/userDashboard/components/OrgTeams/OrgTeams.tsx

+6-9
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,16 @@ const OrgTeams = (props: Props) => {
2222
fragment OrgTeams_organization on Organization {
2323
id
2424
tier
25-
allTeams {
25+
teams {
2626
id
2727
name
2828
lastMetAt
2929
teamMembers {
3030
id
3131
}
32+
isViewerOnTeam
3233
...OrgTeamsRow_team
3334
}
34-
viewerTeams {
35-
id
36-
}
3735
allTeamsCount
3836
}
3937
`,
@@ -48,10 +46,9 @@ const OrgTeams = (props: Props) => {
4846

4947
const [sortBy, setSortBy] = useState<SortField>('lastMetAt')
5048
const [sortDirection, setSortDirection] = useState<SortDirection>('desc')
51-
52-
const {allTeams, tier, viewerTeams, allTeamsCount} = organization
53-
const showingAllTeams = allTeams.length === allTeamsCount
54-
const viewerTeamCount = viewerTeams.length
49+
const {teams, allTeamsCount, tier} = organization
50+
const showingAllTeams = teams.length === allTeamsCount
51+
const viewerTeamCount = teams.length
5552

5653
const handleSort = (field: SortField) => {
5754
if (sortBy === field) {
@@ -62,7 +59,7 @@ const OrgTeams = (props: Props) => {
6259
}
6360
}
6461

65-
const sortedTeams = [...allTeams].sort((a, b) => {
62+
const sortedTeams = [...teams].sort((a, b) => {
6663
const direction = sortDirection === 'asc' ? 1 : -1
6764
if (sortBy === 'name') {
6865
return direction * a.name.localeCompare(b.name)

Diff for: packages/client/mutations/ArchiveTeamMutation.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,7 @@ graphql`
3131
id
3232
}
3333
organization {
34-
allTeams {
35-
id
36-
}
37-
viewerTeams {
34+
teams {
3835
id
3936
}
4037
}
@@ -106,7 +103,6 @@ export const archiveTeamTeamUpdater: SharedUpdater<ArchiveTeamMutation_team$data
106103
const orgs = viewer.getLinkedRecords('organizations')!
107104
orgs.forEach((org) => {
108105
safeRemoveNodeFromArray(teamId, org, 'teams')
109-
safeRemoveNodeFromArray(teamId, org, 'allTeams')
110106
})
111107

112108
const notification = payload.getLinkedRecord('notification')

Diff for: packages/client/mutations/DowngradeToStarterMutation.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ graphql`
88
organization {
99
tier
1010
billingTier
11-
viewerTeams {
11+
teams {
1212
isPaid
1313
tier
1414
}

Diff for: packages/client/mutations/fragments/PublicTeamsFrag.ts

+2-7
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,9 @@ graphql`
77
id
88
}
99
organization {
10-
allTeams {
11-
id
12-
}
13-
viewerTeams {
14-
id
15-
}
16-
publicTeams {
10+
teams {
1711
id
12+
isViewerOnTeam
1813
}
1914
}
2015
}

Diff for: packages/client/mutations/fragments/UpgradeToTeamTierFrag.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ graphql`
1919
periodStart
2020
updatedAt
2121
lockedAt
22-
viewerTeams {
22+
teams {
2323
isPaid
2424
tier
2525
}

Diff for: packages/client/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"description": "An open-source app for building smarter, more agile teams.",
44
"author": "Parabol Inc. <[email protected]> (http://github.com/ParabolInc)",
55
"license": "AGPL-3.0",
6-
"version": "9.0.5",
6+
"version": "9.0.6",
77
"repository": {
88
"type": "git",
99
"url": "https://github.com/ParabolInc/parabol"

Diff for: packages/embedder/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "parabol-embedder",
3-
"version": "9.0.5",
3+
"version": "9.0.6",
44
"description": "A service that computes embedding vectors from Parabol objects",
55
"author": "Jordan Husney <[email protected]>",
66
"homepage": "https://github.com/ParabolInc/parabol/tree/master/packages/embedder#readme",

Diff for: packages/integration-tests/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "integration-tests",
33
"author": "Parabol Inc. <[email protected]> (http://github.com/ParabolInc)",
44
"license": "AGPL-3.0",
5-
"version": "9.0.5",
5+
"version": "9.0.6",
66
"description": "",
77
"main": "index.js",
88
"scripts": {

Diff for: packages/mattermost-plugin/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "parabol-mattermost-plugin",
3-
"version": "9.0.5",
3+
"version": "9.0.6",
44
"description": "A service that computes embedding vectors from Parabol objects",
55
"author": "Georg Bremer <[email protected]>",
66
"homepage": "https://github.com/ParabolInc/parabol/tree/master/packages/mattermost-plugin#readme",
@@ -60,7 +60,7 @@
6060
"@tiptap/extension-link": "^2.11.5",
6161
"@tiptap/starter-kit": "^2.11.5",
6262
"mattermost-redux": "5.33.1",
63-
"parabol-client": "9.0.5",
63+
"parabol-client": "9.0.6",
6464
"react-relay": "^18.2.0",
6565
"react-select": "5.8.2",
6666
"relay-runtime": "^18.1.1",

Diff for: packages/server/dataloader/RootDataLoader.ts

-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import DataLoader from 'dataloader'
2-
import {Logger} from '../utils/Logger'
32
import * as atlassianLoaders from './atlassianLoaders'
43
import * as azureDevOpsLoaders from './azureDevOpsLoaders'
54
import * as customLoaderMakers from './customLoaderMakers'
@@ -94,10 +93,3 @@ export default class RootDataLoader<
9493
// RootDataLoader
9594

9695
export const dataLoaderCache = new DataLoaderCache(RootDataLoader)
97-
98-
// Can remove this after we verify there are no memory leaks in prod
99-
// count staying constant or going down = good
100-
setInterval(() => {
101-
const workerCount = Object.keys(dataLoaderCache.workers).length
102-
Logger.log({workerCount})
103-
}, 60_000).unref()

Diff for: packages/server/graphql/private/mutations/disconnectSocket.ts

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ const disconnectSocket: MutationResolvers['disconnectSocket'] = async (
1919
redis.lrange(`presence:${userId}`, 0, -1)
2020
])
2121
if (!user) {
22+
// user could've been deleted & then key not wiped
23+
await redis.del(`presence:${userId}`)
2224
throw new Error(`User does not exist: ${userId}`)
2325
}
2426
const tms = user.tms ?? []

Diff for: packages/server/graphql/public/typeDefs/Organization.graphql

+4-12
Original file line numberDiff line numberDiff line change
@@ -48,25 +48,17 @@ type Organization {
4848
activeTeamCount: Int!
4949

5050
"""
51-
All the teams in the organization. If the viewer is not a billing lead, org admin, super user, or they do not have the publicTeams flag, return the teams they are a member of.
51+
Teams in the organization that the viewer has access to.
52+
For org admins/super users: all teams in the org (viewer's teams first).
53+
For regular users: teams the viewer is on plus public teams.
5254
"""
53-
allTeams: [Team!]!
55+
teams: [Team!]!
5456

5557
"""
5658
The count of all teams in the organization
5759
"""
5860
allTeamsCount: Int!
5961

60-
"""
61-
all the teams the viewer is on in the organization
62-
"""
63-
viewerTeams: [Team!]!
64-
65-
"""
66-
all the teams that the viewer does not belong to that are in the organization. Only visible if the org has the publicTeams flag set to true.
67-
"""
68-
publicTeams: [Team!]!
69-
7062
"""
7163
THe datetime the current billing cycle ends
7264
"""

0 commit comments

Comments
 (0)