Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(release): release v7.10.0 #9264

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ on:
push:
branches:
- master
- hotfix*
- hotfix**
name: release-please
jobs:
release-please:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ on:
pull_request:
branches:
- master
- hotfix*
- hotfix**
types: [closed]
jobs:
release:
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "7.9.0"
".": "7.10.0"
}
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,32 @@ This project adheres to [Semantic Versioning](http://semver.org/).

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

## [7.10.0](https://github.com/ParabolInc/parabol/compare/v7.9.0...v7.10.0) (2023-12-04)


### Added

* add tooltip to activity library card ([#9236](https://github.com/ParabolInc/parabol/issues/9236)) ([f8511b2](https://github.com/ParabolInc/parabol/commit/f8511b21cac91d7bf3cace828ceb337848bb3ee8))
* gcal invite all by default ([#9260](https://github.com/ParabolInc/parabol/issues/9260)) ([1e71688](https://github.com/ParabolInc/parabol/commit/1e71688e0d711e945ed373b2448b58c067e2f4b3))
* remove gcal flag ([#9251](https://github.com/ParabolInc/parabol/issues/9251)) ([9961e63](https://github.com/ParabolInc/parabol/commit/9961e6305287040179e6a2382f6ad6c9c3035d35))
* update activity library card UI ([#9168](https://github.com/ParabolInc/parabol/issues/9168)) ([662ec2b](https://github.com/ParabolInc/parabol/commit/662ec2bee8ecbb71ce2d6e5718450130eee8bcac))


### Fixed

* auto-cork, sse not working ([d486bc3](https://github.com/ParabolInc/parabol/commit/d486bc3ed1942b84183265a3e01204a113cb2fbf))
* double star glob to match / ([463e0dc](https://github.com/ParabolInc/parabol/commit/463e0dc38503c935514c4b2c9baede94962aef44))
* increases integration icon visibility ([#9164](https://github.com/ParabolInc/parabol/issues/9164)) ([b9bcd69](https://github.com/ParabolInc/parabol/commit/b9bcd6914a8940600a2a5ac886ba2cf64201aa43))


### Changed

* Cleanup Slack/Mattermost/MSTeams notifiers ([#9240](https://github.com/ParabolInc/parabol/issues/9240)) ([3bf4b81](https://github.com/ParabolInc/parabol/commit/3bf4b8102cd21a7a7130c028044d8c2251bfab14))
* **dx:** allow any branch with hotfix prefix to build ([53132c8](https://github.com/ParabolInc/parabol/commit/53132c8562af68ccc58e9f1225327cbe8eb50aa3))
* **dx:** allow any branch with hotfix prefix to build ([#9263](https://github.com/ParabolInc/parabol/issues/9263)) ([619c07c](https://github.com/ParabolInc/parabol/commit/619c07ce3c6eb884d3896a53deab210db2feef84))
* **env-file:** ununsed variables removed ([#9249](https://github.com/ParabolInc/parabol/issues/9249)) ([c155c12](https://github.com/ParabolInc/parabol/commit/c155c12486d3e07384b280b79ec0a0e216343243))
* **metrics:** add metrics to track search query in AL ([#9235](https://github.com/ParabolInc/parabol/issues/9235)) ([bfaccd8](https://github.com/ParabolInc/parabol/commit/bfaccd8154c7a4c4229adce8bf25e5ffc8d11ef0))

## [7.9.0](https://github.com/ParabolInc/parabol/compare/v7.8.1...v7.9.0) (2023-11-29)


Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"description": "An open-source app for building smarter, more agile teams.",
"author": "Parabol Inc. <[email protected]> (http://github.com/ParabolInc)",
"license": "AGPL-3.0",
"version": "7.9.0",
"version": "7.10.0",
"repository": {
"type": "git",
"url": "https://github.com/ParabolInc/parabol"
Expand Down
4 changes: 2 additions & 2 deletions packages/chronos/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "chronos",
"version": "7.9.0",
"version": "7.10.0",
"description": "A cron job scheduler",
"author": "Matt Krick <[email protected]>",
"homepage": "https://github.com/ParabolInc/parabol/tree/master/packages/chronos#readme",
Expand All @@ -25,6 +25,6 @@
},
"dependencies": {
"cron": "^2.3.1",
"parabol-server": "7.9.0"
"parabol-server": "7.10.0"
}
}
2 changes: 1 addition & 1 deletion packages/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"description": "An open-source app for building smarter, more agile teams.",
"author": "Parabol Inc. <[email protected]> (http://github.com/ParabolInc)",
"license": "AGPL-3.0",
"version": "7.9.0",
"version": "7.10.0",
"repository": {
"type": "git",
"url": "https://github.com/ParabolInc/parabol"
Expand Down
6 changes: 3 additions & 3 deletions packages/gql-executor/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "gql-executor",
"version": "7.9.0",
"version": "7.10.0",
"description": "A Stateless GraphQL Executor",
"author": "Matt Krick <[email protected]>",
"homepage": "https://github.com/ParabolInc/parabol/tree/master/packages/gqlExecutor#readme",
Expand All @@ -27,8 +27,8 @@
},
"dependencies": {
"dd-trace": "^4.2.0",
"parabol-client": "7.9.0",
"parabol-server": "7.9.0",
"parabol-client": "7.10.0",
"parabol-server": "7.10.0",
"undici": "^5.26.2"
}
}
2 changes: 1 addition & 1 deletion packages/integration-tests/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "integration-tests",
"author": "Parabol Inc. <[email protected]> (http://github.com/ParabolInc)",
"license": "AGPL-3.0",
"version": "7.9.0",
"version": "7.10.0",
"description": "",
"main": "index.js",
"scripts": {
Expand Down
12 changes: 5 additions & 7 deletions packages/server/graphql/httpGraphQLHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,11 @@ const httpGraphQLBodyHandler = async (
}
}
const response = await handleGraphQLTrebuchetRequest(body, connectionContext)
res.cork(() => {
if (response) {
res.writeHeader('content-type', 'application/json').end(JSON.stringify(response))
} else {
res.writeStatus('200').end()
}
})
if (response) {
res.writeHeader('content-type', 'application/json').end(JSON.stringify(response))
} else {
res.writeStatus('200').end()
}
}

const contentTypeBodyParserMap = {
Expand Down
4 changes: 1 addition & 3 deletions packages/server/graphql/intranetGraphQLHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,7 @@ const intranetHttpGraphQLHandler = uWSAsyncHandler(async (res: HttpResponse, req
isPrivate,
isAdHoc: true
})
res.cork(() => {
res.writeHeader('content-type', 'application/json').end(JSON.stringify(result))
})
res.writeHeader('content-type', 'application/json').end(JSON.stringify(result))
} catch (e) {
res.writeStatus('502').end()
}
Expand Down
14 changes: 5 additions & 9 deletions packages/server/jiraImagesHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,7 @@ const servePlaceholderImage = async (res: HttpResponse) => {
path.join(__dirname, jiraPlaceholder.slice(__webpack_public_path__.length))
)
}
res.cork(() => {
res.writeStatus('200').writeHeader('Content-Type', 'image/png').end(jiraPlaceholderBuffer)
})
res.writeStatus('200').writeHeader('Content-Type', 'image/png').end(jiraPlaceholderBuffer)
}

const jiraImagesHandler = uWSAsyncHandler(async (res: HttpResponse, req: HttpRequest) => {
Expand All @@ -53,12 +51,10 @@ const jiraImagesHandler = uWSAsyncHandler(async (res: HttpResponse, req: HttpReq
return
}

res.cork(() => {
res
.writeStatus('200')
.writeHeader('Content-Type', cachedImage.contentType)
.end(cachedImage.imageBuffer)
})
res
.writeStatus('200')
.writeHeader('Content-Type', cachedImage.contentType)
.end(cachedImage.imageBuffer)
})

export default jiraImagesHandler
4 changes: 2 additions & 2 deletions packages/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"description": "An open-source app for building smarter, more agile teams.",
"author": "Parabol Inc. <[email protected]> (http://github.com/ParabolInc)",
"license": "AGPL-3.0",
"version": "7.9.0",
"version": "7.10.0",
"repository": {
"type": "git",
"url": "https://github.com/ParabolInc/parabol"
Expand Down Expand Up @@ -123,7 +123,7 @@
"oauth-1.0a": "^2.2.6",
"openai": "^4.9.0",
"oy-vey": "^0.11.0",
"parabol-client": "7.9.0",
"parabol-client": "7.10.0",
"pg": "^8.5.1",
"react": "^17.0.2",
"react-dom": "^17.0.2",
Expand Down
4 changes: 3 additions & 1 deletion packages/server/pipeStreamOverResponse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ const pipeStreamOverResponse = (

.on('error', () => {
if (!res.aborted) {
res.writeStatus('500').end()
res.cork(() => {
res.writeStatus('500').end()
})
}
readStream.destroy()
})
Expand Down
42 changes: 28 additions & 14 deletions packages/server/safetyPatchRes.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import {HttpResponse, RecognizedString} from 'uWebSockets.js'

type Header = [key: RecognizedString, value: RecognizedString]

const safetyPatchRes = (res: HttpResponse) => {
if (res._end) {
throw new Error('already patched')
Expand All @@ -17,14 +19,28 @@ const safetyPatchRes = (res: HttpResponse) => {
return res
}

// Cache writes until `.end()` gets called. Then flush
res.status = ''
res.headers = [] as Header[]

const flush = <T>(thunk: () => T) => {
return res._cork(() => {
if (res.status) res._writeStatus(res.status)
res.headers.forEach((header: Header) => {
res._writeHeader(...header)
})
return thunk()
})
}

res._end = res.end
res.end = (body?: RecognizedString) => {
if (res.done) {
console.warn(`uWS: Called end after done`)
}
if (res.done || res.aborted) return res
res.done = true
return res._end(body)
return flush(() => res._end(body))
}

res._close = res.close
Expand All @@ -38,12 +54,8 @@ const safetyPatchRes = (res: HttpResponse) => {
}

res._cork = res.cork
res.cork = (cb: () => void) => {
if (res.done) {
console.warn(`uWS: Called cork after done`)
}
if (res.done || res.aborted) return res
return res._cork(cb)
res.cork = () => {
throw new Error('safetyPatchRes applies the cork for you, do not call directly')
}

res._tryEnd = res.tryEnd
Expand All @@ -52,7 +64,7 @@ const safetyPatchRes = (res: HttpResponse) => {
console.warn(`uWS: Called tryEnd after done`)
}
if (res.done || res.aborted) return [true, true]
return res._tryEnd(fullBodyOrChunk, totalSize)
return flush(() => res._tryEnd(fullBodyOrChunk, totalSize))
}

res._write = res.write
Expand All @@ -69,17 +81,17 @@ const safetyPatchRes = (res: HttpResponse) => {
if (res.done) {
console.warn(`uWS: Called writeHeader after done`)
}
if (res.done || res.aborted) return res
return res._writeHeader(key, value)
res.headers.push([key, value])
return res
}

res._writeStatus = res.writeStatus
res.writeStatus = (status: RecognizedString) => {
if (res.done) {
console.error(`uWS: Called writeStatus after done ${status}`)
}
if (res.done || res.aborted) return res
return res._writeStatus(status)
res.status = status
return res
}

res._upgrade = res.upgrade
Expand All @@ -88,13 +100,15 @@ const safetyPatchRes = (res: HttpResponse) => {
console.error(`uWS: Called upgrade after done`)
}
if (res.done || res.aborted) return
return res._upgrade(...args)
return res._cork(() => {
res._upgrade(...args)
})
}

res._getRemoteAddressAsText = res.getRemoteAddressAsText
res.getRemoteAddressAsText = () => {
if (res.done) {
console.error(`uWS: Called upgrade after done`)
console.error(`uWS: Called getRemoteAddressAsText after done`)
}
if (res.done || res.aborted) return Buffer.from('')
return res._getRemoteAddressAsText()
Expand Down
7 changes: 2 additions & 5 deletions packages/server/socketHandlers/handleUpgrade.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import {WebSocketBehavior} from 'uWebSockets.js'
import {TrebuchetCloseReason} from '../../client/types/constEnums'
import safetyPatchRes from '../safetyPatchRes'
import {isAuthenticated} from '../utils/authorization'
import checkBlacklistJWT from '../utils/checkBlacklistJWT'
import getQueryToken from '../utils/getQueryToken'
import sendToSentry from '../utils/sendToSentry'
import uwsGetIP from '../utils/uwsGetIP'

const handleUpgrade: WebSocketBehavior<void>['upgrade'] = async (res, req, context) => {
safetyPatchRes(res)
const protocol = req.getHeader('sec-websocket-protocol')
if (protocol !== 'trebuchet-ws') {
sendToSentry(new Error(`WebSocket error: invalid protocol: ${protocol}`))
Expand All @@ -19,22 +21,17 @@ const handleUpgrade: WebSocketBehavior<void>['upgrade'] = async (res, req, conte
res.writeStatus('401').end()
return
}
res.onAborted(() => {
res.aborted = true
})

const key = req.getHeader('sec-websocket-key')
const extensions = req.getHeader('sec-websocket-extensions')
const ip = uwsGetIP(res, req)
const {sub: userId, iat} = authToken
// ALL async calls must come after the message listener, or we'll skip out on messages (e.g. resub after server restart)
const isBlacklistedJWT = await checkBlacklistJWT(userId, iat)
if (res.aborted) return
if (isBlacklistedJWT) {
res.writeStatus('401').end(TrebuchetCloseReason.EXPIRED_SESSION)
return
}

res.upgrade({ip, authToken}, key, protocol, extensions, context)
}

Expand Down
Loading
Loading