diff --git a/.dockerignore b/.dockerignore
deleted file mode 100644
index 594684228cd0..000000000000
--- a/.dockerignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.git
-.gitignore
-LICENSE
-README.md
-docker-compose.yml
\ No newline at end of file
diff --git a/.drone.yml b/.drone.yml
deleted file mode 100644
index b43c20e9a5fb..000000000000
--- a/.drone.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-pipeline:
- restore-cache:
- image: drillster/drone-volume-cache
- restore: true
- mount:
- - /drone/.meteor/
- - ./node_modules
- - ./.meteor/local
- volumes:
- - /tmp/cache/Rocket.Chat:/cache
- build:
- image: ubuntu:16.04
- environment:
- - METEOR_ALLOW_SUPERUSER=true
- commands:
- - apt update && apt install curl git python g++ build-essential bzip2 -y
- - export HOME=/drone
- - export PATH="/drone/.meteor:$PATH"
- - if [ ! -e "/drone/.meteor/meteor" ]; then export HOME=/drone; curl https://install.meteor.com | sed s/--progress-bar/-sL/g | /bin/sh; fi
- - which meteor
- - meteor npm install
- - set +e
- - meteor add rocketchat:lib
- - set -e
- - mkdir /drone/build
- - meteor build --allow-superuser --server-only --directory /drone/build
- - cp .docker/Dockerfile.local /drone/build/Dockerfile
- rebuild-cache:
- image: drillster/drone-volume-cache
- rebuild: true
- mount:
- - /drone/.meteor/
- - ./node_modules
- - ./.meteor/local
- volumes:
- - /tmp/cache/Rocket.Chat:/cache
- docker:
- image: plugins/docker
- repo: rocketchat/rocket.chat
- dockerfile: /drone/build/Dockerfile
- storage_driver: overlay
- context: /drone/build
- secrets: [ docker_username, docker_password ]
- tag: designpreview
diff --git a/.drone.yml.sig b/.drone.yml.sig
deleted file mode 100644
index 064d2264dee3..000000000000
--- a/.drone.yml.sig
+++ /dev/null
@@ -1 +0,0 @@
-eyJhbGciOiJIUzI1NiJ9.cGlwZWxpbmU6CiAgcmVzdG9yZS1jYWNoZToKICAgIGltYWdlOiBkcmlsbHN0ZXIvZHJvbmUtdm9sdW1lLWNhY2hlCiAgICByZXN0b3JlOiB0cnVlCiAgICBtb3VudDoKICAgICAgLSAvZHJvbmUvLm1ldGVvci8KICAgICAgLSAuL25vZGVfbW9kdWxlcwogICAgICAtIC4vLm1ldGVvci9sb2NhbAogICAgdm9sdW1lczoKICAgICAgLSAvdG1wL2NhY2hlL1JvY2tldC5DaGF0Oi9jYWNoZQogIGJ1aWxkOgogICAgaW1hZ2U6IHVidW50dToxNi4wNAogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gTUVURU9SX0FMTE9XX1NVUEVSVVNFUj10cnVlCiAgICBjb21tYW5kczoKICAgICAgLSBhcHQgdXBkYXRlICYmIGFwdCBpbnN0YWxsIGN1cmwgZ2l0IHB5dGhvbiBnKysgYnVpbGQtZXNzZW50aWFsIGJ6aXAyIC15CiAgICAgIC0gZXhwb3J0IEhPTUU9L2Ryb25lCiAgICAgIC0gZXhwb3J0IFBBVEg9Ii9kcm9uZS8ubWV0ZW9yOiRQQVRIIgogICAgICAtIGlmIFsgISAtZSAiL2Ryb25lLy5tZXRlb3IvbWV0ZW9yIiBdOyB0aGVuIGV4cG9ydCBIT01FPS9kcm9uZTsgY3VybCBodHRwczovL2luc3RhbGwubWV0ZW9yLmNvbSB8IHNlZCBzLy0tcHJvZ3Jlc3MtYmFyLy1zTC9nIHwgL2Jpbi9zaDsgZmkKICAgICAgLSB3aGljaCBtZXRlb3IKICAgICAgLSBtZXRlb3IgbnBtIGluc3RhbGwKICAgICAgLSBzZXQgK2UKICAgICAgLSBtZXRlb3IgYWRkIHJvY2tldGNoYXQ6bGliCiAgICAgIC0gc2V0IC1lCiAgICAgIC0gbWtkaXIgL2Ryb25lL2J1aWxkCiAgICAgIC0gbWV0ZW9yIGJ1aWxkIC0tYWxsb3ctc3VwZXJ1c2VyIC0tc2VydmVyLW9ubHkgLS1kaXJlY3RvcnkgL2Ryb25lL2J1aWxkCiAgICAgIC0gY3AgLmRvY2tlci9Eb2NrZXJmaWxlLmxvY2FsIC9kcm9uZS9idWlsZC9Eb2NrZXJmaWxlCiAgcmVidWlsZC1jYWNoZToKICAgIGltYWdlOiBkcmlsbHN0ZXIvZHJvbmUtdm9sdW1lLWNhY2hlCiAgICByZWJ1aWxkOiB0cnVlCiAgICBtb3VudDoKICAgICAgLSAvZHJvbmUvLm1ldGVvci8KICAgICAgLSAuL25vZGVfbW9kdWxlcwogICAgICAtIC4vLm1ldGVvci9sb2NhbAogICAgdm9sdW1lczoKICAgICAgLSAvdG1wL2NhY2hlL1JvY2tldC5DaGF0Oi9jYWNoZQogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogcm9ja2V0Y2hhdC9yb2NrZXQuY2hhdAogICAgZG9ja2VyZmlsZTogL2Ryb25lL2J1aWxkL0RvY2tlcmZpbGUKICAgIHN0b3JhZ2VfZHJpdmVyOiBvdmVybGF5CiAgICBjb250ZXh0OiAvZHJvbmUvYnVpbGQKICAgIHNlY3JldHM6IFsgZG9ja2VyX3VzZXJuYW1lLCBkb2NrZXJfcGFzc3dvcmQgXQogICAgdGFnOiBkZXNpZ25wcmV2aWV3Cg.vIwnazoqiKfxsC6hQHJFmB7jE0dvewf69xJgNxUWNic
\ No newline at end of file
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index 95a479a26e4b..000000000000
--- a/.eslintrc
+++ /dev/null
@@ -1,145 +0,0 @@
-{
- "extends": [
- "@rocket.chat/eslint-config",
- "plugin:prettier/recommended"
- ],
- "parser": "babel-eslint",
- "globals": {
- "__meteor_bootstrap__": false,
- "__meteor_runtime_config__": false,
- "Assets": false,
- "chrome": false,
- "jscolor": false
- },
- "plugins": [
- "react",
- "react-hooks"
- ],
- "rules": {
- "jsx-quotes": [
- "error",
- "prefer-single"
- ],
- "react/jsx-uses-react": "error",
- "react/jsx-uses-vars": "error",
- "react/jsx-no-undef": "error",
- "react/jsx-fragments": [
- "error",
- "syntax"
- ],
- "react-hooks/rules-of-hooks": "error",
- "react-hooks/exhaustive-deps": ["warn", {
- "additionalHooks": "(useComponentDidUpdate)"
- }]
- },
- "settings": {
- "import/resolver": {
- "node": {
- "extensions": [
- ".js",
- ".ts",
- ".tsx"
- ]
- }
- },
- "react": {
- "version": "detect"
- }
- },
- "overrides": [
- {
- "files": [
- "**/*.ts",
- "**/*.tsx"
- ],
- "extends": [
- "plugin:@typescript-eslint/recommended",
- "plugin:@typescript-eslint/eslint-recommended",
- "@rocket.chat/eslint-config",
- "plugin:prettier/recommended"
- ],
- "globals": {
- "Atomics": "readonly",
- "SharedArrayBuffer": "readonly"
- },
- "parser": "@typescript-eslint/parser",
- "parserOptions": {
- "sourceType": "module",
- "ecmaVersion": 2018,
- "warnOnUnsupportedTypeScriptVersion": false,
- "ecmaFeatures": {
- "experimentalObjectRestSpread": true,
- "legacyDecorators": true
- }
- },
- "plugins": [
- "react",
- "@typescript-eslint",
- "anti-trojan-source"
- ],
- "rules": {
- "func-call-spacing": "off",
- "jsx-quotes": [
- "error",
- "prefer-single"
- ],
- "indent": "off",
- "no-dupe-class-members": "off",
- "no-spaced-func": "off",
- "no-unused-vars": "off",
- "no-useless-constructor": "off",
- "no-use-before-define": "off",
- "react/jsx-uses-react": "error",
- "react/jsx-uses-vars": "error",
- "react/jsx-no-undef": "error",
- "react/jsx-fragments": [
- "error",
- "syntax"
- ],
- "@typescript-eslint/ban-ts-ignore": "off",
- "@typescript-eslint/interface-name-prefix": [
- "error",
- "always"
- ],
- "@typescript-eslint/no-dupe-class-members": "error",
- "@typescript-eslint/no-explicit-any": "off",
- "@typescript-eslint/no-unused-vars": ["error", {
- "argsIgnorePattern": "^_",
- "ignoreRestSiblings": true
- }],
- "@typescript-eslint/prefer-optional-chain": "warn",
- "anti-trojan-source/no-bidi": "error"
- },
- "env": {
- "browser": true,
- "commonjs": true,
- "es6": true,
- "node": true
- },
- "settings": {
- "import/resolver": {
- "node": {
- "extensions": [
- ".js",
- ".ts",
- ".tsx"
- ]
- }
- },
- "react": {
- "version": "detect"
- }
- }
- },
- {
- "files": [
- "**/*.tests.js",
- "**/*.tests.ts",
- "**/*.spec.ts"
- ],
- "env": {
- "mocha": true
- }
- }
- ]
-}
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 000000000000..cc271aee793a
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,7 @@
+/packages/* @RocketChat/chat-engine
+/packages/core-typings/ @RocketChat/chat-engine
+/packages/rest-typings/ @RocketChat/chat-engine
+/packages/eslint-config/ @RocketChat/chat-engine
+/.vscode/ @RocketChat/chat-engine
+/.github/ @RocketChat/chat-engine
+/_templates/ @RocketChat/chat-engine
diff --git a/.github/history.json b/.github/history.json
index 6d6052bb6dcd..406ba05c9d1f 100644
--- a/.github/history.json
+++ b/.github/history.json
@@ -71299,13 +71299,1966 @@
"npm_version": "6.14.15",
"apps_engine_version": "1.31.0",
"mongo_versions": [
- "'3.6'",
- "'4.0'",
- "'4.2'",
- "'4.4'",
- "'5.0'"
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": []
+ },
+ "4.5.1": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24782",
+ "title": "Release 4.5.1",
+ "userLogin": "pierre-lehnen-rc",
+ "contributors": [
+ "renatobecker",
+ "pierre-lehnen-rc",
+ "sampaiodiego",
+ "matheusbsilva137",
+ "amolghode1981",
+ "juliajforesti",
+ "tiagoevanp",
+ "KevLehman",
+ "MartinSchoeler",
+ "Aman-Maheshwari",
+ "cuonghuunguyen"
+ ]
+ },
+ {
+ "pr": "24760",
+ "title": "[FIX] Apple login script being loaded even when Apple Login is disabled.",
+ "userLogin": "pierre-lehnen-rc",
+ "milestone": "4.5.1",
+ "contributors": [
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24754",
+ "title": "Chore: Update Livechat",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.1",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ },
+ {
+ "pr": "24683",
+ "title": "[FIX] no id of room closer in livechat-close message",
+ "userLogin": "cuonghuunguyen",
+ "milestone": "4.5.1",
+ "contributors": [
+ null
+ ]
+ },
+ {
+ "pr": "23795",
+ "title": "[FIX] Reload roomslist after successful deletion of a room from admin panel.",
+ "userLogin": "Aman-Maheshwari",
+ "description": "Removed the logic for calling the `rooms.adminRooms` endPoint from the `RoomsTable` Component and moved it to its parent component `RoomsPage`.\r\nThis allows to call the endPoint `rooms.adminRooms` from `EditRoomContextBar` Component which is also has `RoomPage` Component as its parent.\r\n\r\nAlso added a succes toast message after the successful deletion of room.",
+ "milestone": "4.5.1",
+ "contributors": [
+ "Aman-Maheshwari",
+ "web-flow",
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24743",
+ "title": "[FIX] System messages are sent when adding or removing a group from a team",
+ "userLogin": "matheusbsilva137",
+ "description": "- Do not send system messages when adding or removing a new or existing _group_ from a team.",
+ "milestone": "4.5.1",
+ "contributors": [
+ "matheusbsilva137"
+ ]
+ },
+ {
+ "pr": "24737",
+ "title": "[FIX] Typo and placeholder on wrap up call modal",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.1",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ },
+ {
+ "pr": "24680",
+ "title": "[FIX] Show only available agents on extension association modal",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.1",
+ "contributors": [
+ "KevLehman",
+ "tiagoevanp"
+ ]
+ },
+ {
+ "pr": "24607",
+ "title": "[FIX] VoIP Enable/Disable setting on CallContext/CallProvider Notifications",
+ "userLogin": "tiagoevanp",
+ "milestone": "4.5.1",
+ "contributors": [
+ "tiagoevanp",
+ "web-flow",
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24677",
+ "title": "[FIX] Components for user search",
+ "userLogin": "juliajforesti",
+ "milestone": "4.5.1",
+ "contributors": [
+ "juliajforesti",
+ "tassoevan",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24657",
+ "title": "[FIX] Voip Stream Reinitialization Error",
+ "userLogin": "amolghode1981",
+ "milestone": "4.5.1",
+ "contributors": [
+ "amolghode1981"
+ ]
+ },
+ {
+ "pr": "24696",
+ "title": "[FIX] Room's message count not being incremented on import",
+ "userLogin": "matheusbsilva137",
+ "description": "- Fix rooms' message counter not being incremented on message import.",
+ "milestone": "4.5.1",
+ "contributors": [
+ "matheusbsilva137"
+ ]
+ },
+ {
+ "pr": "24674",
+ "title": "[FIX] Missing username on messages imported from Slack",
+ "userLogin": "matheusbsilva137",
+ "description": "- Fix missing sender's username on messages imported from Slack.",
+ "milestone": "4.5.1",
+ "contributors": [
+ "matheusbsilva137"
+ ]
+ },
+ {
+ "pr": "24590",
+ "title": "[FIX] Duplicated 'name' log key",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.5.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24661",
+ "title": "[FIX] Typo in wrap-up term",
+ "userLogin": "renatobecker",
+ "milestone": "4.5.1",
+ "contributors": [
+ "renatobecker"
+ ]
+ }
+ ]
+ },
+ "4.5.2": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24812",
+ "title": "[FIX] Revert AutoComplete",
+ "userLogin": "juliajforesti",
+ "milestone": "4.5.2",
+ "contributors": [
+ "juliajforesti",
+ "ggazzo"
+ ]
+ },
+ {
+ "pr": "24809",
+ "title": "Regression: Fix ParentRoomWithEndpointData in loop",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.5.2",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24732",
+ "title": "[FIX] `PaginatedSelectFiltered` not handling changes",
+ "userLogin": "tassoevan",
+ "milestone": "4.5.2",
+ "contributors": [
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24805",
+ "title": "[FIX] Critical: Incorrect visitor getting assigned to a chat from apps",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.2",
+ "contributors": [
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24804",
+ "title": "[FIX] \"livechat/webrtc.call\" endpoint not working",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.2",
+ "contributors": [
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24792",
+ "title": "[FIX] VoipExtensionsPage component call",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.2",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24705",
+ "title": "[FIX] Broken multiple OAuth integrations",
+ "userLogin": "debdutdeb",
+ "milestone": "4.5.2",
+ "contributors": [
+ "debdutdeb"
+ ]
+ },
+ {
+ "pr": "24623",
+ "title": "[FIX] Opening a new DM from user card",
+ "userLogin": "tassoevan",
+ "description": "A race condition on `useRoomIcon` -- delayed merge of rooms and subscriptions -- was causing a UI crash whenever someone tried to open a DM from the user card component.",
+ "milestone": "4.5.2",
+ "contributors": [
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24750",
+ "title": "[IMPROVE] Voip Extensions disabled state",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.2",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ }
+ ]
+ },
+ "4.5.3": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24901",
+ "title": "[FIX] Custom script not being fired",
+ "userLogin": "ggazzo",
+ "milestone": "4.5.3",
+ "contributors": [
+ "ggazzo"
+ ]
+ },
+ {
+ "pr": "24877",
+ "title": "Chore: Fix MongoDB versions on release notes",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.5.3",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24864",
+ "title": "[FIX] Disable voip button when call is in progress",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24863",
+ "title": "[FIX] Broken build caused by PRs modifying same file differently",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman",
+ "tiagoevanp"
+ ]
+ },
+ {
+ "pr": "24838",
+ "title": "[FIX] [VOIP] SidebarFooter component ",
+ "userLogin": "tiagoevanp",
+ "description": "- Improve the CallProvider code;\r\n- Adjust the text case of the VoIP component on the FooterSidebar;\r\n- Fix the bad behavior with the changes in queue's name.",
+ "milestone": "4.5.3",
+ "contributors": [
+ "tiagoevanp"
+ ]
+ },
+ {
+ "pr": "24837",
+ "title": "[IMPROVE] Standarize queue behavior for managers and agents when subscribing",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24829",
+ "title": "[FIX] Show only enabled departments on forward",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24799",
+ "title": "[FIX] Wrong param usage on queue summary call",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24789",
+ "title": "[FIX] VoIP button gets disabled whenever user status changes",
+ "userLogin": "amolghode1981",
+ "milestone": "4.5.3",
+ "contributors": [
+ "amolghode1981"
+ ]
+ },
+ {
+ "pr": "24752",
+ "title": "[FIX] Show call icon only when user has extension associated",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24748",
+ "title": "[IMPROVE] UX - VoIP Call Component",
+ "userLogin": "tiagoevanp",
+ "milestone": "4.5.3",
+ "contributors": [
+ "tiagoevanp"
+ ]
+ }
+ ]
+ },
+ "4.6.0-rc.0": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24052",
+ "title": "[FIX] Several issues related to custom roles",
+ "userLogin": "pierre-lehnen-rc",
+ "description": "- Throw an error when trying to delete a role (User or Subscription role) that are still being used;\r\n- Fix \"Invalid Role\" error for custom roles in Role Editing sidebar;\r\n- Fix \"Users in Role\" screen for custom roles.",
+ "milestone": "4.6.0",
+ "contributors": [
+ "pierre-lehnen-rc",
+ "matheusbsilva137",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24781",
+ "title": "[NEW] Telemetry Events",
+ "userLogin": "eduardofcabrera",
+ "contributors": [
+ "eduardofcabrera",
+ "ostjen",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24887",
+ "title": "[IMPROVE] Adding new statistics related to voip and omnichannel",
+ "userLogin": "cauefcr",
+ "description": "- Total of Canned response messages sent\r\n- Total of tags used\r\n- Last-Chatted Agent Preferred (enabled/disabled)\r\n- Assign new conversations to the contact manager (enabled/disabled)\r\n- How to handle Visitor Abandonment setting\r\n- Amount of chats placed on hold\r\n- VoIP Enabled\r\n- Amount of VoIP Calls\r\n- Amount of VoIP Extensions connected\r\n- Amount of Calls placed on hold (1x per call)\r\n- Fixed Session Aggregation type definitions",
+ "milestone": "4.6.0",
+ "contributors": [
+ "cauefcr",
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24911",
+ "title": "Chore: Remove old scripts",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24898",
+ "title": "[FIX] DDP Rate Limiter Translation key",
+ "userLogin": "gabriellsh",
+ "description": "Before:\r\n\r\n\r\n\r\nNow:\r\n
",
+ "contributors": [
+ "gabriellsh"
+ ]
+ },
+ {
+ "pr": "24831",
+ "title": "[FIX][ENTERPRISE] Notifications not being sent by ddp-streamer",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24606",
+ "title": "[FIX] Push privacy config to not show username not being respected",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24901",
+ "title": "[FIX] Custom script not being fired",
+ "userLogin": "ggazzo",
+ "milestone": "4.5.3",
+ "contributors": [
+ "ggazzo"
+ ]
+ },
+ {
+ "pr": "24896",
+ "title": "[FIX] Wrong business hour behavior",
+ "userLogin": "murtaza98",
+ "milestone": "4.6.0",
+ "contributors": [
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24845",
+ "title": "[FIX] Ignore customClass on messages",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24879",
+ "title": "[FIX] Apple OAuth",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24895",
+ "title": "i18n: Language update from LingoHub 🤖 on 2022-03-21Z",
+ "userLogin": "lingohub[bot]",
+ "contributors": [
+ null
+ ]
+ },
+ {
+ "pr": "24749",
+ "title": "[IMPROVE] New omnichannel statistics and async statistics processing.",
+ "userLogin": "cauefcr",
+ "description": "https://app.clickup.com/t/1z4zg4e",
+ "contributors": [
+ "cauefcr"
+ ]
+ },
+ {
+ "pr": "24882",
+ "title": "[FIX] Missing dependency on useEffect at CallProvider",
+ "userLogin": "KevLehman",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24877",
+ "title": "Chore: Fix MongoDB versions on release notes",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.5.3",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24779",
+ "title": "[FIX] auto-join team channels not honoring user preferences",
+ "userLogin": "ostjen",
+ "contributors": [
+ "ostjen"
+ ]
+ },
+ {
+ "pr": "24869",
+ "title": "Bump pino from 7.8.1 to 7.9.1 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24870",
+ "title": "Bump pino-pretty from 7.5.3 to 7.5.4 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24864",
+ "title": "[FIX] Disable voip button when call is in progress",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24863",
+ "title": "[FIX] Broken build caused by PRs modifying same file differently",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman",
+ "tiagoevanp"
+ ]
+ },
+ {
+ "pr": "24850",
+ "title": "Regression: Role Sync not always working",
+ "userLogin": "pierre-lehnen-rc",
+ "contributors": [
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24838",
+ "title": "[FIX] [VOIP] SidebarFooter component ",
+ "userLogin": "tiagoevanp",
+ "description": "- Improve the CallProvider code;\r\n- Adjust the text case of the VoIP component on the FooterSidebar;\r\n- Fix the bad behavior with the changes in queue's name.",
+ "milestone": "4.5.3",
+ "contributors": [
+ "tiagoevanp"
+ ]
+ },
+ {
+ "pr": "24837",
+ "title": "[IMPROVE] Standarize queue behavior for managers and agents when subscribing",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24789",
+ "title": "[FIX] VoIP button gets disabled whenever user status changes",
+ "userLogin": "amolghode1981",
+ "milestone": "4.5.3",
+ "contributors": [
+ "amolghode1981"
+ ]
+ },
+ {
+ "pr": "24799",
+ "title": "[FIX] Wrong param usage on queue summary call",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24829",
+ "title": "[FIX] Show only enabled departments on forward",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24823",
+ "title": "i18n: Language update from LingoHub 🤖 on 2022-03-14Z",
+ "userLogin": "lingohub[bot]",
+ "contributors": [
+ null,
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24833",
+ "title": "Bump @types/mailparser from 3.0.2 to 3.4.0",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24832",
+ "title": "Bump @types/clipboard from 2.0.1 to 2.0.7",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24822",
+ "title": "Bump @types/nodemailer from 6.4.2 to 6.4.4",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24821",
+ "title": "Bump body-parser from 1.19.0 to 1.19.2",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24820",
+ "title": "Bump @types/ws from 8.5.2 to 8.5.3 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24764",
+ "title": "Chore: Add E2E tests for livechat/visitor",
+ "userLogin": "Muramatsu2602",
+ "description": "- Create a new test suite file under tests/end-to-end/api/livechat\r\n- Create tests for the following endpoints:\r\n + livechat/visitor (create visitor, update visitor, add custom fields to visitors)",
+ "contributors": [
+ "Muramatsu2602",
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24729",
+ "title": "Chore: Add E2E tests for livechat/room.close",
+ "userLogin": "Muramatsu2602",
+ "description": "* Create a new test suite file under tests/end-to-end/api/livechat\r\n * Create tests for the following endpoint:\r\n\t + ivechat/room.close",
+ "contributors": [
+ "Muramatsu2602",
+ "web-flow",
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24785",
+ "title": "[FIX] German translation for Monitore",
+ "userLogin": "JMoVS",
+ "contributors": [
+ "JMoVS",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24812",
+ "title": "[FIX] Revert AutoComplete",
+ "userLogin": "juliajforesti",
+ "milestone": "4.5.2",
+ "contributors": [
+ "juliajforesti",
+ "ggazzo"
+ ]
+ },
+ {
+ "pr": "24747",
+ "title": "Chore: APIClass types",
+ "userLogin": "felipe-rod123",
+ "description": "This pull request creates a new `restivus` module (.d.ts) for the `api.js` file.",
+ "contributors": [
+ "felipe-rod123",
+ "ggazzo"
+ ]
+ },
+ {
+ "pr": "24801",
+ "title": "Bump is-svg from 4.3.1 to 4.3.2",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24803",
+ "title": "Bump prometheus-gc-stats from 0.6.2 to 0.6.3",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24810",
+ "title": "Chore: Skip local services changes when shutting down duplicated services",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24629",
+ "title": "[FIX] \"Match error\" when converting a team to a channel",
+ "userLogin": "matheusbsilva137",
+ "description": "- Fix \"Match error\" when trying to convert a channel to a team;",
+ "milestone": "4.6.0",
+ "contributors": [
+ "matheusbsilva137",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24809",
+ "title": "Regression: Fix ParentRoomWithEndpointData in loop",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.5.2",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24397",
+ "title": "Chore: Get Settings Statistics",
+ "userLogin": "albuquerquefabio",
+ "contributors": [
+ "albuquerquefabio"
+ ]
+ },
+ {
+ "pr": "24732",
+ "title": "[FIX] `PaginatedSelectFiltered` not handling changes",
+ "userLogin": "tassoevan",
+ "milestone": "4.5.2",
+ "contributors": [
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24628",
+ "title": "Chore: converted more hooks to typescript",
+ "userLogin": "felipe-rod123",
+ "description": "Converted some functions on `client/hooks/` from JavaScript to Typescript.",
+ "contributors": [
+ "felipe-rod123",
+ "ggazzo"
+ ]
+ },
+ {
+ "pr": "24506",
+ "title": "Chore: added settings endpoint types",
+ "userLogin": "felipe-rod123",
+ "description": "Created typing for endpoint definitions on `settings.ts`.",
+ "contributors": [
+ "felipe-rod123",
+ "ggazzo",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24226",
+ "title": "[FIX] Handle Other Formats inside Upload Avatar",
+ "userLogin": "nishant23122000",
+ "description": "After resolving issue #24213 : \r\n\r\n\r\nhttps://user-images.githubusercontent.com/53515714/150325012-91413025-786e-4ce0-ae75-629f6b05b024.mp4",
+ "milestone": "4.6.0",
+ "contributors": [
+ "nishant23122000",
+ "debdutdeb",
+ "web-flow",
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24424",
+ "title": "[FIX] Prune Message issue",
+ "userLogin": "nishant23122000",
+ "milestone": "4.6.0",
+ "contributors": [
+ "nishant23122000",
+ "debdutdeb",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24805",
+ "title": "[FIX] Critical: Incorrect visitor getting assigned to a chat from apps",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.2",
+ "contributors": [
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24804",
+ "title": "[FIX] \"livechat/webrtc.call\" endpoint not working",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.2",
+ "contributors": [
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24507",
+ "title": "Chore: added Server Instances endpoint types",
+ "userLogin": "felipe-rod123",
+ "description": "Created typing for endpoint definitions on `instances.ts`.",
+ "contributors": [
+ "felipe-rod123"
+ ]
+ },
+ {
+ "pr": "24758",
+ "title": "[FIX] Prevent call button toggle when user is on call",
+ "userLogin": "KevLehman",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24800",
+ "title": "Regression: Register services right away",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24792",
+ "title": "[FIX] VoipExtensionsPage component call",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.2",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24384",
+ "title": "Chore: Convert server functions from javascript to typescript",
+ "userLogin": "felipe-rod123",
+ "description": "This pull request will be used to rewrite some functions on the Chat Engine to Typescript, in order to increase security and specify variable types on the code.",
+ "contributors": [
+ "felipe-rod123",
+ "ggazzo"
+ ]
+ },
+ {
+ "pr": "24705",
+ "title": "[FIX] Broken multiple OAuth integrations",
+ "userLogin": "debdutdeb",
+ "milestone": "4.5.2",
+ "contributors": [
+ "debdutdeb"
+ ]
+ },
+ {
+ "pr": "24793",
+ "title": "[FIX][ENTERPRISE] Auto reload feature of ddp-streamer micro service",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24783",
+ "title": "Bump pino from 7.8.0 to 7.8.1 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "23121",
+ "title": "Bump jschardet from 1.6.0 to 3.0.0",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24752",
+ "title": "[FIX] Show call icon only when user has extension associated",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.3",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24623",
+ "title": "[FIX] Opening a new DM from user card",
+ "userLogin": "tassoevan",
+ "description": "A race condition on `useRoomIcon` -- delayed merge of rooms and subscriptions -- was causing a UI crash whenever someone tried to open a DM from the user card component.",
+ "milestone": "4.5.2",
+ "contributors": [
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24750",
+ "title": "[IMPROVE] Voip Extensions disabled state",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.2",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ },
+ {
+ "pr": "24748",
+ "title": "[IMPROVE] UX - VoIP Call Component",
+ "userLogin": "tiagoevanp",
+ "milestone": "4.5.3",
+ "contributors": [
+ "tiagoevanp"
+ ]
+ },
+ {
+ "pr": "24753",
+ "title": "Chore: Micro services fixes and cleanup",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24756",
+ "title": "Regression: Improve Sidenav open/close handling and fixed codeql configs and E2E tests",
+ "userLogin": "ggazzo",
+ "contributors": [
+ "ggazzo"
+ ]
+ },
+ {
+ "pr": "24760",
+ "title": "[FIX] Apple login script being loaded even when Apple Login is disabled.",
+ "userLogin": "pierre-lehnen-rc",
+ "milestone": "4.5.1",
+ "contributors": [
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24754",
+ "title": "Chore: Update Livechat",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.1",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ },
+ {
+ "pr": "24683",
+ "title": "[FIX] no id of room closer in livechat-close message",
+ "userLogin": "cuonghuunguyen",
+ "milestone": "4.5.1",
+ "contributors": [
+ null
+ ]
+ },
+ {
+ "pr": "24771",
+ "title": "Chore: fix grammatical errors in Features",
+ "userLogin": "aadishJ01",
+ "contributors": [
+ "aadishJ01",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24759",
+ "title": "Chore: Fix grammatical errors in Code of Conduct",
+ "userLogin": "aadishJ01",
+ "contributors": [
+ "aadishJ01",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "23795",
+ "title": "[FIX] Reload roomslist after successful deletion of a room from admin panel.",
+ "userLogin": "Aman-Maheshwari",
+ "description": "Removed the logic for calling the `rooms.adminRooms` endPoint from the `RoomsTable` Component and moved it to its parent component `RoomsPage`.\r\nThis allows to call the endPoint `rooms.adminRooms` from `EditRoomContextBar` Component which is also has `RoomPage` Component as its parent.\r\n\r\nAlso added a succes toast message after the successful deletion of room.",
+ "milestone": "4.5.1",
+ "contributors": [
+ "Aman-Maheshwari",
+ "web-flow",
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24743",
+ "title": "[FIX] System messages are sent when adding or removing a group from a team",
+ "userLogin": "matheusbsilva137",
+ "description": "- Do not send system messages when adding or removing a new or existing _group_ from a team.",
+ "milestone": "4.5.1",
+ "contributors": [
+ "matheusbsilva137"
+ ]
+ },
+ {
+ "pr": "24544",
+ "title": "Chore: Fix Cypress tests",
+ "userLogin": "rodrigok",
+ "contributors": [
+ "rodrigok",
+ "tassoevan",
+ "dougfabris"
+ ]
+ },
+ {
+ "pr": "24737",
+ "title": "[FIX] Typo and placeholder on wrap up call modal",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.1",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ },
+ {
+ "pr": "24739",
+ "title": "[IMPROVE][ENTERPRISE] Don't start presence monitor when running micro services",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24738",
+ "title": "[FIX][ENTERPRISE] DDP streamer not sending data to all clients",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24680",
+ "title": "[FIX] Show only available agents on extension association modal",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.1",
+ "contributors": [
+ "KevLehman",
+ "tiagoevanp"
+ ]
+ },
+ {
+ "pr": "24710",
+ "title": "[FIX] DDP streamer errors",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24724",
+ "title": "[FIX][ENTERPRISE] Presence micro service logic",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24717",
+ "title": "i18n: Language update from LingoHub 🤖 on 2022-03-07Z",
+ "userLogin": "lingohub[bot]",
+ "contributors": [
+ null,
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24607",
+ "title": "[FIX] VoIP Enable/Disable setting on CallContext/CallProvider Notifications",
+ "userLogin": "tiagoevanp",
+ "milestone": "4.5.1",
+ "contributors": [
+ "tiagoevanp",
+ "web-flow",
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24726",
+ "title": "Chore: Improve logger to allow log of `unknown` values",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24677",
+ "title": "[FIX] Components for user search",
+ "userLogin": "juliajforesti",
+ "milestone": "4.5.1",
+ "contributors": [
+ "juliajforesti",
+ "tassoevan",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24542",
+ "title": "[FIX] Date Message Export Filter Fix",
+ "userLogin": "eduardofcabrera",
+ "description": "Fix message export filter to get all messages between \"from date\" and \"to date\", including \"to date\".",
+ "contributors": [
+ "eduardofcabrera",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24709",
+ "title": "[FIX] API Error preventing adding an email to users without one (like bot/app users)",
+ "userLogin": "debdutdeb",
+ "contributors": [
+ "debdutdeb"
+ ]
+ },
+ {
+ "pr": "24716",
+ "title": "Bump ts-node from 10.6.0 to 10.7.0 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24476",
+ "title": "[FIX] Nextcloud OAuth for incomplete token URL",
+ "userLogin": "debdutdeb",
+ "milestone": "4.6.0",
+ "contributors": [
+ "debdutdeb"
+ ]
+ },
+ {
+ "pr": "24657",
+ "title": "[FIX] Voip Stream Reinitialization Error",
+ "userLogin": "amolghode1981",
+ "milestone": "4.5.1",
+ "contributors": [
+ "amolghode1981"
+ ]
+ },
+ {
+ "pr": "24698",
+ "title": "Bump pino-pretty from 7.5.2 to 7.5.3 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24696",
+ "title": "[FIX] Room's message count not being incremented on import",
+ "userLogin": "matheusbsilva137",
+ "description": "- Fix rooms' message counter not being incremented on message import.",
+ "milestone": "4.5.1",
+ "contributors": [
+ "matheusbsilva137"
+ ]
+ },
+ {
+ "pr": "23824",
+ "title": "Chore: Improvements on role syncing (ldap, oauth and saml)",
+ "userLogin": "pierre-lehnen-rc",
+ "contributors": [
+ "pierre-lehnen-rc",
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24689",
+ "title": "Bump pino-pretty from 7.5.1 to 7.5.2 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24674",
+ "title": "[FIX] Missing username on messages imported from Slack",
+ "userLogin": "matheusbsilva137",
+ "description": "- Fix missing sender's username on messages imported from Slack.",
+ "milestone": "4.5.1",
+ "contributors": [
+ "matheusbsilva137"
+ ]
+ },
+ {
+ "pr": "24642",
+ "title": "Bump actions/setup-node from 2 to 3",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24644",
+ "title": "i18n: Language update from LingoHub 🤖 on 2022-02-28Z",
+ "userLogin": "lingohub[bot]",
+ "contributors": [
+ null,
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24590",
+ "title": "[FIX] Duplicated 'name' log key",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.5.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24668",
+ "title": "Bump actions/checkout from 2 to 3",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24574",
+ "title": "Chore(deps-dev): Bump @types/mock-require from 2.0.0 to 2.0.1",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24667",
+ "title": "Bump ts-node from 10.5.0 to 10.6.0 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24666",
+ "title": "Bump @types/ws from 8.2.3 to 8.5.2 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24640",
+ "title": "Bump url-parse from 1.5.7 to 1.5.10",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24653",
+ "title": "Merge master into develop & Set version to 4.6.0-develop",
+ "userLogin": "pierre-lehnen-rc",
+ "contributors": [
+ "pierre-lehnen-rc",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24661",
+ "title": "[FIX] Typo in wrap-up term",
+ "userLogin": "renatobecker",
+ "milestone": "4.5.1",
+ "contributors": [
+ "renatobecker"
+ ]
+ },
+ {
+ "pr": "24028",
+ "title": "[IMPROVE] Updated links in readme",
+ "userLogin": "aswinidev",
+ "contributors": [
+ "aswinidev",
+ "web-flow",
+ "debdutdeb"
+ ]
+ }
+ ]
+ },
+ "4.5.4": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24938",
+ "title": "Release 4.5.4",
+ "userLogin": "AllanPazRibeiro",
+ "contributors": [
+ "geekgonecrazy",
+ "AllanPazRibeiro"
+ ]
+ },
+ {
+ "pr": "24930",
+ "title": "[FIX] SAML Force name to string",
+ "userLogin": "geekgonecrazy",
+ "milestone": "4.5.4",
+ "contributors": [
+ "geekgonecrazy",
+ "web-flow",
+ "pierre-lehnen-rc"
+ ]
+ }
+ ]
+ },
+ "4.6.0-rc.1": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24320",
+ "title": "[FIX] LDAP avatars being rotated according to metadata even if the setting to rotate uploads is off",
+ "userLogin": "matheusbsilva137",
+ "description": "- Use the `FileUpload_RotateImages` setting (**Administration > File Upload > Rotate images on upload**) to control whether avatars should be rotated automatically based on their data (XEIF);\r\n- Display the avatar image preview (orientation) according to the `FileUpload_RotateImages` setting.",
+ "milestone": "4.6.0",
+ "contributors": [
+ "matheusbsilva137",
+ "web-flow",
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24930",
+ "title": "[FIX] SAML Force name to string",
+ "userLogin": "geekgonecrazy",
+ "milestone": "4.5.4",
+ "contributors": [
+ "geekgonecrazy",
+ "web-flow",
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24908",
+ "title": "Regression: Call doesn't stop ringing after agent unregistration",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.6.0",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ },
+ {
+ "pr": "24920",
+ "title": "Regression: Fix account service login expiration",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24867",
+ "title": "[FIX] Duplicated \"jump to message\" button on starred messages",
+ "userLogin": "Himanshu664",
+ "contributors": [
+ "Himanshu664"
+ ]
+ },
+ {
+ "pr": "24860",
+ "title": "[FIX] External search providers not working",
+ "userLogin": "tkurz",
+ "contributors": [
+ "tkurz"
+ ]
+ }
+ ]
+ },
+ "4.6.0-rc.2": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24955",
+ "title": "[FIX] room message not load when is a new message",
+ "userLogin": "filipemarins",
+ "description": "When the room object is searched for the first time, it does not exist on the front object yet (subscription), adding a fallback search for room list will guarantee to search the room details.\r\n\r\nbefore:\r\nhttps://user-images.githubusercontent.com/9275105/160223241-d2319f3e-82c5-47d6-867f-695ab2361a17.mp4\r\n\r\nafter:\r\nhttps://user-images.githubusercontent.com/9275105/160223244-84d0d2a1-3d95-464d-8b8a-e264b0d4d690.mp4",
+ "milestone": "4.5.5",
+ "contributors": [
+ "filipemarins",
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24969",
+ "title": "Chore: Storybook mocking and examples improved",
+ "userLogin": "tassoevan",
+ "description": "- Stories from `ee/` included;\r\n- Differentiate root story kinds;\r\n- Mocking of `ServerContext` via Storybook parameters.",
+ "contributors": [
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24990",
+ "title": "Chore: Update Livechat",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.5",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ },
+ {
+ "pr": "24897",
+ "title": "[FIX] Room archived/unarchived system messages aren't sent when editing room settings",
+ "userLogin": "matheusbsilva137",
+ "description": "- Send the \"Room archived\" and \"Room unarchived\" system messages when editing room settings (and not only when rooms are archived/unarchived with the slash-command);\r\n- Fix the \"Hide System Messages\" option for the \"Room archived\" and \"Room unarchived\" system messages;",
+ "contributors": [
+ "matheusbsilva137"
+ ]
+ },
+ {
+ "pr": "24925",
+ "title": "Chore: add some missing REST definitions",
+ "userLogin": "gerzonc",
+ "description": "On the [mobile client](https://github.com/RocketChat/Rocket.Chat.ReactNative), we made an effort to collect more `REST API` definitions that are missing on the server side during our migration to TypeScript. Since we're both migrating to TypeScript, we thought it would be a good idea to share those so you guys can benefit from our initiative.",
+ "contributors": [
+ "gerzonc"
+ ]
+ },
+ {
+ "pr": "24971",
+ "title": "i18n: Language update from LingoHub 🤖 on 2022-03-28Z",
+ "userLogin": "lingohub[bot]",
+ "contributors": [
+ null
+ ]
+ },
+ {
+ "pr": "24921",
+ "title": "[FIX] Register with Secret URL",
+ "userLogin": "yash-rajpal",
+ "contributors": [
+ "yash-rajpal"
+ ]
+ },
+ {
+ "pr": "24948",
+ "title": "Regression: Fix unexpected errors breaking ddp-streamer",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ }
+ ]
+ },
+ "4.6.0-rc.3": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24994",
+ "title": "[FIX] High CPU usage caused by CallProvider",
+ "userLogin": "tiagoevanp",
+ "description": "Remove infinity loop inside useVoipClient hook.\r\n\r\n#closes #24970",
+ "milestone": "4.5.5",
+ "contributors": [
+ "ggazzo",
+ "tiagoevanp"
+ ]
+ }
+ ]
+ },
+ "4.5.5": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24998",
+ "title": "Release 4.5.5",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "MartinSchoeler",
+ "sampaiodiego",
+ "filipemarins",
+ "tiagoevanp"
+ ]
+ },
+ {
+ "pr": "24994",
+ "title": "[FIX] High CPU usage caused by CallProvider",
+ "userLogin": "tiagoevanp",
+ "description": "Remove infinity loop inside useVoipClient hook.\r\n\r\n#closes #24970",
+ "milestone": "4.5.5",
+ "contributors": [
+ "ggazzo",
+ "tiagoevanp"
+ ]
+ },
+ {
+ "pr": "24955",
+ "title": "[FIX] Multiple issues starting a new DM",
+ "userLogin": "filipemarins",
+ "description": "When the room object is searched for the first time, it does not exist on the front object yet (subscription), adding a fallback search for room list will guarantee to search the room details.\r\n\r\nbefore:\r\nhttps://user-images.githubusercontent.com/9275105/160223241-d2319f3e-82c5-47d6-867f-695ab2361a17.mp4\r\n\r\nafter:\r\nhttps://user-images.githubusercontent.com/9275105/160223244-84d0d2a1-3d95-464d-8b8a-e264b0d4d690.mp4",
+ "milestone": "4.5.5",
+ "contributors": [
+ "filipemarins",
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24990",
+ "title": "Chore: Update Livechat",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.5",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ }
+ ]
+ },
+ "4.6.0-rc.4": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "25017",
+ "title": "Regression: Add createdOTR index",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "25015",
+ "title": "Chore: Bump Fuselage packages",
+ "userLogin": "dougfabris",
+ "description": "It uses the last stable version of Fuselage packages.",
+ "milestone": "4.6.0",
+ "contributors": [
+ "dougfabris",
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24999",
+ "title": "Regression: Custom roles displaying ID instead of name on some admin screens",
+ "userLogin": "pierre-lehnen-rc",
+ "description": "![image](https://user-images.githubusercontent.com/55164754/160981416-555bcaa1-c075-4260-937c-64523472da43.png)\r\n![image](https://user-images.githubusercontent.com/55164754/160981452-6eae4e74-8425-4073-8256-472aba72b9db.png)",
+ "milestone": "4.6.0",
+ "contributors": [
+ "pierre-lehnen-rc",
+ "dougfabris",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24835",
+ "title": "[NEW] Upgrade Tab",
+ "userLogin": "gabriellsh",
+ "description": "![image](https://user-images.githubusercontent.com/27704687/160172260-c656282e-a487-4092-948d-d11c9bacb598.png)",
+ "milestone": "4.6.0",
+ "contributors": [
+ "gabriellsh",
+ "dougfabris",
+ "web-flow",
+ "tassoevan",
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24980",
+ "title": "Regression: Error is raised when there's no Asterisk queue available yet",
+ "userLogin": "amolghode1981",
+ "milestone": "4.7.0",
+ "contributors": [
+ "amolghode1981"
+ ]
+ }
+ ]
+ },
+ "4.6.0-rc.5": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "25021",
+ "title": "Bump @rocket.chat/emitter from 0.31.4 to 0.31.9 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "25020",
+ "title": "Bump @rocket.chat/ui-kit from 0.31.4 to 0.31.9 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "25019",
+ "title": "Bump @rocket.chat/message-parser from 0.31.4 to 0.31.9 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "25018",
+ "title": "Bump @rocket.chat/string-helpers from 0.31.4 to 0.31.9 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ }
+ ]
+ },
+ "4.6.0": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
],
"pull_requests": []
+ },
+ "4.6.1": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "25022",
+ "title": "[FIX] Proxy settings being ignored",
+ "userLogin": "pierre-lehnen-rc",
+ "description": "Modify Meteor's `HTTP.call` to add back proxy support",
+ "milestone": "4.6.1",
+ "contributors": [
+ "pierre-lehnen-rc",
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "25082",
+ "title": "[FIX] Invitation links don't redirect to the registration form",
+ "userLogin": "yash-rajpal",
+ "milestone": "4.6.1",
+ "contributors": [
+ "yash-rajpal"
+ ]
+ },
+ {
+ "pr": "25069",
+ "title": "[FIX] FormData uploads not working",
+ "userLogin": "gabriellsh",
+ "milestone": "4.6.1",
+ "contributors": [
+ "gabriellsh",
+ "dougfabris"
+ ]
+ },
+ {
+ "pr": "25067",
+ "title": "[FIX] NPS never finishing sending results",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.6.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "25050",
+ "title": "[FIX] Upgrade Tab showing for a split second",
+ "userLogin": "gabriellsh",
+ "milestone": "4.6.1",
+ "contributors": [
+ "gabriellsh"
+ ]
+ },
+ {
+ "pr": "25055",
+ "title": "[FIX] UserAutoComplete not rendering UserAvatar correctly",
+ "userLogin": "dougfabris",
+ "description": "### before\r\n![Screen Shot 2022-04-04 at 16 50 21](https://user-images.githubusercontent.com/27704687/161620921-800bf66a-806d-4f83-b2e1-073c34215001.png)\r\n\r\n### after\r\n![Screen Shot 2022-04-04 at 16 49 00](https://user-images.githubusercontent.com/27704687/161620720-3e27774d-c241-46ca-b764-932a9295d709.png)",
+ "milestone": "4.6.1",
+ "contributors": [
+ "dougfabris"
+ ]
+ }
+ ]
+ },
+ "4.4.3": {
+ "node_version": "14.18.2",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.30.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "25022",
+ "title": "[FIX] Proxy settings being ignored",
+ "userLogin": "pierre-lehnen-rc",
+ "description": "Modify Meteor's `HTTP.call` to add back proxy support",
+ "milestone": "4.6.1",
+ "contributors": [
+ "pierre-lehnen-rc",
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "25067",
+ "title": "[FIX] NPS never finishing sending results",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.6.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ }
+ ]
+ },
+ "4.5.6": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "25022",
+ "title": "[FIX] Proxy settings being ignored",
+ "userLogin": "pierre-lehnen-rc",
+ "description": "Modify Meteor's `HTTP.call` to add back proxy support",
+ "milestone": "4.6.1",
+ "contributors": [
+ "pierre-lehnen-rc",
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "25067",
+ "title": "[FIX] NPS never finishing sending results",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.6.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ }
+ ]
+ },
+ "4.6.2": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "25101",
+ "title": "[FIX] Database indexes not being created",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.6.2",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24933",
+ "title": "[FIX] Deactivating user breaks if user is the only room owner",
+ "userLogin": "sidmohanty11",
+ "description": "## Before\r\n\r\nhttps://user-images.githubusercontent.com/73601258/160000871-cfc2f2a5-2a59-4d27-8049-7754d003dd48.mp4\r\n\r\n\r\n\r\n## After\r\nhttps://user-images.githubusercontent.com/73601258/159998287-681ab475-ff33-4282-82ff-db751c59a392.mp4",
+ "milestone": "4.6.2",
+ "contributors": [
+ "sidmohanty11",
+ "sampaiodiego"
+ ]
+ }
+ ]
+ },
+ "4.6.3": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0",
+ "mongo_versions": [
+ "3.6",
+ "4.0",
+ "4.2",
+ "4.4",
+ "5.0"
+ ],
+ "pull_requests": [
+ {
+ "pr": "25220",
+ "title": "[FIX] Desktop notification on multi-instance environments",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.6.3",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ }
+ ]
}
}
}
\ No newline at end of file
diff --git a/.github/no-js-action-config.json b/.github/no-js-action-config.json
index f2c55418f002..5e76f81ed62b 100644
--- a/.github/no-js-action-config.json
+++ b/.github/no-js-action-config.json
@@ -1,5 +1,5 @@
{
"added": {
- "ignore": ["packages/accounts-linkedin/**/*", "packages/linkedin-oauth/**/*", "tests/cypress/integration/08-resolutions.spec.js"]
+ "ignore": ["packages/accounts-linkedin/**/*", "packages/linkedin-oauth/**/*", "tests/cypress/integration/08-resolutions.spec.js", "**/.eslintrc.js", "packages/eslint-config/**"]
}
}
diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml
index 916b9cef0b2c..18bc38f0ef3f 100644
--- a/.github/workflows/build_and_test.yml
+++ b/.github/workflows/build_and_test.yml
@@ -4,11 +4,15 @@ on:
release:
types: [published]
pull_request:
- branches: '**'
+ branches: "**"
push:
branches:
- develop
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
env:
CI: true
MONGO_URL: mongodb://localhost:27017
@@ -32,7 +36,7 @@ jobs:
- name: Use Node.js 14.18.3
uses: actions/setup-node@v3
with:
- node-version: '14.18.3'
+ node-version: "14.18.3"
- uses: actions/checkout@v3
@@ -44,9 +48,10 @@ jobs:
docker rmi $(docker image ls -aq)
df -h
- - name: check package-lock
- run: |
- npx package-lock-check
+ # TODO is this required?
+ # - name: check package-lock
+ # run: |
+ # npx package-lock-check
- name: Cache cypress
id: cache-cypress
@@ -54,28 +59,35 @@ jobs:
with:
path: /home/runner/.cache/Cypress
key: ${{ runner.OS }}-cache-cypress-${{ hashFiles('**/package-lock.json', '.github/workflows/build_and_test.yml') }}
-
- # - name: Cache node modules
- # id: cache-nodemodules
- # uses: actions/cache@v2
- # with:
- # path: |
- # ./node_modules
- # ./ee/server/services/node_modules
- # key: ${{ runner.OS }}-node_modules-4-${{ hashFiles('**/package-lock.json', '.github/workflows/build_and_test.yml') }}
-
+ - uses: c-hive/gha-yarn-cache@v2
+ - name: Cache turbo
+ id: cache-turbo
+ uses: actions/cache@v2
+ with:
+ path: |
+ ./node_modules/.turbo
+ key: ${{ runner.OS }}-turbo-${{ hashFiles('**/yarn.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-turbo-
+ ${{ runner.os }}-
+
+ # TODO change to use turbo cache
- name: Cache meteor local
uses: actions/cache@v2
with:
- path: ./.meteor/local
- key: ${{ runner.OS }}-meteor_cache-${{ hashFiles('.meteor/versions', '.github/workflows/build_and_test.yml') }}
-
+ path: ./apps/meteor/.meteor/local
+ key: ${{ runner.OS }}-meteor_cache-${{ hashFiles('apps/meteor/.meteor/versions') }}
+ restore-keys: |
+ ${{ runner.os }}-meteor_cache-
+ ${{ runner.os }}-
- name: Cache meteor
uses: actions/cache@v2
with:
path: ~/.meteor
- key: ${{ runner.OS }}-meteor-${{ hashFiles('.meteor/release', '.github/workflows/build_and_test.yml') }}
-
+ key: ${{ runner.OS }}-meteor-${{ hashFiles('apps/meteor/.meteor/release') }}
+ restore-keys: |
+ ${{ runner.os }}-meteor-
+ ${{ runner.os }}-
- name: Install Meteor
run: |
# Restore bin from cache
@@ -98,33 +110,29 @@ jobs:
- name: Versions
run: |
npm --versions
+ yarn -v
node -v
meteor --version
meteor npm --versions
meteor node -v
git version
- - name: npm install
+ - name: yarn install
# if: steps.cache-nodemodules.outputs.cache-hit != 'true' || steps.cache-cypress.outputs.cache-hit != 'true'
- run: |
- meteor npm install
- cd ./ee/server/services
- npm install
- cd -
+ run: yarn
- - run: meteor npm run lint
+ - run: yarn lint
- - run: meteor npm run translation-check
+ - run: yarn turbo run translation-check
- name: TS typecheck
run: |
- meteor npm run typecheck
- cd ./ee/server/services
- meteor npm run typecheck
+ yarn turbo run typecheck
- name: Reset Meteor
if: startsWith(github.ref, 'refs/tags/') == 'true' || github.ref == 'refs/heads/develop'
run: |
+ cd ./apps/meteor
meteor reset
- name: Build Rocket.Chat From Pull Request
@@ -132,12 +140,12 @@ jobs:
env:
METEOR_PROFILE: 1000
run: |
- meteor build --server-only --directory --debug /tmp/build-test
+ yarn build:ci -- --debug --directory /tmp/build-test
- name: Build Rocket.Chat
if: startsWith(github.ref, 'refs/pull/') != true
run: |
- meteor build --server-only --directory /tmp/build-test
+ yarn build:ci -- --directory /tmp/build-test
- name: Prepare build
run: |
@@ -167,8 +175,8 @@ jobs:
strategy:
matrix:
- node-version: ['14.18.3']
- mongodb-version: ['3.6', '4.0', '4.2', '4.4', '5.0']
+ node-version: ["14.18.3"]
+ mongodb-version: ["3.6", "4.0", "4.2", "4.4", "5.0"]
steps:
- name: Launch MongoDB
@@ -210,63 +218,86 @@ jobs:
with:
path: /home/runner/.cache/Cypress
key: ${{ runner.OS }}-cache-cypress-${{ hashFiles('**/package-lock.json', '.github/workflows/build_and_test.yml') }}
-
- # - name: Cache node modules
- # id: cache-nodemodules
- # uses: actions/cache@v2
- # with:
- # path: |
- # ./node_modules
- # ./ee/server/services/node_modules
- # key: ${{ runner.OS }}-node_modules-4-${{ hashFiles('**/package-lock.json', '.github/workflows/build_and_test.yml') }}
-
- - name: NPM install
+ restore-keys: |
+ ${{ runner.os }}-cache-cypress-
+ ${{ runner.os }}-
+ - uses: c-hive/gha-yarn-cache@v2
+ - name: Cache turbo
+ id: cache-turbo
+ uses: actions/cache@v2
+ with:
+ path: |
+ ./node_modules/.turbo
+ key: ${{ runner.OS }}-turbo-${{ hashFiles('**/yarn.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-turbo-
+ ${{ runner.os }}-
+
+ - name: Yarn install
# if: steps.cache-nodemodules.outputs.cache-hit != 'true' || steps.cache-cypress.outputs.cache-hit != 'true'
- run: |
- npm install
-
- - name: Unit Test (definitions)
- run: npm run testunit-definition
+ run: yarn
- name: Unit Test
- run: npm run testunit
+ run: yarn testunit
- - name: Unit Test (client)
- run: npm run testunit-client
+ - name: Install Playwright
+ run: |
+ cd ./apps/meteor
+ npx playwright install --with-deps
- name: E2E Test API
env:
- TEST_MODE: 'true'
+ TEST_MODE: "true"
MONGO_URL: mongodb://localhost:27017/rocketchat
MONGO_OPLOG_URL: mongodb://localhost:27017/local
run: |
+ cd ./apps/meteor
echo -e 'pcm.!default {\n type hw\n card 0\n}\n\nctl.!default {\n type hw\n card 0\n}' > ~/.asoundrc
Xvfb -screen 0 1024x768x24 :99 &
for i in $(seq 1 5); do (docker exec mongo mongo rocketchat --eval 'db.dropDatabase()') && npm run testci -- --test=testapi && s=0 && break || s=$? && sleep 1; done; (exit $s)
- - name: E2E Test UI
+ - name: E2E Test UI (Legacy - Cypress)
env:
- TEST_MODE: 'true'
+ TEST_MODE: "true"
MONGO_URL: mongodb://localhost:27017/rocketchat
MONGO_OPLOG_URL: mongodb://localhost:27017/local
run: |
+ cd ./apps/meteor
echo -e 'pcm.!default {\n type hw\n card 0\n}\n\nctl.!default {\n type hw\n card 0\n}' > ~/.asoundrc
Xvfb -screen 0 1024x768x24 :99 &
for i in $(seq 1 2); do (docker exec mongo mongo rocketchat --eval 'db.dropDatabase()') && npm run testci -- --test=testui && s=0 && break || s=$? && ([ ! -w tests/cypress/screenshots ] || mv tests/cypress/screenshots tests/cypress/screenshots-$i) && ([ ! -w tests/cypress/videos ] || mv tests/cypress/videos tests/cypress/videos-$i) && sleep 1; done; (exit $s)
+ - name: E2E Test UI
+ env:
+ TEST_MODE: "true"
+ MONGO_URL: mongodb://localhost:27017/rocketchat
+ MONGO_OPLOG_URL: mongodb://localhost:27017/local
+ run: |
+ cd ./apps/meteor
+ echo -e 'pcm.!default {\n type hw\n card 0\n}\n\nctl.!default {\n type hw\n card 0\n}' > ~/.asoundrc
+ Xvfb -screen 0 1024x768x24 :99 &
+ docker exec mongo mongo rocketchat --eval 'db.dropDatabase()' && npm run testci -- --test=test:playwright
+
+ - name: Store playwright test trace
+ uses: actions/upload-artifact@v2
+ if: failure()
+ with:
+ name: playwright-test-trace
+ path: ./apps/meteor/tests/e2e/test-failures*
+
- name: Store cypress test screenshots
uses: actions/upload-artifact@v2
if: failure()
with:
name: cypress-test-screenshots
- path: tests/cypress/screenshots*
+ path: ./apps/meteor/tests/cypress/screenshots*
- name: Store cypress test videos
uses: actions/upload-artifact@v2
if: failure()
with:
name: cypress-test-videos
- path: tests/cypress/videos*
+ path: ./apps/meteor/tests/cypress/videos*
test-ee:
runs-on: ubuntu-20.04
@@ -274,8 +305,8 @@ jobs:
strategy:
matrix:
- node-version: ['14.18.3']
- mongodb-version: ['4.4']
+ node-version: ["14.18.3"]
+ mongodb-version: ["4.4"]
steps:
- name: Launch MongoDB
@@ -320,45 +351,44 @@ jobs:
with:
path: /home/runner/.cache/Cypress
key: ${{ runner.OS }}-cache-cypress-${{ hashFiles('**/package-lock.json', '.github/workflows/build_and_test.yml') }}
-
- # - name: Cache node modules
- # id: cache-nodemodules
- # uses: actions/cache@v2
- # with:
- # path: |
- # ./node_modules
- # ./ee/server/services/node_modules
- # key: ${{ runner.OS }}-node_modules-4-${{ hashFiles('**/package-lock.json', '.github/workflows/build_and_test.yml') }}
-
- - name: NPM install
+ - uses: c-hive/gha-yarn-cache@v2
+ - name: Cache turbo
+ id: cache-turbo
+ uses: actions/cache@v2
+ with:
+ path: |
+ ./node_modules/.turbo
+ key: ${{ runner.OS }}-turbo-${{ hashFiles('**/yarn.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-turbo-
+ ${{ runner.os }}-
+
+ - name: Yarn install
# if: steps.cache-nodemodules.outputs.cache-hit != 'true' || steps.cache-cypress.outputs.cache-hit != 'true'
- run: |
- npm install
- cd ./ee/server/services
- npm install
+ run: yarn
- name: Build micro services
- run: |
- cd ./ee/server/services
- npm run build
+ run: yarn build:services
- name: E2E Test API
env:
- TEST_MODE: 'true'
+ TEST_MODE: "true"
MONGO_URL: mongodb://localhost:27017/rocketchat
MONGO_OPLOG_URL: mongodb://localhost:27017/local
ENTERPRISE_LICENSE: ${{ secrets.ENTERPRISE_LICENSE }}
TRANSPORTER: nats://localhost:4222
- SKIP_PROCESS_EVENT_REGISTRATION: 'true'
+ SKIP_PROCESS_EVENT_REGISTRATION: "true"
run: |
echo -e 'pcm.!default {\n type hw\n card 0\n}\n\nctl.!default {\n type hw\n card 0\n}' > ~/.asoundrc
Xvfb -screen 0 1024x768x24 :99 &
+ cd ./apps/meteor/
+
for i in $(seq 1 5); do (docker exec mongo mongo rocketchat --eval 'db.dropDatabase()') && npm run testci -- --enterprise --test=testapi && s=0 && break || s=$? && sleep 1; done; (exit $s)
- - name: E2E Test UI
+ - name: E2E Test UI (Legacy - Cypress)
env:
- TEST_MODE: 'true'
+ TEST_MODE: "true"
MONGO_URL: mongodb://localhost:27017/rocketchat
MONGO_OPLOG_URL: mongodb://localhost:27017/local
ENTERPRISE_LICENSE: ${{ secrets.ENTERPRISE_LICENSE }}
@@ -366,26 +396,59 @@ jobs:
CYPRESS_BASE_URL: http://localhost:4000
CYPRESS_TEST_API_URL: http://localhost:4000
OVERWRITE_SETTING_Site_Url: http://localhost:4000
- SKIP_PROCESS_EVENT_REGISTRATION: 'true'
+ SKIP_PROCESS_EVENT_REGISTRATION: "true"
run: |
echo -e 'pcm.!default {\n type hw\n card 0\n}\n\nctl.!default {\n type hw\n card 0\n}' > ~/.asoundrc
Xvfb -screen 0 1024x768x24 :99 &
+ cd ./apps/meteor/
+
for i in $(seq 1 2); do (docker exec mongo mongo rocketchat --eval 'db.dropDatabase()') && npm run testci -- --enterprise --test=testui && s=0 && break || s=$? && ([ ! -w tests/cypress/screenshots ] || mv tests/cypress/screenshots tests/cypress/screenshots-$i) && ([ ! -w tests/cypress/videos ] || mv tests/cypress/videos tests/cypress/videos-$i) && sleep 1; done; (exit $s)
+ - name: Install Playwright
+ run: |
+ cd ./apps/meteor/
+ npx playwright install --with-deps
+
+ - name: E2E Test UI
+ env:
+ TEST_MODE: "true"
+ MONGO_URL: mongodb://localhost:27017/rocketchat
+ MONGO_OPLOG_URL: mongodb://localhost:27017/local
+ ENTERPRISE_LICENSE: ${{ secrets.ENTERPRISE_LICENSE }}
+ TRANSPORTER: nats://localhost:4222
+ CYPRESS_BASE_URL: http://localhost:4000
+ CYPRESS_TEST_API_URL: http://localhost:4000
+ OVERWRITE_SETTING_Site_Url: http://localhost:4000
+ SKIP_PROCESS_EVENT_REGISTRATION: "true"
+ run: |
+ echo -e 'pcm.!default {\n type hw\n card 0\n}\n\nctl.!default {\n type hw\n card 0\n}' > ~/.asoundrc
+ Xvfb -screen 0 1024x768x24 :99 &
+
+ cd ./apps/meteor
+
+ docker exec mongo mongo rocketchat --eval 'db.dropDatabase()' && npm run testci -- --enterprise --test=test:playwright:ee
+
+ - name: Store playwright test trace
+ uses: actions/upload-artifact@v2
+ if: failure()
+ with:
+ name: ee-playwright-test-trace
+ path: ./apps/meteor/tests/e2e/test-failures*
+
- name: Store cypress test screenshots
uses: actions/upload-artifact@v2
if: failure()
with:
name: ee-cypress-test-screenshots
- path: tests/cypress/screenshots*
+ path: ./apps/meteor/tests/cypress/screenshots*
- name: Store cypress test videos
uses: actions/upload-artifact@v2
if: failure()
with:
name: ee-cypress-test-videos
- path: tests/cypress/videos*
+ path: ./apps/meteor/tests/cypress/videos*
# notification:
# runs-on: ubuntu-20.04
# needs: test
@@ -406,7 +469,7 @@ jobs:
strategy:
matrix:
- release: ['official', 'preview']
+ release: ["official", "preview"]
steps:
- uses: actions/checkout@v3
@@ -425,32 +488,38 @@ jobs:
sudo apt clean
docker rmi $(docker image ls -aq)
df -h
-
- # - name: Cache node modules
- # id: cache-nodemodules
- # uses: actions/cache@v2
- # with:
- # path: |
- # ./node_modules
- # ./ee/server/services/node_modules
- # key: ${{ runner.OS }}-node_modules-4-${{ hashFiles('**/package-lock.json', '.github/workflows/build_and_test.yml') }}
+ - uses: c-hive/gha-yarn-cache@v2
+ - name: Cache turbo
+ id: cache-turbo
+ uses: actions/cache@v2
+ with:
+ path: |
+ ./node_modules/.turbo
+ key: ${{ runner.OS }}-turbo-${{ hashFiles('**/yarn.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-turbo-
+ ${{ runner.os }}-
- name: Cache meteor local
uses: actions/cache@v2
with:
- path: ./.meteor/local
- key: ${{ runner.OS }}-meteor_cache-${{ hashFiles('.meteor/versions', '.github/workflows/build_and_test.yml') }}
-
+ path: ./apps/meteor/.meteor/local
+ key: ${{ runner.OS }}-meteor_cache-${{ hashFiles('.meteor/versions') }}
+ restore-keys: |
+ ${{ runner.os }}-meteor_cache-
+ ${{ runner.os }}-
- name: Cache meteor
uses: actions/cache@v2
with:
path: ~/.meteor
- key: ${{ runner.OS }}-meteor-${{ hashFiles('.meteor/release', '.github/workflows/build_and_test.yml') }}
-
+ key: ${{ runner.OS }}-meteor-${{ hashFiles('.meteor/release') }}
+ restore-keys: |
+ ${{ runner.os }}-meteor-
+ ${{ runner.os }}-
- name: Use Node.js 14.18.3
uses: actions/setup-node@v3
with:
- node-version: '14.18.3'
+ node-version: "14.18.3"
- name: Install Meteor
run: |
@@ -474,16 +543,16 @@ jobs:
- name: Versions
run: |
npm --versions
+ yarn -v
node -v
meteor --version
meteor npm --versions
meteor node -v
git version
- - name: npm install
+ - name: Yarn install
# if: steps.cache-nodemodules.outputs.cache-hit != 'true'
- run: |
- meteor npm install
+ run: yarn
# To reduce memory need during actual build, build the packages solely first
# - name: Build a Meteor cache
@@ -496,8 +565,7 @@ jobs:
# git checkout -- server/main.ts client/main.ts .meteor/packages
- name: Build Rocket.Chat
- run: |
- meteor build --server-only --directory /tmp/build-pr
+ run: yarn build:ci -- --directory /tmp/build-pr
- name: Build Docker image for PRs
run: |
@@ -513,7 +581,7 @@ jobs:
echo "Build official Docker image ${IMAGE_NAME}"
- DOCKER_PATH="${GITHUB_WORKSPACE}/.docker"
+ DOCKER_PATH="${GITHUB_WORKSPACE}/apps/meteor/.docker"
if [[ '${{ matrix.release }}' = 'preview' ]]; then
DOCKER_PATH="${DOCKER_PATH}-mongo"
fi;
@@ -527,10 +595,67 @@ jobs:
docker build -t $IMAGE_NAME .
docker push $IMAGE_NAME
+ services-image-build-check:
+ runs-on: ubuntu-20.04
+ if: github.event.pull_request.head.repo.full_name == github.repository
+
+ strategy:
+ matrix:
+ service:
+ ["ddp-streamer"]
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Use Node.js 14.18.3
+ uses: actions/setup-node@v3
+ with:
+ node-version: "14.18.3"
+
+ - name: Build Docker images
+ env:
+ IMAGE_TAG: check
+ run: |
+ yarn
+ yarn build:services
+
+ echo "Building Docker image for service: ${{ matrix.service }}:${IMAGE_TAG}"
+
+ docker build \
+ --build-arg SERVICE=${{ matrix.service }} \
+ -t rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} \
+ -f ./apps/meteor/ee/server/services/Dockerfile \
+ .
+
+ release-versions:
+ runs-on: ubuntu-latest
+ outputs:
+ release: ${{ steps.by-tag.outputs.release }}
+ latest-release: ${{ steps.latest.outputs.latest-release }}
+ steps:
+ - id: by-tag
+ run: |
+ if echo "$GITHUB_REF_NAME" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' ; then
+ RELEASE="latest"
+ elif echo "$GITHUB_REF_NAME" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+$' ; then
+ RELEASE="release-candidate"
+ fi
+ echo "RELEASE: ${RELEASE}"
+ echo "::set-output name=release::${RELEASE}"
+
+ - id: latest
+ run: |
+ LATEST_RELEASE="$(
+ git -c 'versionsort.suffix=-' ls-remote -t --exit-code --refs --sort=-v:refname "https://github.com/$GITHUB_REPOSITORY" '*' |
+ sed -En '1!q;s/^[[:xdigit:]]+[[:space:]]+refs\/tags\/(.+)/\1/gp'
+ )"
+ echo "LATEST_RELEASE: ${LATEST_RELEASE}"
+ echo "::set-output name=latest-release::${LATEST_RELEASE}"
+
deploy:
runs-on: ubuntu-20.04
if: github.event_name == 'release' || github.ref == 'refs/heads/develop'
- needs: test
+ needs: [test, release-versions]
steps:
- uses: actions/checkout@v3
@@ -545,30 +670,31 @@ jobs:
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- AWS_DEFAULT_REGION: 'us-east-1'
+ AWS_DEFAULT_REGION: "us-east-1"
GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }}
REDHAT_REGISTRY_PID: ${{ secrets.REDHAT_REGISTRY_PID }}
REDHAT_REGISTRY_KEY: ${{ secrets.REDHAT_REGISTRY_KEY }}
UPDATE_TOKEN: ${{ secrets.UPDATE_TOKEN }}
run: |
+ REPO_VERSION=$(node -p "require('./package.json').version")
if [[ '${{ github.event_name }}' = 'release' ]]; then
GIT_TAG="${GITHUB_REF#*tags/}"
GIT_BRANCH=""
- ARTIFACT_NAME="$(npm run version --silent)"
+ ARTIFACT_NAME="${REPO_VERSION}"
RC_VERSION=$GIT_TAG
- if [[ $GIT_TAG =~ ^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+ ]]; then
+ if [[ '${{ needs.release-versions.outputs.release }}' = 'release-candidate' ]]; then
SNAP_CHANNEL=candidate
RC_RELEASE=candidate
- elif [[ $GIT_TAG =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ elif [[ '${{ needs.release-versions.outputs.release }}' = 'latest' ]]; then
SNAP_CHANNEL=stable
RC_RELEASE=stable
fi
else
GIT_TAG=""
GIT_BRANCH="${GITHUB_REF#*heads/}"
- ARTIFACT_NAME="$(npm run version --silent).$GITHUB_SHA"
- RC_VERSION="$(npm run version --silent)"
+ ARTIFACT_NAME="${REPO_VERSION}.$GITHUB_SHA"
+ RC_VERSION="${REPO_VERSION}"
SNAP_CHANNEL=edge
RC_RELEASE=develop
fi;
@@ -607,15 +733,15 @@ jobs:
image-build:
runs-on: ubuntu-20.04
- needs: deploy
+ needs: [deploy, release-versions]
strategy:
matrix:
# this is current a mix of variants and different images
- release: ['official', 'preview', 'alpine']
+ release: ["official", "preview", "alpine"]
env:
- IMAGE_NAME: 'rocketchat/rocket.chat'
+ IMAGE_NAME: "rocketchat/rocket.chat"
steps:
- uses: actions/checkout@v3
@@ -638,7 +764,7 @@ jobs:
tar xzf Rocket.Chat.tar.gz
rm Rocket.Chat.tar.gz
- DOCKER_PATH="${GITHUB_WORKSPACE}/.docker"
+ DOCKER_PATH="${GITHUB_WORKSPACE}/apps/meteor/.docker"
if [[ '${{ matrix.release }}' = 'preview' ]]; then
DOCKER_PATH="${DOCKER_PATH}-mongo"
fi;
@@ -670,11 +796,7 @@ jobs:
DOCKER_TAG="${DOCKER_TAG}-${{ matrix.release }}"
fi;
- if echo "$GITHUB_REF_NAME" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' ; then
- RELEASE="latest"
- elif echo "$GITHUB_REF_NAME" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+$' ; then
- RELEASE="release-candidate"
- fi
+ RELEASE="${{ needs.release-versions.outputs.release }}"
if [[ '${{ matrix.release }}' = 'alpine' ]]; then
RELEASE="${RELEASE}-${{ matrix.release }}"
@@ -689,12 +811,7 @@ jobs:
docker push $IMAGE_NAME:$DOCKER_TAG
if [[ $RELEASE == 'latest' ]]; then
- CURRENT_LATEST="$(
- git -c 'versionsort.suffix=-' ls-remote -t --exit-code --refs --sort=-v:refname "https://github.com/$GITHUB_REPOSITORY" '*' |
- sed -En '1!q;s/^[[:xdigit:]]+[[:space:]]+refs\/tags\/(.+)/\1/gp'
- )"
- echo "CURRENT_LATEST: $CURRENT_LATEST"
- if [[ $CURRENT_LATEST == $GITHUB_REF_NAME ]]; then
+ if [[ '${{ needs.release-versions.outputs.latest-release }}' == $GITHUB_REF_NAME ]]; then
docker tag $IMAGE_NAME:$DOCKER_TAG $IMAGE_NAME:$RELEASE
docker push $IMAGE_NAME:$RELEASE
fi
@@ -723,11 +840,12 @@ jobs:
services-image-build:
runs-on: ubuntu-20.04
- needs: deploy
+ needs: [deploy, release-versions]
strategy:
matrix:
- service: ['account', 'authorization', 'ddp-streamer', 'presence', 'stream-hub']
+ service:
+ ["account", "authorization", "ddp-streamer", "presence", "stream-hub"]
steps:
- uses: actions/checkout@v3
@@ -735,7 +853,7 @@ jobs:
- name: Use Node.js 14.18.3
uses: actions/setup-node@v3
with:
- node-version: '14.18.3'
+ node-version: "14.18.3"
- name: Login to DockerHub
uses: docker/login-action@v1
@@ -753,26 +871,29 @@ jobs:
fi
# first install repo dependencies
- npm i
-
- # then micro services dependencies
- cd ./ee/server/services
- npm i
- npm run build
+ yarn
+ yarn build:services
echo "Building Docker image for service: ${{ matrix.service }}:${IMAGE_TAG}"
- docker build --build-arg SERVICE=${{ matrix.service }} -t rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} .
+ docker build \
+ --build-arg SERVICE=${{ matrix.service }} \
+ -t rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} \
+ -f ./apps/meteor/ee/server/services/Dockerfile \
+ .
docker push rocketchat/${{ matrix.service }}-service:${IMAGE_TAG}
if [[ $GITHUB_REF == refs/tags/* ]]; then
- if echo "$IMAGE_TAG" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' ; then
- RELEASE="latest"
- elif echo "$IMAGE_TAG" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+$' ; then
- RELEASE="release-candidate"
+ RELEASE="${{ needs.release-versions.outputs.release }}"
+
+ if [[ $RELEASE == 'latest' ]]; then
+ if [[ '${{ needs.release-versions.outputs.latest-release }}' == $GITHUB_REF_NAME ]]; then
+ docker tag rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} rocketchat/${{ matrix.service }}-service:${RELEASE}
+ docker push rocketchat/${{ matrix.service }}-service:${RELEASE}
+ fi
+ else
+ docker tag rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} rocketchat/${{ matrix.service }}-service:${RELEASE}
+ docker push rocketchat/${{ matrix.service }}-service:${RELEASE}
fi
-
- docker tag rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} rocketchat/${{ matrix.service }}-service:${RELEASE}
- docker push rocketchat/${{ matrix.service }}-service:${RELEASE}
fi
diff --git a/.gitignore b/.gitignore
index 1443aac7da70..5c3677cd1c30 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,85 +1,42 @@
-**/bin/**
-**/build/*
-**/node_modules/*
-**/tmp/*
-**/.meteor/.id
-**/.meteor/dev_bundle
-**/.meteor/local*
-**/.meteor/meteorite
-/private/certs/*
-*.bak
-*.iml
-*.ipr
-*.iws
-*.launch
-*.log
-*.pydevproject
-*.sublime-project
-*.sublime-workspace
-*.swp
-*.tmp
-*.tokens
-*.un~
-*~
-*~.nib
-.*.sw[a-z]
-.\#*
-._*
-.buildpath
-.classpath
-.clover
-.cproject
-.DS_Store
-.elasticbeanstalk
-.elc
-.emacs.desktop
-.emacs.desktop.lock
-.env
-.externalToolBuilders
-.idea
-.vscode
-.loadpath
-.map
-.metadata
-packages/rocketchat-livechat/assets/rocketchat-livechat.min.js
-.mule
-.pmd
-.project
-.sass-cache
-.settings
-.Spotlight-V100
-tatus
-.Trashes
-.wtpmodules
-\#*\#
-Desktop.ini
-ehthumbs.db
-example.css
-jrat.output
-jrat.xml
-local.properties
-meteor-vulcanize
-nb-configuration.xml
-nbactions.xml
-nbproject
-profiles.xml
-Session.vim
-smart.lock
-temp_*
-Thumbs.db
-thumbs.db
-tramp
-ecosystem.json
-pm2.json
-settings.json
-build.sh
-/public/livechat
-packages/rocketchat-i18n/i18n/livechat.*
-tests/end-to-end/temporary_staged_test
-.screenshots
-/private/livechat
-/storybook-static
-/tests/cypress/screenshots
-/tests/cypress/videos
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+node_modules
+.pnp
+.pnp.js
+
+# testing
coverage
-.nyc_output
+
+# next.js
+.next/
+out/
+build
+dist
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# local env files
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+# turbo
+.turbo
+
+# yarn
+.pnp.*
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/sdks
+!.yarn/versions
diff --git a/.houston/metadata.js b/.houston/metadata.js
index 44ff8721f408..411cff5106c5 100644
--- a/.houston/metadata.js
+++ b/.houston/metadata.js
@@ -7,7 +7,7 @@ const getMongoVersion = async function({ version, git }) {
return [];
}
- return mongoMatch[1].replace(/"/g, '').replace(/ /g, '').split(',');
+ return mongoMatch[1].replace(/["' ]/g, '').split(',');
} catch (e) {
console.error(e);
}
@@ -16,7 +16,7 @@ const getMongoVersion = async function({ version, git }) {
const getNodeNpmVersions = async function({ version, git, request }) {
try {
- const meteorRelease = await git.show([`${ version }:.meteor/release`]);
+ const meteorRelease = await git.show([`${ version }:apps/meteor/.meteor/release`]);
if (!/^METEOR@(\d+\.){1,2}\d/.test(meteorRelease)) {
return {};
}
@@ -38,7 +38,7 @@ const getNodeNpmVersions = async function({ version, git, request }) {
const getAppsEngineVersion = async function({ version, git }) {
try {
- const packageJson = await git.show([`${ version }:package-lock.json`]);
+ const packageJson = await git.show([`${ version }:apps/meteor/package-lock.json`]);
const { dependencies } = JSON.parse(packageJson);
const { version: appsEngineVersion } = dependencies['@rocket.chat/apps-engine'];
diff --git a/.husky/pre-push b/.husky/pre-push
index 3c9fedc8460a..040c79f08833 100755
--- a/.husky/pre-push
+++ b/.husky/pre-push
@@ -1,3 +1,2 @@
-meteor npm run lint && \
-meteor npm run testunit && \
-meteor npm run testunit-client
+yarn lint && \
+yarn testunit
diff --git a/.mocharc.js b/.mocharc.js
deleted file mode 100644
index 6d7f3c02aa42..000000000000
--- a/.mocharc.js
+++ /dev/null
@@ -1,27 +0,0 @@
-'use strict';
-
-/**
- * Mocha configuration for general unit tests.
- */
-
-const base = require('./.mocharc.base.json');
-
-/**
- * Mocha will run `ts-node` without doing type checking to speed-up the tests. It should be fine as `npm run typecheck`
- * covers test files too.
- */
-
-Object.assign(
- process.env,
- {
- TS_NODE_FILES: true,
- TS_NODE_TRANSPILE_ONLY: true,
- },
- process.env,
-);
-
-module.exports = {
- ...base, // see https://github.com/mochajs/mocha/issues/3916
- exit: true,
- spec: ['app/**/*.spec.ts', 'app/**/*.tests.js', 'app/**/*.tests.ts', 'server/**/*.tests.ts', 'ee/**/*.tests.ts'],
-};
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 000000000000..c42da845b449
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1 @@
+engine-strict = true
diff --git a/.storybook/.prettierrc b/.storybook/.prettierrc
deleted file mode 120000
index 4031483e531f..000000000000
--- a/.storybook/.prettierrc
+++ /dev/null
@@ -1 +0,0 @@
-../client/.prettierrc
\ No newline at end of file
diff --git a/.storybook/decorators.tsx b/.storybook/decorators.tsx
deleted file mode 100644
index 9314684c128f..000000000000
--- a/.storybook/decorators.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import React, { ReactElement } from 'react';
-
-import { MeteorProviderMock } from './mocks/providers';
-import QueryClientProviderMock from './mocks/providers/QueryClientProviderMock';
-import ServerProviderMock from './mocks/providers/ServerProviderMock';
-
-export const rocketChatDecorator = (storyFn: () => ReactElement): ReactElement => {
- const linkElement = document.getElementById('theme-styles') || document.createElement('link');
- if (linkElement.id !== 'theme-styles') {
- require('../app/theme/client/main.css');
- require('../app/theme/client/vendor/fontello/css/fontello.css');
- require('../app/theme/client/rocketchat.font.css');
- linkElement.setAttribute('id', 'theme-styles');
- linkElement.setAttribute('rel', 'stylesheet');
- linkElement.setAttribute('href', 'https://open.rocket.chat/theme.css');
- document.head.appendChild(linkElement);
- }
-
- /* eslint-disable @typescript-eslint/no-var-requires */
- /* eslint-disable-next-line */
- const { default: icons } = require('!!raw-loader!../private/public/icons.svg');
-
- return (
-
0&&x(De)?v>1?qi(De,v-1,x,P,W):Dn(W,De):P||(W[W.length]=De)}return W}var g=gc(),y=gc(!0);function R(p,v){return p&&g(p,v,No)}function F(p,v){return p&&y(p,v,No)}function b(p,v){return It(v,function(x){return Ra(p[x])})}function J(p,v){v=Vs(v,p);for(var x=0,P=v.length;p!=null&&x
v}function Lt(p,v){return p!=null&&li.call(p,v)}function xr(p,v){return p!=null&&v in xn(p)}function io(p,v,x){return p>=Kn(v,x)&&p 1),ee}),ko(p,sr(p),x),P&&(x=zo(x,T|B|H,cm));for(var W=v.length;W--;)A2(x,v[W]);return x});function A1(p,v){return tf(p,Od(Vn(v)))}var Ap=cl(function(p,v){return p==null?{}:vh(p,v)});function tf(p,v){if(p==null)return{};var x=Ft(sr(p),function(P){return[P]});return v=Vn(v),mh(p,x,function(P,W){return v(P,W[0])})}function Hm(p,v,x){v=Vs(v,p);var P=-1,W=v.length;for(W||(W=1,p=i);++P 0||v<0)?new at(x):(p<0?x=x.takeRight(-p):p&&(x=x.drop(p)),v!==i&&(v=Mr(v),x=v<0?x.dropRight(-v):x.take(v-p)),x)},at.prototype.takeRightWhile=function(p){return this.reverse().takeWhile(p).reverse()},at.prototype.toArray=function(){return this.take(fe)},R(at.prototype,function(p,v){var x=/^(?:filter|find|map|reject)|While$/.test(v),P=/^(?:head|last)$/.test(v),W=Y[P?"take"+(v=="last"?"Right":""):v],ee=P||/^find/.test(v);!W||(Y.prototype[v]=function(){var he=this.__wrapped__,De=P?[1]:arguments,be=he instanceof at,Et=De[0],St=be||tr(he),At=function(ui){var di=W.apply(Y,Dn([ui],De));return P&&on?di[0]:di};St&&x&&typeof Et=="function"&&Et.length!=1&&(be=St=!1);var on=this.__chain__,kn=!!this.__actions__.length,rr=ee&&!on,br=be&&!kn;if(!ee&&St){he=br?he:new at(this);var ar=p.apply(he,De);return ar.__actions__.push({func:g1,args:[At],thisArg:i}),new Vr(ar,on)}return rr&&br?p.apply(this,De):(ar=this.thru(At),rr?P?ar.value()[0]:ar.value():ar)})}),it(["pop","push","shift","sort","splice","unshift"],function(p){var v=Jr[p],x=/^(?:push|sort|unshift)$/.test(p)?"tap":"thru",P=/^(?:pop|shift)$/.test(p);Y.prototype[p]=function(){var W=arguments;if(P&&!this.__chain__){var ee=this.value();return v.apply(tr(ee)?ee:[],W)}return this[x](function(he){return v.apply(tr(he)?he:[],W)})}}),R(at.prototype,function(p,v){var x=Y[v];if(x){var P=x.name+"";li.call(On,P)||(On[P]=[]),On[P].push({name:v,func:x})}}),On[ga(i,pe).name]=[{name:"wrapper",func:i}],at.prototype.clone=Di,at.prototype.reverse=ru,at.prototype.value=wo,Y.prototype.at=$2,Y.prototype.chain=qh,Y.prototype.commit=ep,Y.prototype.next=Wh,Y.prototype.plant=Em,Y.prototype.reverse=If,Y.prototype.toJSON=Y.prototype.valueOf=Y.prototype.value=bf,Y.prototype.first=Y.prototype.head,Pu&&(Y.prototype[Pu]=_m),Y},n0=t0();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(ji._=n0,define(function(){return n0})):z?((z.exports=n0)._=n0,U._=n0):ji._=n0}).call(Wv)});var yD=Ke((wW,mD)=>{"use strict";var Pi=mD.exports;mD.exports.default=Pi;var Du="[",jy="]",Vv="\x07",P_=";",LS=process.env.TERM_PROGRAM==="Apple_Terminal";Pi.cursorTo=(i,o)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");return typeof o!="number"?Du+(i+1)+"G":Du+(o+1)+";"+(i+1)+"H"};Pi.cursorMove=(i,o)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");let a="";return i<0?a+=Du+-i+"D":i>0&&(a+=Du+i+"C"),o<0?a+=Du+-o+"A":o>0&&(a+=Du+o+"B"),a};Pi.cursorUp=(i=1)=>Du+i+"A";Pi.cursorDown=(i=1)=>Du+i+"B";Pi.cursorForward=(i=1)=>Du+i+"C";Pi.cursorBackward=(i=1)=>Du+i+"D";Pi.cursorLeft=Du+"G";Pi.cursorSavePosition=LS?"7":Du+"s";Pi.cursorRestorePosition=LS?"8":Du+"u";Pi.cursorGetPosition=Du+"6n";Pi.cursorNextLine=Du+"E";Pi.cursorPrevLine=Du+"F";Pi.cursorHide=Du+"?25l";Pi.cursorShow=Du+"?25h";Pi.eraseLines=i=>{let o="";for(let a=0;a[jy,"8",P_,P_,o,Vv,i,jy,"8",P_,P_,Vv].join("");Pi.image=(i,o={})=>{let a=`${jy}1337;File=inline=1`;return o.width&&(a+=`;width=${o.width}`),o.height&&(a+=`;height=${o.height}`),o.preserveAspectRatio===!1&&(a+=";preserveAspectRatio=0"),a+":"+i.toString("base64")+Vv};Pi.iTerm={setCwd:(i=process.cwd())=>`${jy}50;CurrentDir=${i}${Vv}`,annotation:(i,o={})=>{let a=`${jy}1337;`,c=typeof o.x!="undefined",_=typeof o.y!="undefined";if((c||_)&&!(c&&_&&typeof o.length!="undefined"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return i=i.replace(/\|/g,""),a+=o.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",o.length>0?a+=(c?[i,o.length,o.x,o.y]:[o.length,i]).join("|"):a+=i,a+Vv}}});var PS=Ke((SW,gD)=>{"use strict";var NS=(i,o)=>{for(let a of Reflect.ownKeys(o))Object.defineProperty(i,a,Object.getOwnPropertyDescriptor(o,a));return i};gD.exports=NS;gD.exports.default=NS});var bS=Ke((TW,I_)=>{"use strict";var AI=PS(),b_=new WeakMap,IS=(i,o={})=>{if(typeof i!="function")throw new TypeError("Expected a function");let a,c=0,_=i.displayName||i.name||"=0){var E=c1()-d1;f.actualDuration+=E,d&&(f.selfBaseDuration=E),d1=-1}}var bl=null,$a=null,wa=!1;function V2(){wa&&Qt(!1,"We should not be hydrating here. This is a bug in React. Please file a bug.")}function G2(f){if(!Se)return!1;var d=f.stateNode.containerInfo;return $a=U(d),bl=f,wa=!0,!0}function hm(f,d){return Se?($a=ji(d),X2(f),wa=!0,!0):!1}function Y2(f,d){switch(f.tag){case B:oe(f.stateNode.containerInfo,d);break;case q:We(f.type,f.memoizedProps,f.stateNode,d);break}var E=rE();E.stateNode=d,E.return=f,E.effectTag=Ko,f.lastEffect!==null?(f.lastEffect.nextEffect=E,f.lastEffect=E):f.firstEffect=f.lastEffect=E}function Fh(f,d){switch(d.effectTag=d.effectTag&~au|mi,f.tag){case B:{var E=f.stateNode.containerInfo;switch(d.tag){case q:var C=d.type,A=d.pendingProps;it(E,C,A);break;case ne:var j=d.pendingProps;Ct(E,j);break;case ce:Mt(E);break}break}case q:{var V=f.type,te=f.memoizedProps,se=f.stateNode;switch(d.tag){case q:var Ue=d.type,Qe=d.pendingProps;It(V,te,se,Ue,Qe);break;case ne:var vt=d.pendingProps;sn(V,te,se,vt);break;case ce:rn(V,te,se);break}break}default:return}}function Ph(f,d){switch(f.tag){case q:{var E=f.type,C=f.pendingProps,A=hf(d,E,C);return A!==null?(f.stateNode=A,!0):!1}case ne:{var j=f.pendingProps,V=Bs(d,j);return V!==null?(f.stateNode=V,!0):!1}case ce:{if(Ai){var te=Ba(d);if(te!==null){var se={dehydrated:te,retryTime:Di};f.memoizedState=se;var Ue=iE(te);return Ue.return=f,f.child=Ue,!0}}return!1}default:return!1}}function K2(f){if(!!wa){var d=$a;if(!d){Fh(bl,f),wa=!1,bl=f;return}var E=d;if(!Ph(f,d)){if(d=ji(E),!d||!Ph(f,d)){Fh(bl,f),wa=!1,bl=f;return}Y2(bl,E)}bl=f,$a=U(d)}}function vm(f,d,E){if(!Se)throw Error("Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var C=f.stateNode,A=z(C,f.type,f.memoizedProps,d,E,f);return f.updateQueue=A,A!==null}function mm(f){if(!Se)throw Error("Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var d=f.stateNode,E=f.memoizedProps,C=G(d,E,f);if(C){var A=bl;if(A!==null)switch(A.tag){case B:{var j=A.stateNode.containerInfo;Je(j,d,E);break}case q:{var V=A.type,te=A.memoizedProps,se=A.stateNode;mt(V,te,se,d,E);break}}}return C}function Ih(f){if(!Se)throw Error("Expected prepareToHydrateHostSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var d=f.memoizedState,E=d!==null?d.dehydrated:null;if(!E)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");$(E,f)}function ym(f){if(!Se)throw Error("Expected skipPastDehydratedSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var d=f.memoizedState,E=d!==null?d.dehydrated:null;if(!E)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");return Ce(E)}function X2(f){for(var d=f.return;d!==null&&d.tag!==q&&d.tag!==B&&d.tag!==ce;)d=d.return;bl=d}function h1(f){if(!Se||f!==bl)return!1;if(!wa)return X2(f),wa=!0,!1;var d=f.type;if(f.tag!==q||d!=="head"&&d!=="body"&&!Li(d,f.memoizedProps))for(var E=$a;E;)Y2(f,E),E=ji(E);return X2(f),f.tag===ce?$a=ym(f):$a=bl?ji(f.stateNode):null,!0}function v1(){!Se||(bl=null,$a=null,wa=!1)}var m1=nt.ReactCurrentOwner,Sa=!1,Q2,Ks,Xs,Qs,J2,Ta,y1,Td,Tc,Z2;Q2={},Ks={},Xs={},Qs={},J2={},Ta=!1,y1=!1,Td={},Tc={},Z2={};function w0(f,d,E,C){f===null?d.child=$c(d,null,E,C):d.child=Cf(d,f.child,E,C)}function bh(f,d,E,C){d.child=Cf(d,f.child,null,C),d.child=Cf(d,null,E,C)}function Bh(f,d,E,C,A){if(d.type!==d.elementType){var j=E.propTypes;j&&_(j,C,"prop",Wt(E),Nr)}var V=E.render,te=d.ref,se;return uo(d,A),m1.current=d,et("render"),se=Ff(f,d,V,C,te,A),Ri&&d.mode&mr&&d.memoizedState!==null&&(se=Ff(f,d,V,C,te,A)),et(null),f!==null&&!Sa?(_d(f,d,A),Ca(f,d,A)):(d.effectTag|=su,w0(f,d,se,A),d.child)}function Uh(f,d,E,C,A,j){if(f===null){var V=E.type;if(ao(V)&&E.compare===null&&E.defaultProps===void 0){var te=V;return te=ro(V),d.tag=re,d.type=te,tp(d,V),jh(f,d,te,C,A,j)}{var se=V.propTypes;se&&_(se,C,"prop",Wt(V),Nr)}var Ue=yy(E.type,null,C,null,d.mode,j);return Ue.ref=d.ref,Ue.return=d,d.child=Ue,Ue}{var Qe=E.type,vt=Qe.propTypes;vt&&_(vt,C,"prop",Wt(Qe),Nr)}var Nt=f.child;if(A ru&&(Ul=f),d!==null&&f
>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?I>>>0>>1>>>0?S>>>0>>1>>>0?S>>>0