Skip to content

Commit 753cc60

Browse files
github-actions[bot]parabol-release-bot[bot]Dschoordschnickoferrallmattkrick
authored
chore(release): Test and deploy to Production v9.0.4 (#11121)
Signed-off-by: Matt Krick <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: parabol-release-bot[bot] <150284312+parabol-release-bot[bot]@users.noreply.github.com> Co-authored-by: Georg Bremer <[email protected]> Co-authored-by: Nick O'Ferrall <[email protected]> Co-authored-by: Matt Krick <[email protected]> Co-authored-by: Smruti Ranjan Badatya <[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: 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 4e33fcd commit 753cc60

File tree

17 files changed

+144
-103
lines changed

17 files changed

+144
-103
lines changed

Diff for: .github/workflows/build.yml

+9-2
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ jobs:
122122
environment: "production"
123123
sourcemaps: "./build"
124124
version: ${{env.ACTION_VERSION}}
125-
- name: Push Artifacts to Datadog
125+
- name: Push Client Artifacts to Datadog
126126
env:
127127
DATADOG_API_KEY: "${{secrets.DATADOG_API_KEY}}"
128128
CDN_BUILD_URL: "https://action-files.parabol.co/production/build/"
@@ -131,7 +131,14 @@ jobs:
131131
--service=parabol-saas-production \
132132
--release-version=${{env.ACTION_VERSION}} \
133133
--minified-path-prefix=${{env.CDN_BUILD_URL}}
134-
134+
- name: Push Server Artifacts to Datadog
135+
env:
136+
DATADOG_API_KEY: "${{secrets.DATADOG_API_KEY}}"
137+
run: |
138+
yarn datadog-ci sourcemaps upload ./dist \
139+
--service=web \
140+
--release-version=${{env.ACTION_VERSION}} \
141+
--minified-path-prefix="/parabol/dist/"
135142
- name: Report Status
136143
if: failure()
137144
uses: ravsamhq/notify-slack-action@v2

Diff for: .release-please-manifest.json

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

Diff for: CHANGELOG.md

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

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

8+
## [9.0.4](https://github.com/ParabolInc/parabol/compare/v9.0.3...v9.0.4) (2025-04-07)
9+
10+
11+
### Fixed
12+
13+
* [#11107](https://github.com/ParabolInc/parabol/issues/11107) push server sourcemaps to dd ([#11119](https://github.com/ParabolInc/parabol/issues/11119)) ([37d4d98](https://github.com/ParabolInc/parabol/commit/37d4d9856fb58db2203ae898dbcc45a4d121ebb1))
14+
* bugs found under production load with graphql-yoga ([#11116](https://github.com/ParabolInc/parabol/issues/11116)) ([b46ad57](https://github.com/ParabolInc/parabol/commit/b46ad57e8970625b2f930469e7f349be43dcb37d))
15+
* use abs path ([#11120](https://github.com/ParabolInc/parabol/issues/11120)) ([1d38bc0](https://github.com/ParabolInc/parabol/commit/1d38bc00aa611d682b5e705b02bab4b920288e30))
16+
817
## [9.0.3](https://github.com/ParabolInc/parabol/compare/v9.0.2...v9.0.3) (2025-04-04)
918

1019

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.3",
6+
"version": "9.0.4",
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.3",
3+
"version": "9.0.4",
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.3"
28+
"parabol-server": "9.0.4"
2929
}
3030
}

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.3",
6+
"version": "9.0.4",
77
"repository": {
88
"type": "git",
99
"url": "https://github.com/ParabolInc/parabol"

Diff for: packages/embedder/WorkflowOrchestrator.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {sql} from 'kysely'
2-
import RootDataLoader from 'parabol-server/dataloader/RootDataLoader'
32
import getKysely from 'parabol-server/postgres/getKysely'
3+
import {getNewDataLoader} from '../server/dataloader/getNewDataLoader'
44
import {EmbedderJobType} from './EmbedderJobType'
55
import {JobQueueError} from './JobQueueError'
66
import {DBJob, JobType, Workflow} from './custom'
@@ -93,7 +93,7 @@ export class WorkflowOrchestrator {
9393
if (!step)
9494
return this.failJob(jobId, retryCount, new JobQueueError(`Step ${stepName} not found`))
9595
const {run, getNextStep} = step
96-
const dataLoader = new RootDataLoader()
96+
const dataLoader = getNewDataLoader()
9797
let result: Awaited<ReturnType<typeof run>> = false
9898
const data = {...jobData, embeddingsMetadataId, model}
9999
try {
@@ -104,6 +104,7 @@ export class WorkflowOrchestrator {
104104
result.stack = e.stack
105105
}
106106
}
107+
dataLoader.dispose()
107108
if (result instanceof JobQueueError) return this.failJob(jobId, retryCount, result)
108109
await this.finishJob(jobId)
109110
if (result === false) return

Diff for: packages/embedder/custom.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type {DataLoaderInstance} from '../server/dataloader/RootDataLoader'
1+
import type {DataLoaderWorker} from '../server/graphql/graphql'
22
import type {DB} from '../server/postgres/types/pg'
33
import {JobQueueError} from './JobQueueError'
44

@@ -8,7 +8,7 @@ type GetInputData<T> = T extends JobQueueStepRun<infer U> ? U : never
88
export type ParentJob<T> = GetInputData<T> | GetInputData<T>[]
99

1010
interface StepContext<TData> {
11-
dataLoader: DataLoaderInstance
11+
dataLoader: DataLoaderWorker
1212
data: TData
1313
}
1414

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.3",
3+
"version": "9.0.4",
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/embedder/workflows/helpers/publishSimilarRetroTopics.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {SubscriptionChannel} from '../../../client/types/constEnums'
22
import makeAppURL from '../../../client/utils/makeAppURL'
33
import appOrigin from '../../../server/appOrigin'
44
import {DataLoaderInstance} from '../../../server/dataloader/RootDataLoader'
5+
import type {DataLoaderWorker} from '../../../server/graphql/graphql'
56
import {
67
buildCommentContentBlock,
78
createAIComment
@@ -42,15 +43,20 @@ const makeSimilarDiscussionLink = async (
4243
)
4344
}
4445

45-
const publishComment = async (meetingId: string, commentId: string) => {
46+
const publishComment = async (
47+
meetingId: string,
48+
commentId: string,
49+
dataLoader: DataLoaderWorker
50+
) => {
4651
const data = {commentId, meetingId}
47-
publish(SubscriptionChannel.MEETING, meetingId, 'AddCommentSuccess', data, {})
52+
const operationId = dataLoader.share()
53+
publish(SubscriptionChannel.MEETING, meetingId, 'AddCommentSuccess', data, {operationId})
4854
}
4955

5056
export const publishSimilarRetroTopics = async (
5157
embeddingsMetadataId: number,
5258
similarEmbeddings: {embeddingsMetadataId: number; similarity: number}[],
53-
dataLoader: DataLoaderInstance
59+
dataLoader: DataLoaderWorker
5460
) => {
5561
const pg = getKysely()
5662
const links = await Promise.all(
@@ -77,5 +83,5 @@ export const publishSimilarRetroTopics = async (
7783
discussionId: relatedDiscussionsComment.discussionId
7884
})
7985
.execute()
80-
publishComment(meetingId, relatedDiscussionsComment.id)
86+
publishComment(meetingId, relatedDiscussionsComment.id, dataLoader)
8187
}

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.3",
5+
"version": "9.0.4",
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.3",
3+
"version": "9.0.4",
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.3",
63+
"parabol-client": "9.0.4",
6464
"react-relay": "^18.2.0",
6565
"react-select": "5.8.2",
6666
"relay-runtime": "^18.1.1",

Diff for: packages/server/hocusPocus.ts

+13
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ if (isNaN(port) || port < 0 || port > 65536) {
1818
throw new Error('Invalid Env Var: HOCUS_POCUS_PORT must be >= 0 and < 65536')
1919
}
2020
const server = Server.configure({
21+
stopOnSignals: false,
2122
port,
2223
quiet: true,
2324
async onListen(data) {
@@ -92,3 +93,15 @@ const server = Server.configure({
9293
})
9394

9495
server.listen()
96+
97+
const signalHandler = async () => {
98+
await server.destroy()
99+
process.exit(0)
100+
}
101+
102+
process.on('SIGINT', signalHandler)
103+
process.on('SIGQUIT', signalHandler)
104+
process.on('SIGTERM', async () => {
105+
// DO NOT CALL process.exit(0), let the handler in server.js handle that
106+
await server.destroy()
107+
})

Diff for: packages/server/package.json

+2-2
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.3",
6+
"version": "9.0.4",
77
"repository": {
88
"type": "git",
99
"url": "https://github.com/ParabolInc/parabol"
@@ -134,7 +134,7 @@
134134
"oauth-1.0a": "^2.2.6",
135135
"openai": "^4.86.1",
136136
"oy-vey": "^0.12.1",
137-
"parabol-client": "9.0.3",
137+
"parabol-client": "9.0.4",
138138
"pg": "^8.5.1",
139139
"react": "^17.0.2",
140140
"react-dom": "^17.0.2",

Diff for: packages/server/utils/publish.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,23 @@ export interface SubOptions {
1111

1212
const REDIS_DATALOADER_TTL = 25_000
1313
class PublishedDataLoaders {
14-
private set = new Set<string>()
15-
async add(id: string) {
16-
const exists = this.set.has(id)
17-
if (exists) return
18-
this.set.add(id)
14+
private promiseLookup = {} as Record<string, Promise<void>>
15+
private async pushToRedis(id: string) {
1916
const dataLoaderWorker = getInMemoryDataLoader(id)!.dataLoaderWorker
2017
const str = await serializeDataLoader(dataLoaderWorker)
2118
// keep the serialized dataloader in redis for long enough for each server to fetch it and make an in-memory copy
2219
await getRedis().set(`dataLoader:${id}`, str, 'PX', REDIS_DATALOADER_TTL)
2320
setTimeout(() => {
24-
this.set.delete(id)
21+
delete this.promiseLookup[id]
2522
// all calls to publish within a single mutation SHOULD happen within this timeframe
2623
}, REDIS_DATALOADER_TTL)
2724
}
25+
async add(id: string) {
26+
if (!this.promiseLookup[id]) {
27+
this.promiseLookup[id] = this.pushToRedis(id)
28+
}
29+
return this.promiseLookup[id]
30+
}
2831
}
2932
const publishedDataLoaders = new PublishedDataLoaders()
3033

0 commit comments

Comments
 (0)