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..a26eb71ab14f
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,5 @@
+/packages/* @RocketChat/chat-engine
+/packages/core-typings/ @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 c0f984014ea3..57a3e4f48887 100644
--- a/.github/history.json
+++ b/.github/history.json
@@ -69992,6 +69992,3250 @@
"5.0"
],
"pull_requests": []
+ },
+ "4.5.0-rc.0": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0-alpha.5979",
+ "mongo_versions": [
+ "'3.6'",
+ "'4.0'",
+ "'4.2'",
+ "'4.4'",
+ "'5.0'"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24573",
+ "title": "Chore: Bump Fuselage packages",
+ "userLogin": "tassoevan",
+ "description": "It uses the last stable version of Fuselage packages.",
+ "contributors": [
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24558",
+ "title": "i18n: Language update from LingoHub 🤖 on 2022-02-21Z",
+ "userLogin": "lingohub[bot]",
+ "contributors": [
+ null,
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24572",
+ "title": "[FIX] 2FA via email when logging in using OAuth",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24568",
+ "title": "Chore: Update Apps-Engine",
+ "userLogin": "d-gubert",
+ "milestone": "4.5.0",
+ "contributors": [
+ "d-gubert",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24536",
+ "title": "Chore: roomTypes: Stop mixing client and server code together",
+ "userLogin": "pierre-lehnen-rc",
+ "milestone": "4.5.0",
+ "contributors": [
+ "pierre-lehnen-rc",
+ "tassoevan",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24529",
+ "title": "[IMPROVE] Replace AutoComplete in UserAutoComplete & UserAutoCompleteMultiple components",
+ "userLogin": "juliajforesti",
+ "description": "This PR replaces a deprecated fuselage's component `AutoComplete` in favor of `Select` and `MultiSelect` which fixes some of UX/UI issues in selecting users\r\n\r\n### before\r\n![Screen Shot 2022-02-19 at 13 33 28](https://user-images.githubusercontent.com/27704687/154809737-8181a06c-4f20-48ea-90f7-01e828b9a452.png)\r\n\r\n### after\r\n![Screen Shot 2022-02-19 at 13 30 58](https://user-images.githubusercontent.com/27704687/154809653-a8ec9a80-c0dd-4a25-9c00-0f96147d79e9.png)",
+ "contributors": [
+ "juliajforesti",
+ "dougfabris",
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24513",
+ "title": "Chore: Run tests using microservices deployment on CI",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow",
+ "rodrigok"
+ ]
+ },
+ {
+ "pr": "24556",
+ "title": "Bump @types/ws from 8.2.2 to 8.2.3 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24501",
+ "title": "Chore: Update fuselage deps to match monolith versions",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24538",
+ "title": "Bump adm-zip from 0.4.14 to 0.5.9",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24454",
+ "title": "[IMPROVE] Purchase Type Filter for marketplace apps and Categories filter anchor refactoring",
+ "userLogin": "rique223",
+ "description": "Implemented a filter by purchase type(free or paid) component for the apps screen of the marketplace. Besides that, new entries on the dictionary, fixed some parts of the App type (purchaseType was typed as unknown and price as string), and created some helpers to work alongside the filter. Will be refactoring the categories filter anchor and then will open this PR for reviews.\r\n\r\nDemo gif:\r\n![purchaseTypeFIlter](https://user-images.githubusercontent.com/43561537/153101228-7b7ebdc3-2d34-420f-aa9d-f7cbc8d4b53f.gif)\r\n\r\nRefactored the categories filter anchor from a plain fuselage select to a select button with dynamic colors.\r\nDemo gif:\r\n![New categories filter anchor(PR)](https://user-images.githubusercontent.com/43561537/153422427-28012b7d-e0ec-45f4-861d-c9368c57ad04.gif)",
+ "contributors": [
+ "rique223",
+ "dougfabris",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24475",
+ "title": "[IMPROVE] Skip encryption for slash commands in E2E rooms",
+ "userLogin": "yash-rajpal",
+ "description": "Currently Slash Commands don't work in an E2EE room, as we encrypt the message before slash command is detected by the server, So removed encryption for slash commands in e2e rooms.",
+ "contributors": [
+ "yash-rajpal",
+ "albuquerquefabio",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24304",
+ "title": "Chore: Js to ts slash commands archive",
+ "userLogin": "eduardofcabrera",
+ "description": "Convert Slash Commands archive files to typescript",
+ "contributors": [
+ "eduardofcabrera",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24114",
+ "title": "[NEW] E2E password generator",
+ "userLogin": "ostjen",
+ "contributors": [
+ "ostjen",
+ "web-flow",
+ "eduardofcabrera",
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24553",
+ "title": "[FIX] Omnichannel managers can't join chats in progress",
+ "userLogin": "renatobecker",
+ "milestone": "4.5.0",
+ "contributors": [
+ "renatobecker",
+ "murtaza98",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24559",
+ "title": "[FIX] Room context tabs not working in Omnichannel current chats page",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.0",
+ "contributors": [
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24173",
+ "title": "[FIX] respect `Accounts_Registration_Users_Default_Roles` setting",
+ "userLogin": "debdutdeb",
+ "description": "- Fix `user` role being added as default regardless of the `Accounts_Registration_Users_Default_Roles` setting.",
+ "milestone": "4.5.0",
+ "contributors": [
+ "debdutdeb",
+ "web-flow",
+ "matheusbsilva137"
+ ]
+ },
+ {
+ "pr": "24485",
+ "title": "[FIX] Skip admin info in setup wizard for servers with admin registered",
+ "userLogin": "dougfabris",
+ "contributors": [
+ "dougfabris",
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24537",
+ "title": "Bump pm2 from 5.1.2 to 5.2.0 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24209",
+ "title": "[IMPROVE] Team system messages feedback",
+ "userLogin": "ostjen",
+ "description": "- Delete some keys that aren't being used (eg: User_left_female).\r\n- Add new Teams' system messages:\r\n - `added-user-to-team`: **added** @\\user to this Team;\r\n - `removed-user-from-team`: **removed** @\\user from this Team;\r\n - `user-converted-to-team`: **converted** #\\room to a Team;\r\n - `user-converted-to-channel`: **converted** #\\room to a Channel;\r\n - `user-removed-room-from-team`: **removed** @\\user from this Team;\r\n - `user-deleted-room-from-team`: **deleted** #\\room from this Team;\r\n - `user-added-room-to-team`: **deleted** #\\room to this Team;\r\n- Add the corresponding options to hide each new system message and the missing `ujt` and `ult` hide options.",
+ "milestone": "4.5.0",
+ "contributors": [
+ "ostjen",
+ "tassoevan",
+ "web-flow",
+ "dougfabris",
+ "matheusbsilva137"
+ ]
+ },
+ {
+ "pr": "24467",
+ "title": "Chore: Improve PR title validation regex",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow",
+ "debdutdeb"
+ ]
+ },
+ {
+ "pr": "24058",
+ "title": "Bump date-fns from 2.24.0 to 2.28.0",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24508",
+ "title": "[FIX] Read receipts showing first messages of the room as read even if not read by everyone",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow",
+ "dougfabris"
+ ]
+ },
+ {
+ "pr": "24530",
+ "title": "Chore: Remove storybook build job from CI",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24528",
+ "title": "Bump url-parse from 1.5.3 to 1.5.7",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24333",
+ "title": "Chore: Add description to global OTR setting",
+ "userLogin": "pedrogssouza",
+ "contributors": [
+ "pedrogssouza",
+ "yash-rajpal",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24382",
+ "title": "[IMPROVE] OTR system messages",
+ "userLogin": "yash-rajpal",
+ "description": "OTR system messages to indicate key refresh and joining chat to users.",
+ "contributors": [
+ "yash-rajpal",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24121",
+ "title": "[IMPROVE] Descriptive tooltip for Encrypted Key on Room Header",
+ "userLogin": "yash-rajpal",
+ "milestone": "4.5.0",
+ "contributors": [
+ "yash-rajpal",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24522",
+ "title": "Bump express from 4.17.2 to 4.17.3 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24518",
+ "title": "Chore: `twoFactorRequired` signature",
+ "userLogin": "tassoevan",
+ "description": "Improved type checking for decorator `twoFactorRequired`.",
+ "contributors": [
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24517",
+ "title": "Bump body-parser from 1.19.1 to 1.19.2 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24441",
+ "title": "[FIX] GDPR action to forget visitor data on request",
+ "userLogin": "KevLehman",
+ "contributors": [
+ "KevLehman",
+ "murtaza98",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24306",
+ "title": "Chore: Convert to typescript the slash commands create files",
+ "userLogin": "eduardofcabrera",
+ "description": "Convert Slash Commands create files to typescript.",
+ "contributors": [
+ "eduardofcabrera",
+ "ostjen",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24325",
+ "title": "Chore: Convert to typescript the mute and unmute slash commands files",
+ "userLogin": "eduardofcabrera",
+ "description": "Convert to typescript the mute and unmute slash commands files",
+ "contributors": [
+ "eduardofcabrera",
+ "ostjen",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24321",
+ "title": "Chore: Convert to typescript the me slashCommands files",
+ "userLogin": "eduardofcabrera",
+ "description": "Convert to typescript the me slashCommands files",
+ "contributors": [
+ "eduardofcabrera",
+ "ostjen",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "23512",
+ "title": "Bump sodium-native from 3.2.1 to 3.3.0 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24311",
+ "title": "Chore: Convert to typescript the slash commands invite files",
+ "userLogin": "eduardofcabrera",
+ "description": "Convert to typescript the slash commands invite files",
+ "contributors": [
+ "eduardofcabrera",
+ "ostjen",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24509",
+ "title": "Bump vm2 from 3.9.5 to 3.9.7 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24451",
+ "title": "[IMPROVE] ChatBox Text to File Description",
+ "userLogin": "eduardofcabrera",
+ "description": "The text content from chatbox goes to the file description when drag and drop a file.",
+ "contributors": [
+ "eduardofcabrera",
+ "ostjen",
+ "web-flow",
+ "dougfabris"
+ ]
+ },
+ {
+ "pr": "24461",
+ "title": "Chore: Update Meteor to 2.5.6",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego",
+ "rodrigok",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24477",
+ "title": "Chore: Update ws package",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24498",
+ "title": "Bump underscore.string from 3.3.5 to 3.3.6 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24491",
+ "title": "Bump follow-redirects from 1.14.7 to 1.14.8 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24493",
+ "title": "i18n: Language update from LingoHub 🤖 on 2022-02-14Z",
+ "userLogin": "lingohub[bot]",
+ "contributors": [
+ null
+ ]
+ },
+ {
+ "pr": "24331",
+ "title": "Chore: Convert to typescript the unarchive slash commands files",
+ "userLogin": "eduardofcabrera",
+ "description": "Convert to typescript the unarchive slash commands files",
+ "contributors": [
+ "eduardofcabrera",
+ "ostjen",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24483",
+ "title": "[IMPROVE] Add tooltips on action buttons of Canned Response message composer",
+ "userLogin": "LucasFASouza",
+ "description": "The tooltips were missing on the action buttons of CR message composer.\r\n\r\n![image](https://user-images.githubusercontent.com/32396925/153620327-91107245-4b47-4d39-a99a-6da6d1cf5734.png)\r\n\r\nUsers can now feel more encouraged to use these actions knowing what they are supposed to do.",
+ "contributors": [
+ "LucasFASouza",
+ "tiagoevanp",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24196",
+ "title": "Chore: Delete unused file (NewAdminInfoPage.js)",
+ "userLogin": "gabriellsh",
+ "description": "Just removing a duplicated/unused file.",
+ "milestone": "4.5.0",
+ "contributors": [
+ "gabriellsh",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24388",
+ "title": "[IMPROVE][ENTERPRISE] Improve how micro services are loaded",
+ "userLogin": "ggazzo",
+ "contributors": [
+ "ggazzo",
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24458",
+ "title": "[IMPROVE] Add return button in chats opened from the list of current chats",
+ "userLogin": "LucasFASouza",
+ "description": "The new return button for Omnichannel chats came out with release 3.15 but the feature was only available for chats that were opened from Omnichannel Contact Center.\r\nNow, the same UI/UX is supported for chats opened from Current Chats list.\r\n\r\n![image](https://user-images.githubusercontent.com/32396925/153283190-bd5c9748-c36b-4874-a704-6043afc7e3a1.png)\r\n\r\nThe chat now opens in the Omnichannel settings and has the return button so the user can go back to the Current Chats list.\r\n\r\n![image](https://user-images.githubusercontent.com/32396925/153285591-fad8e4a0-d2ea-4a02-8b2a-15e383b3c876.png)",
+ "contributors": [
+ "LucasFASouza",
+ "tiagoevanp",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24469",
+ "title": "Bump express from 4.17.1 to 4.17.2 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24472",
+ "title": "Bump cookie from 0.4.1 to 0.4.2 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24275",
+ "title": "[IMPROVE] Close modal on esc and outside click",
+ "userLogin": "gabriellsh",
+ "description": "This is a QUICK change in order to close modals pressing Esc button and clicking outside of it **intentionally**.",
+ "milestone": "4.5.0",
+ "contributors": [
+ "gabriellsh",
+ "dougfabris",
+ "tassoevan"
+ ]
+ },
+ {
+ "pr": "24435",
+ "title": "Chore(deps-dev): Bump ts-node from 10.0.0 to 10.5.0 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24041",
+ "title": "[IMPROVE] Add user to room on \"Click to Join!\" button press",
+ "userLogin": "matheusbsilva137",
+ "description": "- Add user to room on \"Click to Join!\" button press;\r\n- Display the \"Join\" button in discussions inside channels (keeping the behavior consistent with discussions inside groups).",
+ "contributors": [
+ "matheusbsilva137",
+ "web-flow",
+ "tassoevan",
+ "pierre-lehnen-rc",
+ "ostjen"
+ ]
+ },
+ {
+ "pr": "24310",
+ "title": "[FIX] Implement client errors on ddp-streamer",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "23963",
+ "title": "Bump body-parser from 1.19.0 to 1.19.1 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "23961",
+ "title": "Bump jaeger-client from 3.18.1 to 3.19.0 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24466",
+ "title": "[FIX] typo on register server tooltip of setup wizard",
+ "userLogin": "filipemarins",
+ "milestone": "4.5.0",
+ "contributors": [
+ "filipemarins"
+ ]
+ },
+ {
+ "pr": "24037",
+ "title": "[FIX] Inconsistent validation of user's access to rooms",
+ "userLogin": "pierre-lehnen-rc",
+ "contributors": [
+ "pierre-lehnen-rc",
+ "ostjen",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24450",
+ "title": "[FIX] OAuth mismatch redirect_uri error",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.4.2",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24305",
+ "title": "[FIX] Prevent Apps Bridge to remove visitor status from room",
+ "userLogin": "KevLehman",
+ "contributors": [
+ "KevLehman",
+ "d-gubert"
+ ]
+ },
+ {
+ "pr": "24453",
+ "title": "Chore: bump fuselage version",
+ "userLogin": "dougfabris",
+ "milestone": "4.4.2",
+ "contributors": [
+ "dougfabris"
+ ]
+ },
+ {
+ "pr": "24253",
+ "title": "[FIX] Issues on selecting users when importing CSV",
+ "userLogin": "guijun13",
+ "description": "* Fix users selecting by fixing their _id\r\n* Add condition to disable 'Start importing' button if `usersCount`, `channelsCount` and `messageCount` equals 0, or if messageCount is alone\r\n* Remove `disabled={usersCount === 0}` on user Tab",
+ "contributors": [
+ "guijun13",
+ "tassoevan",
+ "web-flow",
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24299",
+ "title": "Chore(deps): Bump node-fetch from 2.6.1 to 2.6.7 in /ee/server/services",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24418",
+ "title": "[FIX] Oembed request not respecting payload limit",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.4.1",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24429",
+ "title": "i18n: Language update from LingoHub 🤖 on 2022-02-07Z",
+ "userLogin": "lingohub[bot]",
+ "contributors": [
+ null,
+ "sampaiodiego",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24407",
+ "title": "[FIX] Skip cloud steps for registered servers on setup wizard",
+ "userLogin": "dougfabris",
+ "milestone": "4.4.1",
+ "contributors": [
+ "dougfabris",
+ "tassoevan",
+ "gabriellsh",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24410",
+ "title": "Chore: Convert JS files to Typescript",
+ "userLogin": "felipe-rod123",
+ "description": "This pull request converts 26 more files from Javascript to Typescript, to check variable types and increase validation on the code.",
+ "contributors": [
+ "felipe-rod123",
+ "ggazzo",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24369",
+ "title": "[IMPROVE] Convert tag edit with department data to tsx",
+ "userLogin": "LucasFASouza",
+ "contributors": [
+ "LucasFASouza",
+ "tiagoevanp",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24401",
+ "title": "[FIX] Outgoing webhook without scripts not saving messages",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.4.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24334",
+ "title": "[IMPROVE] CloudLoginModal visual consistency",
+ "userLogin": "dougfabris",
+ "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/151585064-dc6a1e29-9903-4241-8fbd-dfbe6c55fbef.png)\r\n\r\n### after\r\n![Screen Shot 2022-01-28 at 13 32 02](https://user-images.githubusercontent.com/27704687/151585101-75b98502-9aae-4198-bc3e-4956750e5d8b.png)",
+ "milestone": "4.5.0",
+ "contributors": [
+ "dougfabris",
+ "gabriellsh",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24409",
+ "title": "[FIX] Startup errors creating indexes",
+ "userLogin": "sampaiodiego",
+ "description": "Fix `bio` and `prid` startup index creation errors.",
+ "milestone": "4.4.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24406",
+ "title": "Chore: Unify ILivechatAgent with ILivechatAgentRecord",
+ "userLogin": "KevLehman",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24381",
+ "title": "[FIX] Add ?close to OAuth callback url",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.4.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24387",
+ "title": "[FIX] Slash commands previews not working",
+ "userLogin": "ostjen",
+ "milestone": "4.4.1",
+ "contributors": [
+ "ostjen"
+ ]
+ },
+ {
+ "pr": "24357",
+ "title": "i18n: Language update from LingoHub 🤖 on 2022-01-31Z",
+ "userLogin": "lingohub[bot]",
+ "contributors": [
+ null
+ ]
+ },
+ {
+ "pr": "24341",
+ "title": "Bump simple-get from 4.0.0 to 4.0.1",
+ "userLogin": "dependabot[bot]",
+ "contributors": [
+ "dependabot[bot]",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24366",
+ "title": "Chore: Set Docker image tag to latest only when really latest",
+ "userLogin": "debdutdeb",
+ "contributors": [
+ "debdutdeb",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24109",
+ "title": "[IMPROVE] Added a new \"All\" tab which shows all integrations in Integrations",
+ "userLogin": "aswinidev",
+ "milestone": "4.5.0",
+ "contributors": [
+ "aswinidev",
+ "dougfabris",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24363",
+ "title": "Merge master into develop & Set version to 4.5.0-develop",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow"
+ ]
+ }
+ ]
+ },
+ "4.4.1": {
+ "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": "24432",
+ "title": "Release 4.4.1",
+ "userLogin": "pierre-lehnen-rc",
+ "contributors": [
+ "sampaiodiego",
+ "pierre-lehnen-rc",
+ "dougfabris",
+ "ostjen"
+ ]
+ },
+ {
+ "pr": "24387",
+ "title": "[FIX] Slash commands previews not working",
+ "userLogin": "ostjen",
+ "milestone": "4.4.1",
+ "contributors": [
+ "ostjen"
+ ]
+ },
+ {
+ "pr": "24381",
+ "title": "[FIX] Add ?close to OAuth callback url",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.4.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24409",
+ "title": "[FIX] Startup errors creating indexes",
+ "userLogin": "sampaiodiego",
+ "description": "Fix `bio` and `prid` startup index creation errors.",
+ "milestone": "4.4.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24401",
+ "title": "[FIX] Outgoing webhook without scripts not saving messages",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.4.1",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24407",
+ "title": "[FIX] Skip cloud steps for registered servers on setup wizard",
+ "userLogin": "dougfabris",
+ "milestone": "4.4.1",
+ "contributors": [
+ "dougfabris",
+ "tassoevan",
+ "gabriellsh",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24418",
+ "title": "[FIX] Oembed request not respecting payload limit",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.4.1",
+ "contributors": [
+ "sampaiodiego",
+ "web-flow"
+ ]
+ }
+ ]
+ },
+ "4.4.2": {
+ "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": "24459",
+ "title": "Release 4.4.2",
+ "userLogin": "pierre-lehnen-rc",
+ "contributors": [
+ "dougfabris",
+ "pierre-lehnen-rc",
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24450",
+ "title": "[FIX] OAuth mismatch redirect_uri error",
+ "userLogin": "sampaiodiego",
+ "milestone": "4.4.2",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24453",
+ "title": "Chore: bump fuselage version",
+ "userLogin": "dougfabris",
+ "milestone": "4.4.2",
+ "contributors": [
+ "dougfabris"
+ ]
+ }
+ ]
+ },
+ "4.5.0-rc.1": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0-alpha.5979",
+ "mongo_versions": [
+ "'3.6'",
+ "'4.0'",
+ "'4.2'",
+ "'4.4'",
+ "'5.0'"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24581",
+ "title": "Regression: Add support to namespace within micro services",
+ "userLogin": "sampaiodiego",
+ "contributors": [
+ "sampaiodiego"
+ ]
+ },
+ {
+ "pr": "24583",
+ "title": "Regression: Error when trying to load name of dm rooms for avatars and notifications",
+ "userLogin": "pierre-lehnen-rc",
+ "contributors": [
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24567",
+ "title": "[NEW] Marketplace sort filter",
+ "userLogin": "ujorgeleite",
+ "description": "Implemented a sort filter for the marketplace screen. This component sorts the marketplace apps list in 4 ways, alphabetical order(A-Z), inverse alphabetical order(Z-A), most recently updated(MRU), and least recent updated(LRU). Besides that, I've generalized some components and types to increase code reusability, renamed some helpers as well as deleted some useless ones, and inserted the necessary new translations on the English i18n dictionary.\r\nDemo gif:\r\n![Marketplace sort filter](https://user-images.githubusercontent.com/43561537/155033709-e07a6306-a85a-4f7f-9624-b53ba5dd7fa9.gif)",
+ "milestone": "4.5.0",
+ "contributors": [
+ "rique223",
+ "ujorgeleite"
+ ]
+ },
+ {
+ "pr": "23102",
+ "title": "[NEW] VoIP Support for Omnichannel",
+ "userLogin": "KevLehman",
+ "description": "- Created VoipService to manage VoIP connections and PBX connection\r\n- Created LivechatVoipService that will handle custom cases for livechat (creating rooms, assigning chats to queue, actions when call is finished, etc)\r\n- Created Basic interfaces to support new services and new model\r\n- Created Endpoints for management interfaces\r\n- Implemented asterisk connector on VoIP service\r\n- Created UI components to show calls incoming and to allow answering/rejecting calls\r\n- Added new settings to control call server/management server connection values\r\n- Added endpoints to associate Omnichannel Agents with PBX Extensions\r\n- Added support for event listening on server side, to get metadata about calls being received/ongoing\r\n- Created new pages to update settings & to see user-extension association\r\n- Created new page to see ongoing calls (and past calls)\r\n- Added support for remote hangup/hold on calls\r\n- Implemented call metrics calculation (hold time, waiting time, talk time)\r\n- Show a notificaiton when call is received",
+ "milestone": "4.5.0",
+ "contributors": [
+ "KevLehman",
+ "amolghode1981",
+ "web-flow",
+ "tiagoevanp",
+ "murtaza98",
+ "MartinSchoeler"
+ ]
+ },
+ {
+ "pr": "24562",
+ "title": "Regression: Fix room not getting created due to null visitor status",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.0",
+ "contributors": [
+ "murtaza98"
+ ]
+ }
+ ]
+ },
+ "4.5.0-rc.2": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0-alpha.5979",
+ "mongo_versions": [
+ "'3.6'",
+ "'4.0'",
+ "'4.2'",
+ "'4.4'",
+ "'5.0'"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24594",
+ "title": "Regression: Bunch of settings fixes for VoIP",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.0",
+ "contributors": [
+ "MartinSchoeler",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24609",
+ "title": "Regression: Admin Sidebar colors inverted.",
+ "userLogin": "gabriellsh",
+ "milestone": "4.5.0",
+ "contributors": [
+ "gabriellsh"
+ ]
+ },
+ {
+ "pr": "24602",
+ "title": "Regression: No audio when call comes from Skype/IP phone",
+ "userLogin": "amolghode1981",
+ "description": "The audio was not rendered because of re-rendering of react element based on\r\nqueueCounter and roomInfo. queueCounter and roomInfo cause the dom to re-render when call gets accepted\r\nbecause after accepting call, queueCounter changes or a room gets created.\r\nThe audio element gets recreated. But VoIP user probably holds the old one.\r\nThe behaviour is not predictable when such case happens. If everything gets cleanly setup,\r\neven if the audio element goes headless, it still continues to play the remote audio.\r\nBut in other cases, it is unreferenced the one on dom has its srcObject as null.\r\nThis causes no audio.\r\n\r\nThis fix provides a way to re-initialise the rendering elements in VoIP user\r\nand calls this function on useEffect() if the re-render has happen.",
+ "milestone": "4.5.0",
+ "contributors": [
+ "amolghode1981"
+ ]
+ },
+ {
+ "pr": "24596",
+ "title": "Regression: Fixes in Voice Contextual Bar and Directory",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.0",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ },
+ {
+ "pr": "24603",
+ "title": "Regression: Fix time format on Voip system messages",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.0",
+ "contributors": [
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24598",
+ "title": "Regression: VoIP service button displayed when VoIP is disabled",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.0",
+ "contributors": [
+ "murtaza98"
+ ]
+ }
+ ]
+ },
+ "4.5.0-rc.3": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0-alpha.5979",
+ "mongo_versions": [
+ "'3.6'",
+ "'4.0'",
+ "'4.2'",
+ "'4.4'",
+ "'5.0'"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24630",
+ "title": "Regression: Fix double value on holdTime and empty msg on last message",
+ "userLogin": "MartinSchoeler",
+ "contributors": [
+ "MartinSchoeler",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24624",
+ "title": "Regression: If Asterisk suddenly goes down, server has no way to know. Causes server to get stuck. Needs restart",
+ "userLogin": "amolghode1981",
+ "milestone": "4.5.0",
+ "contributors": [
+ "amolghode1981",
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24601",
+ "title": "Regression: Prevent connect to asterisk when VoIP is disabled",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.0",
+ "contributors": [
+ "murtaza98",
+ "web-flow",
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24626",
+ "title": "Regression: Encode registration info as JWT when signing key is provided",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.0",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24625",
+ "title": "Regression: Fix time fields and wrap up in Voip Room Contexual bar",
+ "userLogin": "MartinSchoeler",
+ "milestone": "4.5.0",
+ "contributors": [
+ "MartinSchoeler"
+ ]
+ },
+ {
+ "pr": "24592",
+ "title": "Regression: Fix in-correct room status shown to agents",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.0",
+ "contributors": [
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24619",
+ "title": "Regression: Do not show toast on incoming voip calls",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.0",
+ "contributors": [
+ "murtaza98",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24616",
+ "title": "Regression: Fix incoming voip call ringtone is not ringing",
+ "userLogin": "murtaza98",
+ "contributors": [
+ "murtaza98",
+ "web-flow"
+ ]
+ },
+ {
+ "pr": "24610",
+ "title": "Regression: Mark all rooms as read modal closing instantly.",
+ "userLogin": "gabriellsh",
+ "contributors": [
+ "gabriellsh"
+ ]
+ },
+ {
+ "pr": "24615",
+ "title": "Regression: Fix translation for call started message",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.0",
+ "contributors": [
+ "murtaza98",
+ "web-flow"
+ ]
+ }
+ ]
+ },
+ "4.5.0-rc.4": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0-alpha.5979",
+ "mongo_versions": [
+ "'3.6'",
+ "'4.0'",
+ "'4.2'",
+ "'4.4'",
+ "'5.0'"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24585",
+ "title": "Regression: Error setting user avatars and mentioning rooms on Slack Import",
+ "userLogin": "matheusbsilva137",
+ "description": "- Fix `Mentioned room not found` error when importing rooms from Slack;\r\n- Fix `Forbidden` error when setting avatars for users imported from Slack (on user import/creation);\r\n- Fix incorrect message count on imported rooms;\r\n- Fix missing username on messages imported from Slack;",
+ "contributors": [
+ "matheusbsilva137",
+ "pierre-lehnen-rc"
+ ]
+ },
+ {
+ "pr": "24647",
+ "title": "Regression: Fix wrong tab name for VoIP settings",
+ "userLogin": "renatobecker",
+ "milestone": "4.5.0",
+ "contributors": [
+ "renatobecker"
+ ]
+ },
+ {
+ "pr": "24646",
+ "title": "Regression: Server crashing if Voip credentials are invalid",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.0",
+ "contributors": [
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24645",
+ "title": "Regression: Extension List panel UI not aligned with designs",
+ "userLogin": "murtaza98",
+ "milestone": "4.5.0",
+ "contributors": [
+ "murtaza98"
+ ]
+ },
+ {
+ "pr": "24635",
+ "title": "Regression: Queue counter aggregator for incoming/hanged calls",
+ "userLogin": "amolghode1981",
+ "milestone": "4.5.0",
+ "contributors": [
+ "amolghode1981"
+ ]
+ }
+ ]
+ },
+ "4.5.0-rc.5": {
+ "node_version": "14.18.3",
+ "npm_version": "6.14.15",
+ "apps_engine_version": "1.31.0-alpha.5979",
+ "mongo_versions": [
+ "'3.6'",
+ "'4.0'",
+ "'4.2'",
+ "'4.4'",
+ "'5.0'"
+ ],
+ "pull_requests": [
+ {
+ "pr": "24649",
+ "title": "Regression: Refresh server connection when MI server settings change",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.0",
+ "contributors": [
+ "KevLehman"
+ ]
+ },
+ {
+ "pr": "24648",
+ "title": "Regression: Prevent button from losing state when rerendering",
+ "userLogin": "KevLehman",
+ "milestone": "4.5.0",
+ "contributors": [
+ "KevLehman"
+ ]
+ }
+ ]
+ },
+ "4.5.0-rc.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": "24651",
+ "title": "Chore: Update Apps-Engine",
+ "userLogin": "d-gubert",
+ "milestone": "4.5.0",
+ "contributors": [
+ "d-gubert"
+ ]
+ }
+ ]
+ },
+ "4.5.0-rc.7": {
+ "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.5.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.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"
+ ]
+ }
+ ]
}
}
}
\ No newline at end of file
diff --git a/.github/no-js-action-config.json b/.github/no-js-action-config.json
index 435d5ace554c..f2c55418f002 100644
--- a/.github/no-js-action-config.json
+++ b/.github/no-js-action-config.json
@@ -1,8 +1,5 @@
{
"added": {
- "ignore": [
- "packages/accounts-linkedin/**/*",
- "packages/linkedin-oauth/**/*"
- ]
+ "ignore": ["packages/accounts-linkedin/**/*", "packages/linkedin-oauth/**/*", "tests/cypress/integration/08-resolutions.spec.js"]
}
}
diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml
index ac1da992f7be..1cdbeb91b48b 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
@@ -19,162 +23,151 @@ jobs:
runs-on: ubuntu-20.04
steps:
+ - name: Github Info
+ run: |
+ echo "GITHUB_ACTION: $GITHUB_ACTION"
+ echo "GITHUB_ACTOR: $GITHUB_ACTOR"
+ echo "GITHUB_REF: $GITHUB_REF"
+ echo "GITHUB_HEAD_REF: $GITHUB_HEAD_REF"
+ echo "GITHUB_BASE_REF: $GITHUB_BASE_REF"
+ echo "github.event_name: ${{ github.event_name }}"
+ cat $GITHUB_EVENT_PATH
+
+ - name: Use Node.js 14.18.3
+ uses: actions/setup-node@v3
+ with:
+ node-version: "14.18.3"
+
+ - uses: actions/checkout@v3
+
+ - name: Free disk space
+ run: |
+ sudo swapoff -a
+ sudo rm -f /swapfile
+ sudo apt clean
+ docker rmi $(docker image ls -aq)
+ df -h
+
+ # TODO is this required?
+ # - name: check package-lock
+ # run: |
+ # npx package-lock-check
+
+ - name: Cache cypress
+ id: cache-cypress
+ uses: actions/cache@v2
+ with:
+ path: /home/runner/.cache/Cypress
+ key: ${{ runner.OS }}-cache-cypress-${{ 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: ./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('apps/meteor/.meteor/release') }}
+ restore-keys: |
+ ${{ runner.os }}-meteor-
+ ${{ runner.os }}-
+ - name: Install Meteor
+ run: |
+ # Restore bin from cache
+ set +e
+ METEOR_SYMLINK_TARGET=$(readlink ~/.meteor/meteor)
+ METEOR_TOOL_DIRECTORY=$(dirname "$METEOR_SYMLINK_TARGET")
+ set -e
+ LAUNCHER=$HOME/.meteor/$METEOR_TOOL_DIRECTORY/scripts/admin/launch-meteor
+ if [ -e $LAUNCHER ]
+ then
+ echo "Cached Meteor bin found, restoring it"
+ sudo cp "$LAUNCHER" "/usr/local/bin/meteor"
+ else
+ echo "No cached Meteor bin found."
+ fi
- - name: Github Info
- run: |
- echo "GITHUB_ACTION: $GITHUB_ACTION"
- echo "GITHUB_ACTOR: $GITHUB_ACTOR"
- echo "GITHUB_REF: $GITHUB_REF"
- echo "GITHUB_HEAD_REF: $GITHUB_HEAD_REF"
- echo "GITHUB_BASE_REF: $GITHUB_BASE_REF"
- echo "github.event_name: ${{ github.event_name }}"
- cat $GITHUB_EVENT_PATH
-
- - name: Use Node.js 14.18.3
- uses: actions/setup-node@v2
- with:
- node-version: "14.18.3"
-
- - uses: actions/checkout@v2
-
- - name: Free disk space
- run: |
- sudo swapoff -a
- sudo rm -f /swapfile
- sudo apt clean
- docker rmi $(docker image ls -aq)
- df -h
-
- - name: check package-lock
- run: |
- npx package-lock-check
-
- - name: Cache cypress
- id: cache-cypress
- uses: actions/cache@v2
- 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: 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') }}
-
- - name: Cache meteor
- uses: actions/cache@v2
- with:
- path: ~/.meteor
- key: ${{ runner.OS }}-meteor-${{ hashFiles('.meteor/release', '.github/workflows/build_and_test.yml') }}
-
- - name: Install Meteor
- run: |
- # Restore bin from cache
- set +e
- METEOR_SYMLINK_TARGET=$(readlink ~/.meteor/meteor)
- METEOR_TOOL_DIRECTORY=$(dirname "$METEOR_SYMLINK_TARGET")
- set -e
- LAUNCHER=$HOME/.meteor/$METEOR_TOOL_DIRECTORY/scripts/admin/launch-meteor
- if [ -e $LAUNCHER ]
- then
- echo "Cached Meteor bin found, restoring it"
- sudo cp "$LAUNCHER" "/usr/local/bin/meteor"
- else
- echo "No cached Meteor bin found."
- fi
-
- # only install meteor if bin isn't found
- command -v meteor >/dev/null 2>&1 || curl https://install.meteor.com | sed s/--progress-bar/-sL/g | /bin/sh
-
- - name: Versions
- run: |
- npm --versions
- node -v
- meteor --version
- meteor npm --versions
- meteor node -v
- git version
-
- - name: npm 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: meteor npm run lint
-
- - run: meteor npm run translation-check
-
- - run: meteor npm run typecheck
-
- # To reduce memory need during actual build, build the packages solely first
- # - name: Build a Meteor cache
- # run: |
- # # to do this we can clear the main files and it build the rest
- # echo "" > server/main.ts
- # echo "" > client/main.ts
- # sed -i.backup 's/rocketchat:livechat/#rocketchat:livechat/' .meteor/packages
- # meteor build --server-only --debug --directory /tmp/build-temp
- # git checkout -- server/main.ts client/main.ts .meteor/packages
-
- - name: Reset Meteor
- if: startsWith(github.ref, 'refs/tags/') == 'true' || github.ref == 'refs/heads/develop'
- run: |
- meteor reset
-
- - name: Try building micro services
- run: |
- cd ./ee/server/services
- npm run build
- # check if build succeeded
- [ ! -d ./dist/ee/server/services ] && exit 1
- rm -rf dist/
-
- - name: Build Rocket.Chat From Pull Request
- if: startsWith(github.ref, 'refs/pull/') == true
- env:
- METEOR_PROFILE: 1000
- run: |
- meteor build --server-only --directory --debug /tmp/build-test
-
- - name: Build Rocket.Chat
- if: startsWith(github.ref, 'refs/pull/') != true
- run: |
- meteor build --server-only --directory /tmp/build-test
-
- - name: Prepare build
- run: |
- mkdir /tmp/build/
- cd /tmp/build-test
- tar czf /tmp/build/Rocket.Chat.tar.gz bundle
- cd /tmp/build-test/bundle/programs/server
- npm install
- cd /tmp
- tar czf Rocket.Chat.test.tar.gz ./build-test
-
- - name: Store build for tests
- uses: actions/upload-artifact@v2
- with:
- name: build-test
- path: /tmp/Rocket.Chat.test.tar.gz
-
- - name: Store build
- uses: actions/upload-artifact@v2
- with:
- name: build
- path: /tmp/build
+ # only install meteor if bin isn't found
+ command -v meteor >/dev/null 2>&1 || curl https://install.meteor.com | sed s/--progress-bar/-sL/g | /bin/sh
+
+ - name: Versions
+ run: |
+ npm --versions
+ yarn -v
+ node -v
+ meteor --version
+ meteor npm --versions
+ meteor node -v
+ git version
+
+ - name: yarn install
+ # if: steps.cache-nodemodules.outputs.cache-hit != 'true' || steps.cache-cypress.outputs.cache-hit != 'true'
+ run: yarn
+
+ - run: yarn lint
+
+ - run: yarn turbo run translation-check
+
+ - name: TS typecheck
+ run: |
+ 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
+ if: startsWith(github.ref, 'refs/pull/') == true
+ env:
+ METEOR_PROFILE: 1000
+ run: |
+ yarn build:ci -- --debug --directory /tmp/build-test
+
+ - name: Build Rocket.Chat
+ if: startsWith(github.ref, 'refs/pull/') != true
+ run: |
+ yarn build:ci -- --directory /tmp/build-test
+
+ - name: Prepare build
+ run: |
+ mkdir /tmp/build/
+ cd /tmp/build-test
+ tar czf /tmp/build/Rocket.Chat.tar.gz bundle
+ cd /tmp/build-test/bundle/programs/server
+ npm install --production
+ cd /tmp
+ tar czf Rocket.Chat.test.tar.gz ./build-test
+
+ - name: Store build for tests
+ uses: actions/upload-artifact@v2
+ with:
+ name: build-test
+ path: /tmp/Rocket.Chat.test.tar.gz
+
+ - name: Store build
+ uses: actions/upload-artifact@v2
+ with:
+ name: build
+ path: /tmp/build
test:
runs-on: ubuntu-20.04
@@ -183,95 +176,292 @@ jobs:
strategy:
matrix:
node-version: ["14.18.3"]
- mongodb-version: ["3.6", "4.0", "4.2", "4.4","5.0"]
+ mongodb-version: ["3.6", "4.0", "4.2", "4.4", "5.0"]
steps:
- - name: Launch MongoDB
- uses: wbari/start-mongoDB@v0.2
- with:
- mongoDBVersion: ${{ matrix.mongodb-version }} --replSet=rs0
-
- - name: Restore build for tests
- uses: actions/download-artifact@v2
- with:
- name: build-test
- path: /tmp
-
- - name: Decompress build
- run: |
- cd /tmp
- tar xzf Rocket.Chat.test.tar.gz
- cd -
-
- - name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v2
- with:
- node-version: ${{ matrix.node-version }}
-
- - name: Setup Chrome
- run: |
- npm i chromedriver
-
- - name: Configure Replica Set
- run: |
- docker exec mongo mongo --eval 'rs.initiate({_id:"rs0", members: [{"_id":1, "host":"localhost:27017"}]})'
- docker exec mongo mongo --eval 'rs.status()'
-
- - uses: actions/checkout@v2
-
- - name: Cache cypress
- id: cache-cypress
- uses: actions/cache@v2
- 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
- # 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
-
- - name: Unit Test
- run: npm run testunit
-
- - name: Unit Test (client)
- run: npm run testunit-client
-
- - name: E2E Test
- env:
- TEST_MODE: "true"
- MONGO_URL: mongodb://localhost:27017/rocketchat
- MONGO_OPLOG_URL: mongodb://localhost:27017/local
- 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 &
- for i in $(seq 1 5); do (docker exec mongo mongo rocketchat --eval 'db.dropDatabase()') && npm run testci && s=0 && break || s=$? && sleep 1; done; (exit $s)
-
-# notification:
-# runs-on: ubuntu-20.04
-# needs: test
-
-# steps:
-# - name: Rocket.Chat Notification
-# uses: RocketChat/Rocket.Chat.GitHub.Action.Notification@1.1.1
-# with:
-# type: ${{ job.status }}
-# job_name: '**Build and Test**'
-# url: ${{ secrets.ROCKETCHAT_WEBHOOK }}
-# commit: true
-# token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Launch MongoDB
+ uses: wbari/start-mongoDB@v0.2
+ with:
+ mongoDBVersion: ${{ matrix.mongodb-version }} --replSet=rs0
+
+ - name: Restore build for tests
+ uses: actions/download-artifact@v2
+ with:
+ name: build-test
+ path: /tmp
+
+ - name: Decompress build
+ run: |
+ cd /tmp
+ tar xzf Rocket.Chat.test.tar.gz
+ cd -
+
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Setup Chrome
+ run: |
+ npm i chromedriver
+
+ - name: Configure Replica Set
+ run: |
+ docker exec mongo mongo --eval 'rs.initiate({_id:"rs0", members: [{"_id":1, "host":"localhost:27017"}]})'
+ docker exec mongo mongo --eval 'rs.status()'
+
+ - uses: actions/checkout@v3
+
+ - name: Cache cypress
+ id: cache-cypress
+ uses: actions/cache@v2
+ with:
+ path: /home/runner/.cache/Cypress
+ key: ${{ runner.OS }}-cache-cypress-${{ hashFiles('**/package-lock.json', '.github/workflows/build_and_test.yml') }}
+ 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: yarn
+
+ - name: Unit Test
+ run: yarn testunit
+
+ - name: Install Playwright
+ run: |
+ cd ./apps/meteor
+ npx playwright install --with-deps
+
+ - name: E2E Test API
+ 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 &
+ 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 (Legacy - Cypress)
+ 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 &
+ 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: ./apps/meteor/tests/cypress/screenshots*
+
+ - name: Store cypress test videos
+ uses: actions/upload-artifact@v2
+ if: failure()
+ with:
+ name: cypress-test-videos
+ path: ./apps/meteor/tests/cypress/videos*
+
+ test-ee:
+ runs-on: ubuntu-20.04
+ needs: build
+
+ strategy:
+ matrix:
+ node-version: ["14.18.3"]
+ mongodb-version: ["4.4"]
+
+ steps:
+ - name: Launch MongoDB
+ uses: wbari/start-mongoDB@v0.2
+ with:
+ mongoDBVersion: ${{ matrix.mongodb-version }} --replSet=rs0
+
+ - name: Launch NATS
+ run: sudo docker run --name nats -d -p 4222:4222 nats:2.4
+
+ - name: Restore build for tests
+ uses: actions/download-artifact@v2
+ with:
+ name: build-test
+ path: /tmp
+
+ - name: Decompress build
+ run: |
+ cd /tmp
+ tar xzf Rocket.Chat.test.tar.gz
+ cd -
+
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Setup Chrome
+ run: |
+ npm i chromedriver
+
+ - name: Configure Replica Set
+ run: |
+ docker exec mongo mongo --eval 'rs.initiate({_id:"rs0", members: [{"_id":1, "host":"localhost:27017"}]})'
+ docker exec mongo mongo --eval 'rs.status()'
+
+ - uses: actions/checkout@v3
+
+ - name: Cache cypress
+ id: cache-cypress
+ uses: actions/cache@v2
+ with:
+ path: /home/runner/.cache/Cypress
+ key: ${{ runner.OS }}-cache-cypress-${{ 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: Yarn install
+ # if: steps.cache-nodemodules.outputs.cache-hit != 'true' || steps.cache-cypress.outputs.cache-hit != 'true'
+ run: yarn
+
+ - name: Build micro services
+ run: yarn build:services
+
+ - name: E2E Test API
+ 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
+ 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 (Legacy - Cypress)
+ 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/
+
+ 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: ./apps/meteor/tests/cypress/screenshots*
+
+ - name: Store cypress test videos
+ uses: actions/upload-artifact@v2
+ if: failure()
+ with:
+ name: ee-cypress-test-videos
+ path: ./apps/meteor/tests/cypress/videos*
+ # notification:
+ # runs-on: ubuntu-20.04
+ # needs: test
+
+ # steps:
+ # - name: Rocket.Chat Notification
+ # uses: RocketChat/Rocket.Chat.GitHub.Action.Notification@1.1.1
+ # with:
+ # type: ${{ job.status }}
+ # job_name: '**Build and Test**'
+ # url: ${{ secrets.ROCKETCHAT_WEBHOOK }}
+ # commit: true
+ # token: ${{ secrets.GITHUB_TOKEN }}
build-image-pr:
runs-on: ubuntu-20.04
@@ -282,205 +472,236 @@ jobs:
release: ["official", "preview"]
steps:
- - uses: actions/checkout@v2
-
- - name: Login to GitHub Container Registry
- uses: docker/login-action@v1
- with:
- registry: ghcr.io
- username: ${{ secrets.CR_USER }}
- password: ${{ secrets.CR_PAT }}
-
- - name: Free disk space
- run: |
- sudo swapoff -a
- sudo rm -f /swapfile
- 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') }}
-
- - 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') }}
-
- - name: Cache meteor
- uses: actions/cache@v2
- with:
- path: ~/.meteor
- key: ${{ runner.OS }}-meteor-${{ hashFiles('.meteor/release', '.github/workflows/build_and_test.yml') }}
-
- - name: Use Node.js 14.18.3
- uses: actions/setup-node@v2
- with:
- node-version: "14.18.3"
-
- - name: Install Meteor
- run: |
- # Restore bin from cache
- set +e
- METEOR_SYMLINK_TARGET=$(readlink ~/.meteor/meteor)
- METEOR_TOOL_DIRECTORY=$(dirname "$METEOR_SYMLINK_TARGET")
- set -e
- LAUNCHER=$HOME/.meteor/$METEOR_TOOL_DIRECTORY/scripts/admin/launch-meteor
- if [ -e $LAUNCHER ]
- then
- echo "Cached Meteor bin found, restoring it"
- sudo cp "$LAUNCHER" "/usr/local/bin/meteor"
- else
- echo "No cached Meteor bin found."
- fi
-
- # only install meteor if bin isn't found
- command -v meteor >/dev/null 2>&1 || curl https://install.meteor.com | sed s/--progress-bar/-sL/g | /bin/sh
-
- - name: Versions
- run: |
- npm --versions
- node -v
- meteor --version
- meteor npm --versions
- meteor node -v
- git version
-
- - name: npm install
- # if: steps.cache-nodemodules.outputs.cache-hit != 'true'
- run: |
- meteor npm install
-
- # To reduce memory need during actual build, build the packages solely first
- # - name: Build a Meteor cache
- # run: |
- # # to do this we can clear the main files and it build the rest
- # echo "" > server/main.ts
- # echo "" > client/main.ts
- # sed -i.backup 's/rocketchat:livechat/#rocketchat:livechat/' .meteor/packages
- # meteor build --server-only --debug --directory /tmp/build-temp
- # git checkout -- server/main.ts client/main.ts .meteor/packages
-
- - name: Build Rocket.Chat
- run: |
- meteor build --server-only --directory /tmp/build-pr
-
- - name: Build Docker image for PRs
- run: |
- cd /tmp/build-pr
-
- LOWERCASE_REPOSITORY=$(echo "${{ github.repository_owner }}" | tr "[:upper:]" "[:lower:]")
- IMAGE_NAME="rocket.chat"
- if [[ '${{ matrix.release }}' = 'preview' ]]; then
- IMAGE_NAME="${IMAGE_NAME}.preview"
- fi;
-
- IMAGE_NAME="ghcr.io/${LOWERCASE_REPOSITORY}/${IMAGE_NAME}:pr-${{ github.event.number }}"
-
- echo "Build official Docker image ${IMAGE_NAME}"
-
- DOCKER_PATH="${GITHUB_WORKSPACE}/.docker"
- if [[ '${{ matrix.release }}' = 'preview' ]]; then
- DOCKER_PATH="${DOCKER_PATH}-mongo"
- fi;
-
- echo "Build ${{ matrix.release }} Docker image"
- cp ${DOCKER_PATH}/Dockerfile .
- if [ -e ${DOCKER_PATH}/entrypoint.sh ]; then
- cp ${DOCKER_PATH}/entrypoint.sh .
- fi;
-
- docker build -t $IMAGE_NAME .
- docker push $IMAGE_NAME
+ - uses: actions/checkout@v3
+
+ - name: Login to GitHub Container Registry
+ uses: docker/login-action@v1
+ with:
+ registry: ghcr.io
+ username: ${{ secrets.CR_USER }}
+ password: ${{ secrets.CR_PAT }}
+
+ - name: Free disk space
+ run: |
+ sudo swapoff -a
+ sudo rm -f /swapfile
+ sudo apt clean
+ docker rmi $(docker image ls -aq)
+ df -h
+ - 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: ./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') }}
+ 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"
+
+ - name: Install Meteor
+ run: |
+ # Restore bin from cache
+ set +e
+ METEOR_SYMLINK_TARGET=$(readlink ~/.meteor/meteor)
+ METEOR_TOOL_DIRECTORY=$(dirname "$METEOR_SYMLINK_TARGET")
+ set -e
+ LAUNCHER=$HOME/.meteor/$METEOR_TOOL_DIRECTORY/scripts/admin/launch-meteor
+ if [ -e $LAUNCHER ]
+ then
+ echo "Cached Meteor bin found, restoring it"
+ sudo cp "$LAUNCHER" "/usr/local/bin/meteor"
+ else
+ echo "No cached Meteor bin found."
+ fi
+
+ # only install meteor if bin isn't found
+ command -v meteor >/dev/null 2>&1 || curl https://install.meteor.com | sed s/--progress-bar/-sL/g | /bin/sh
+
+ - name: Versions
+ run: |
+ npm --versions
+ yarn -v
+ node -v
+ meteor --version
+ meteor npm --versions
+ meteor node -v
+ git version
+
+ - name: Yarn install
+ # if: steps.cache-nodemodules.outputs.cache-hit != 'true'
+ run: yarn
+
+ # To reduce memory need during actual build, build the packages solely first
+ # - name: Build a Meteor cache
+ # run: |
+ # # to do this we can clear the main files and it build the rest
+ # echo "" > server/main.ts
+ # echo "" > client/main.ts
+ # sed -i.backup 's/rocketchat:livechat/#rocketchat:livechat/' .meteor/packages
+ # meteor build --server-only --debug --directory /tmp/build-temp
+ # git checkout -- server/main.ts client/main.ts .meteor/packages
+
+ - name: Build Rocket.Chat
+ run: yarn build:ci -- --directory /tmp/build-pr
+
+ - name: Build Docker image for PRs
+ run: |
+ cd /tmp/build-pr
+
+ LOWERCASE_REPOSITORY=$(echo "${{ github.repository_owner }}" | tr "[:upper:]" "[:lower:]")
+ IMAGE_NAME="rocket.chat"
+ if [[ '${{ matrix.release }}' = 'preview' ]]; then
+ IMAGE_NAME="${IMAGE_NAME}.preview"
+ fi;
+
+ IMAGE_NAME="ghcr.io/${LOWERCASE_REPOSITORY}/${IMAGE_NAME}:pr-${{ github.event.number }}"
+
+ echo "Build official Docker image ${IMAGE_NAME}"
+
+ DOCKER_PATH="${GITHUB_WORKSPACE}/apps/meteor/.docker"
+ if [[ '${{ matrix.release }}' = 'preview' ]]; then
+ DOCKER_PATH="${DOCKER_PATH}-mongo"
+ fi;
+
+ echo "Build ${{ matrix.release }} Docker image"
+ cp ${DOCKER_PATH}/Dockerfile .
+ if [ -e ${DOCKER_PATH}/entrypoint.sh ]; then
+ cp ${DOCKER_PATH}/entrypoint.sh .
+ fi;
+
+ docker build -t $IMAGE_NAME .
+ docker push $IMAGE_NAME
+
+ 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@v2
-
- - name: Restore build
- uses: actions/download-artifact@v2
- with:
- name: build
- path: /tmp/build
-
- - name: Publish assets
- 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'
- 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: |
- if [[ '${{ github.event_name }}' = 'release' ]]; then
- GIT_TAG="${GITHUB_REF#*tags/}"
- GIT_BRANCH=""
- ARTIFACT_NAME="$(npm run version --silent)"
- RC_VERSION=$GIT_TAG
-
- if [[ $GIT_TAG =~ ^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+ ]]; then
- SNAP_CHANNEL=candidate
- RC_RELEASE=candidate
- elif [[ $GIT_TAG =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
- SNAP_CHANNEL=stable
- RC_RELEASE=stable
+ - uses: actions/checkout@v3
+
+ - name: Restore build
+ uses: actions/download-artifact@v2
+ with:
+ name: build
+ path: /tmp/build
+
+ - name: Publish assets
+ 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"
+ 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="${REPO_VERSION}"
+ RC_VERSION=$GIT_TAG
+
+ if [[ '${{ needs.release-versions.outputs.release }}' = 'release-candidate' ]]; then
+ SNAP_CHANNEL=candidate
+ RC_RELEASE=candidate
+ 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="${REPO_VERSION}.$GITHUB_SHA"
+ RC_VERSION="${REPO_VERSION}"
+ SNAP_CHANNEL=edge
+ RC_RELEASE=develop
+ fi;
+ ROCKET_DEPLOY_DIR="/tmp/deploy"
+ FILENAME="$ROCKET_DEPLOY_DIR/rocket.chat-$ARTIFACT_NAME.tgz";
+
+ aws s3 cp s3://rocketchat/sign.key.gpg .github/sign.key.gpg
+
+ mkdir -p $ROCKET_DEPLOY_DIR
+
+ cp .github/sign.key.gpg /tmp
+ gpg --yes --batch --passphrase=$GPG_PASSWORD /tmp/sign.key.gpg
+ gpg --allow-secret-key-import --import /tmp/sign.key
+ rm /tmp/sign.key
+
+ ln -s /tmp/build/Rocket.Chat.tar.gz "$FILENAME"
+ gpg --armor --detach-sign "$FILENAME"
+
+ aws s3 cp $ROCKET_DEPLOY_DIR/ s3://download.rocket.chat/build/ --recursive
+
+ curl -H "Content-Type: application/json" -H "X-Update-Token: $UPDATE_TOKEN" -d \
+ "{\"nodeVersion\": \"14.18.3\", \"compatibleMongoVersions\": [\"3.6\", \"4.0\", \"4.2\", \"4.4\", \"5.0\"], \"commit\": \"$GITHUB_SHA\", \"tag\": \"$RC_VERSION\", \"branch\": \"$GIT_BRANCH\", \"artifactName\": \"$ARTIFACT_NAME\", \"releaseType\": \"$RC_RELEASE\"}" \
+ https://releases.rocket.chat/update
+
+ # Makes build fail if the release isn't there
+ curl --fail https://releases.rocket.chat/$RC_VERSION/info
+
+ if [[ $GIT_TAG ]]; then
+ curl -X POST \
+ https://connect.redhat.com/api/v2/projects/$REDHAT_REGISTRY_PID/build \
+ -H "Authorization: Bearer $REDHAT_REGISTRY_KEY" \
+ -H 'Cache-Control: no-cache' \
+ -H 'Content-Type: application/json' \
+ -d '{"tag":"'$GIT_TAG'"}'
fi
- else
- GIT_TAG=""
- GIT_BRANCH="${GITHUB_REF#*heads/}"
- ARTIFACT_NAME="$(npm run version --silent).$GITHUB_SHA"
- RC_VERSION="$(npm run version --silent)"
- SNAP_CHANNEL=edge
- RC_RELEASE=develop
- fi;
- ROCKET_DEPLOY_DIR="/tmp/deploy"
- FILENAME="$ROCKET_DEPLOY_DIR/rocket.chat-$ARTIFACT_NAME.tgz";
-
- aws s3 cp s3://rocketchat/sign.key.gpg .github/sign.key.gpg
-
- mkdir -p $ROCKET_DEPLOY_DIR
-
- cp .github/sign.key.gpg /tmp
- gpg --yes --batch --passphrase=$GPG_PASSWORD /tmp/sign.key.gpg
- gpg --allow-secret-key-import --import /tmp/sign.key
- rm /tmp/sign.key
-
- ln -s /tmp/build/Rocket.Chat.tar.gz "$FILENAME"
- gpg --armor --detach-sign "$FILENAME"
-
- aws s3 cp $ROCKET_DEPLOY_DIR/ s3://download.rocket.chat/build/ --recursive
-
- curl -H "Content-Type: application/json" -H "X-Update-Token: $UPDATE_TOKEN" -d \
- "{\"nodeVersion\": \"14.18.3\", \"compatibleMongoVersions\": [\"3.6\", \"4.0\", \"4.2\", \"4.4\", \"5.0\"], \"commit\": \"$GITHUB_SHA\", \"tag\": \"$RC_VERSION\", \"branch\": \"$GIT_BRANCH\", \"artifactName\": \"$ARTIFACT_NAME\", \"releaseType\": \"$RC_RELEASE\"}" \
- https://releases.rocket.chat/update
-
- # Makes build fail if the release isn't there
- curl --fail https://releases.rocket.chat/$RC_VERSION/info
-
- if [[ $GIT_TAG ]]; then
- curl -X POST \
- https://connect.redhat.com/api/v2/projects/$REDHAT_REGISTRY_PID/build \
- -H "Authorization: Bearer $REDHAT_REGISTRY_KEY" \
- -H 'Cache-Control: no-cache' \
- -H 'Content-Type: application/json' \
- -d '{"tag":"'$GIT_TAG'"}'
- fi
image-build:
runs-on: ubuntu-20.04
- needs: deploy
+ needs: [deploy, release-versions]
strategy:
matrix:
@@ -491,161 +712,156 @@ jobs:
IMAGE_NAME: "rocketchat/rocket.chat"
steps:
- - uses: actions/checkout@v2
-
- - name: Login to DockerHub
- uses: docker/login-action@v1
- with:
- username: ${{ secrets.DOCKER_USER }}
- password: ${{ secrets.DOCKER_PASS }}
-
- - name: Restore build
- uses: actions/download-artifact@v2
- with:
- name: build
- path: /tmp/build
-
- - name: Unpack build and prepare Docker files
- run: |
- cd /tmp/build
- tar xzf Rocket.Chat.tar.gz
- rm Rocket.Chat.tar.gz
-
- DOCKER_PATH="${GITHUB_WORKSPACE}/.docker"
- if [[ '${{ matrix.release }}' = 'preview' ]]; then
- DOCKER_PATH="${DOCKER_PATH}-mongo"
- fi;
-
- DOCKERFILE_PATH="${DOCKER_PATH}/Dockerfile"
- if [[ '${{ matrix.release }}' = 'alpine' ]]; then
- DOCKERFILE_PATH="${DOCKERFILE_PATH}.${{ matrix.release }}"
- fi;
-
- echo "Copy Dockerfile for release: ${{ matrix.release }}"
- cp $DOCKERFILE_PATH ./Dockerfile
- if [ -e ${DOCKER_PATH}/entrypoint.sh ]; then
- cp ${DOCKER_PATH}/entrypoint.sh .
- fi;
-
- - name: Build Docker image for tag
- if: github.event_name == 'release'
- run: |
- cd /tmp/build
-
- DOCKER_TAG=$GITHUB_REF_NAME
-
- if [[ '${{ matrix.release }}' = 'preview' ]]; then
- IMAGE_NAME="${IMAGE_NAME}.preview"
- fi;
-
- # append the variant name to docker tag
- if [[ '${{ matrix.release }}' = 'alpine' ]]; then
- 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
-
- if [[ '${{ matrix.release }}' = 'alpine' ]]; then
- RELEASE="${RELEASE}-${{ matrix.release }}"
- fi;
-
- echo "IMAGE_NAME: $IMAGE_NAME"
- echo "DOCKER_TAG: $DOCKER_TAG"
- echo "RELEASE: $RELEASE"
-
- # build and push the specific tag version
- docker build -t $IMAGE_NAME:$DOCKER_TAG .
- 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
+ - uses: actions/checkout@v3
+
+ - name: Login to DockerHub
+ uses: docker/login-action@v1
+ with:
+ username: ${{ secrets.DOCKER_USER }}
+ password: ${{ secrets.DOCKER_PASS }}
+
+ - name: Restore build
+ uses: actions/download-artifact@v2
+ with:
+ name: build
+ path: /tmp/build
+
+ - name: Unpack build and prepare Docker files
+ run: |
+ cd /tmp/build
+ tar xzf Rocket.Chat.tar.gz
+ rm Rocket.Chat.tar.gz
+
+ DOCKER_PATH="${GITHUB_WORKSPACE}/apps/meteor/.docker"
+ if [[ '${{ matrix.release }}' = 'preview' ]]; then
+ DOCKER_PATH="${DOCKER_PATH}-mongo"
+ fi;
+
+ DOCKERFILE_PATH="${DOCKER_PATH}/Dockerfile"
+ if [[ '${{ matrix.release }}' = 'alpine' ]]; then
+ DOCKERFILE_PATH="${DOCKERFILE_PATH}.${{ matrix.release }}"
+ fi;
+
+ echo "Copy Dockerfile for release: ${{ matrix.release }}"
+ cp $DOCKERFILE_PATH ./Dockerfile
+ if [ -e ${DOCKER_PATH}/entrypoint.sh ]; then
+ cp ${DOCKER_PATH}/entrypoint.sh .
+ fi;
+
+ - name: Build Docker image for tag
+ if: github.event_name == 'release'
+ run: |
+ cd /tmp/build
+
+ DOCKER_TAG=$GITHUB_REF_NAME
+
+ if [[ '${{ matrix.release }}' = 'preview' ]]; then
+ IMAGE_NAME="${IMAGE_NAME}.preview"
+ fi;
+
+ # append the variant name to docker tag
+ if [[ '${{ matrix.release }}' = 'alpine' ]]; then
+ DOCKER_TAG="${DOCKER_TAG}-${{ matrix.release }}"
+ fi;
+
+ RELEASE="${{ needs.release-versions.outputs.release }}"
+
+ if [[ '${{ matrix.release }}' = 'alpine' ]]; then
+ RELEASE="${RELEASE}-${{ matrix.release }}"
+ fi;
+
+ echo "IMAGE_NAME: $IMAGE_NAME"
+ echo "DOCKER_TAG: $DOCKER_TAG"
+ echo "RELEASE: $RELEASE"
+
+ # build and push the specific tag version
+ docker build -t $IMAGE_NAME:$DOCKER_TAG .
+ docker push $IMAGE_NAME:$DOCKER_TAG
+
+ if [[ $RELEASE == 'latest' ]]; 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
+ else
docker tag $IMAGE_NAME:$DOCKER_TAG $IMAGE_NAME:$RELEASE
docker push $IMAGE_NAME:$RELEASE
fi
- else
- docker tag $IMAGE_NAME:$DOCKER_TAG $IMAGE_NAME:$RELEASE
- docker push $IMAGE_NAME:$RELEASE
- fi
- - name: Build Docker image for develop
- if: github.ref == 'refs/heads/develop'
- run: |
- cd /tmp/build
+ - name: Build Docker image for develop
+ if: github.ref == 'refs/heads/develop'
+ run: |
+ cd /tmp/build
- DOCKER_TAG=develop
+ DOCKER_TAG=develop
- if [[ '${{ matrix.release }}' = 'preview' ]]; then
- IMAGE_NAME="${IMAGE_NAME}.preview"
- fi;
+ if [[ '${{ matrix.release }}' = 'preview' ]]; then
+ IMAGE_NAME="${IMAGE_NAME}.preview"
+ fi;
- if [[ '${{ matrix.release }}' = 'alpine' ]]; then
- DOCKER_TAG="${DOCKER_TAG}-${{ matrix.release }}"
- fi;
+ if [[ '${{ matrix.release }}' = 'alpine' ]]; then
+ DOCKER_TAG="${DOCKER_TAG}-${{ matrix.release }}"
+ fi;
- docker build -t $IMAGE_NAME:$DOCKER_TAG .
- docker push $IMAGE_NAME:$DOCKER_TAG
+ docker build -t $IMAGE_NAME:$DOCKER_TAG .
+ docker push $IMAGE_NAME:$DOCKER_TAG
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@v2
-
- - name: Use Node.js 14.18.3
- uses: actions/setup-node@v2
- with:
- node-version: "14.18.3"
-
- - name: Login to DockerHub
- uses: docker/login-action@v1
- with:
- username: ${{ secrets.DOCKER_USER }}
- password: ${{ secrets.DOCKER_PASS }}
-
- - name: Build Docker images
- run: |
- # defines image tag
- if [[ $GITHUB_REF == refs/tags/* ]]; then
- IMAGE_TAG="${GITHUB_REF#refs/tags/}"
- else
- IMAGE_TAG="${GITHUB_REF#refs/heads/}"
- fi
+ - uses: actions/checkout@v3
+
+ - name: Use Node.js 14.18.3
+ uses: actions/setup-node@v3
+ with:
+ node-version: "14.18.3"
+
+ - name: Login to DockerHub
+ uses: docker/login-action@v1
+ with:
+ username: ${{ secrets.DOCKER_USER }}
+ password: ${{ secrets.DOCKER_PASS }}
+
+ - name: Build Docker images
+ run: |
+ # defines image tag
+ if [[ $GITHUB_REF == refs/tags/* ]]; then
+ IMAGE_TAG="${GITHUB_REF#refs/tags/}"
+ else
+ IMAGE_TAG="${GITHUB_REF#refs/heads/}"
+ fi
- # first install repo dependencies
- npm i
+ # first install repo dependencies
+ yarn
+ yarn build:services
- # then micro services dependencies
- cd ./ee/server/services
- npm i
- npm run build
+ echo "Building Docker image for service: ${{ matrix.service }}:${IMAGE_TAG}"
- 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 \
+ .
- docker build --build-arg SERVICE=${{ matrix.service }} -t rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} .
+ docker push rocketchat/${{ matrix.service }}-service:${IMAGE_TAG}
- docker push rocketchat/${{ matrix.service }}-service:${IMAGE_TAG}
+ if [[ $GITHUB_REF == refs/tags/* ]]; then
+ RELEASE="${{ needs.release-versions.outputs.release }}"
- 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"
+ 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
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/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index da9570060ed4..3b8c2696cd1c 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -1,4 +1,4 @@
-name: "Code scanning - action"
+name: 'Code scanning - action'
on:
push:
@@ -8,45 +8,44 @@ on:
jobs:
CodeQL-Build:
-
# CodeQL runs on ubuntu-latest and windows-latest
runs-on: ubuntu-latest
steps:
- - name: Checkout repository
- uses: actions/checkout@v2
- with:
- # We must fetch at least the immediate parents so that if this is
- # a pull request then we can checkout the head.
- fetch-depth: 2
-
- # If this run was triggered by a pull request event, then checkout
- # the head of the pull request instead of the merge commit.
- - run: git checkout HEAD^2
- if: ${{ github.event_name == 'pull_request' }}
-
- # Initializes the CodeQL tools for scanning.
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v1
- # Override language selection by uncommenting this and choosing your languages
- with:
- languages: javascript
-
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
- # If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v1
-
- # ℹ️ Command-line programs to run using the OS shell.
- # 📚 https://git.io/JvXDl
-
- # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
- # and modify them (or add more) to build your code if your project
- # uses a compiled language
-
- #- run: |
- # make bootstrap
- # make release
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ with:
+ # We must fetch at least the immediate parents so that if this is
+ # a pull request then we can checkout the head.
+ fetch-depth: 2
+
+ # If this run was triggered by a pull request event, then checkout
+ # the head of the pull request instead of the merge commit.
+ - run: git checkout HEAD^2
+ if: ${{ github.event_name == 'pull_request' }}
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v1
+ # Override language selection by uncommenting this and choosing your languages
+ with:
+ languages: javascript
+
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
+ # If this step fails, then you should remove it and run the build manually (see below)
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v1
+
+ # ℹ️ Command-line programs to run using the OS shell.
+ # 📚 https://git.io/JvXDl
+
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
+ # and modify them (or add more) to build your code if your project
+ # uses a compiled language
+
+ #- run: |
+ # make bootstrap
+ # make release
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v1
diff --git a/.gitignore b/.gitignore
index 8d5cc726ac80..5c3677cd1c30 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,84 +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
+# 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 5f18ee8009b0..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'],
-};
diff --git a/.scripts/start.js b/.scripts/start.js
deleted file mode 100644
index 3203ba1ec5ec..000000000000
--- a/.scripts/start.js
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/env node
-
-const path = require('path');
-const fs = require('fs');
-const extend = require('util')._extend;
-const { spawn } = require('child_process');
-const net = require('net');
-
-const processes = [];
-let exitCode;
-
-const baseDir = path.resolve(__dirname, '..');
-const srcDir = path.resolve(baseDir);
-
-const isPortTaken = (port) =>
- new Promise((resolve, reject) => {
- const tester = net
- .createServer()
- .once('error', (err) => (err.code === 'EADDRINUSE' ? resolve(true) : reject(err)))
- .once('listening', () => tester.once('close', () => resolve(false)).close())
- .listen(port);
- });
-
-const waitPortRelease = (port, count = 0) =>
- new Promise((resolve, reject) => {
- isPortTaken(port).then((taken) => {
- if (!taken) {
- return resolve();
- }
- if (count > 60) {
- return reject();
- }
- console.log('Port', port, 'not release, waiting 1s...');
- setTimeout(() => {
- waitPortRelease(port, ++count)
- .then(resolve)
- .catch(reject);
- }, 1000);
- });
- });
-
-const appOptions = {
- env: {
- PORT: 3000,
- ROOT_URL: 'http://localhost:3000',
- // MONGO_URL: 'mongodb://localhost:27017/test',
- // MONGO_OPLOG_URL: 'mongodb://localhost:27017/local',
- },
-};
-
-function startProcess(opts, callback) {
- const proc = spawn(opts.command, opts.params, opts.options);
-
- if (opts.waitForMessage) {
- proc.stdout.on('data', function waitForMessage(data) {
- if (data.toString().match(opts.waitForMessage)) {
- if (callback) {
- callback();
- }
- }
- });
- }
-
- if (!opts.silent) {
- proc.stdout.pipe(process.stdout);
- proc.stderr.pipe(process.stderr);
- }
-
- if (opts.logFile) {
- const logStream = fs.createWriteStream(opts.logFile, { flags: 'a' });
- proc.stdout.pipe(logStream);
- proc.stderr.pipe(logStream);
- }
-
- proc.on('exit', function (code, signal) {
- if (code != null) {
- exitCode = code;
- console.log(opts.name, `exited with code ${code}`);
- } else {
- console.log(opts.name, `exited with signal ${signal}`);
- }
-
- processes.splice(processes.indexOf(proc), 1);
-
- processes.forEach((p) => {
- console.log('Killing process', p.pid);
- p.kill();
- });
-
- if (processes.length === 0) {
- waitPortRelease(appOptions.env.PORT)
- .then(() => {
- console.log(`Port ${appOptions.env.PORT} was released, exiting with code ${exitCode}`);
- process.exit(exitCode);
- })
- .catch((error) => {
- console.error(`Error waiting port ${appOptions.env.PORT} to be released, exiting with code ${exitCode}`);
- console.error(error);
- process.exit(exitCode);
- });
- }
- });
- processes.push(proc);
-}
-
-function startApp(callback) {
- startProcess(
- {
- name: 'Meteor App',
- command: 'node',
- params: ['/tmp/build-test/bundle/main.js'],
- // command: 'node',
- // params: ['.meteor/local/build/main.js'],
- waitForMessage: appOptions.waitForMessage,
- options: {
- cwd: srcDir,
- env: extend(appOptions.env, process.env),
- },
- },
- callback,
- );
-}
-
-function startChimp() {
- startProcess({
- name: 'Chimp',
- command: 'npm',
- params: ['test'],
- // command: 'exit',
- // params: ['2'],
- options: {
- env: Object.assign({}, process.env, {
- NODE_PATH: `${process.env.NODE_PATH + path.delimiter + srcDir + path.delimiter + srcDir}/node_modules`,
- }),
- },
- });
-}
-
-function chimpNoMirror() {
- appOptions.waitForMessage = 'SERVER RUNNING';
- startApp(function () {
- startChimp();
- });
-}
-
-chimpNoMirror();
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 (
-