* Migrate feature/wrangler to mono-repo
* Add wrangler files
* Fix linters, types, etc
* Fix snapshots
* Fix playwright
* Fix pipelines
* Fix more pipeline
* Fixes for pipelines
* More changes for pipeline
* Fix types
* Add support for a feature flag, but leave it defaulted on for spinwick usage for now
* Update snapshot
* fix js error when removing last value of multiselect, support CSV marshaling to string array for textsetting
* Fix linter
* Remove TODO
* Remove another TODO
* fix tests
* Fix i18n
* Add server tests
* Fix linter
* Fix linter
* Use proper icon for dot menu
* Update snapshot
* Add Cypress UI tests for various entrypoints to move thread modal, split SCSS out from forward post into its own thing
* clean up
* fix linter
* More cleanup
* Revert files to master
* Fix linter for e2e tests
* Make ForwardPostChannelSelect channel types configurable with a prop
* Add missing return
* Fixes from PR feedback
* First batch of PR Feedback
* Another batch of PR changes
* Fix linter
* Update snapshots
* Wrangler system messages are translated to each user's locale
* Initially translate Wrangler into system locale rather than initiating user
* More fixes for PR Feedback
* Fix some server tests
* More updates with master. Fixes around pipelines. Enforce Enterprise license on front/back end
* Add tests for dot_menu
* More pipeline fixes
* Fix e2etests prettier
* Update cypress tests, change occurrences of 'Wrangler' with 'Move Thread'
* Fix linter
* Remove enterprise lock
* A couple more occurrences of wrangler strings, and one more enterprise lock
* Fix server tests
* Fix i18n
* Fix e2e linter
* Feature flag shouldn't be on by default
* Enable move threads feature in smoke tests (#25657)
* enable move threads feature
* add @prod tag
* Fix move_thread_from_public_channel e2e test
* Fix e2e style
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: yasserfaraazkhan <attitude3cena.yf@gmail.com>
* Move notification preferences modal to new UI
* fix lint issue
* fix i18n
* fix unit test
* fix type issue and lint errors
* fix test case
* move common components to widget modals dir
* fix css issue
* feedback changes
* fix lint and i18n issues
* more feedback changes
* fix issue with mobile notification ui
* fix test
* clean up
* remove name
* fix test
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
- Adds a new section under settings/notifications for adding custom multi-word keywords that get highlighted without notification
- Adds a new classname for highlighting words although the styling is the same as mentions highlights
- Added a few components to the ReduxFromProps pattern
- Adds supported type for the hook of PluginComponent type
- Add upsell for highlight without notification
- Moved 'setting_item.tsx' to the components folder
- Improved prop names and function structure for setting_item, setting_item_max and setting_item_min
- Moved 'toggle_modal_button.tsx' to the components folder
- Removed t and utility messages from a few components
- Fixed bug where the tooltip was not getting rendered on restrictedButtons
- Improved the mobile view of the settings modal
- Adds E2E for the feature
* Rework some of PR24647
* Store MM_LICENSE to .env.server file
* Remove legacy network setup
* Fixes, generate docker-compose and env files in one place
* Simplify templating mechanism for server.yml
* Fix race condition for dashboard start
* Fix websockets for local debugging
* Fix: make webhook-interaction work again
* Simplify and fix dashboard&cloud configuration, formatting fix
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* Remove all occurrences of ExperimentalTimezone in /server
This removes all uses of ExperimentalTimezone and makes all conditions using this setting being either removed (== false) or always used (== true)
* Remove timezone parameter for getChannelMemberByGroup
As timezone is always enabled this function no longer has a second parameter. The endpoint will always be called with includeTimezones set to true
* Remove all uses of ExperimentalTimezone in webapp
All conditions dependent of this are adjusted to always be true if experimentalTimezone should be true and vice versa
* Change all tests checking for correct usage of ExperimentalTimezone
As this parameter is no longer used, the tests which check for correct behaviour of this is no longer needed
* Fix type errors
Tests regarding types does now pass
'npm run check-types' will run successfully
* fix lint issues
Fix all current lint errors and now lint test goes through
* Fix test regarding profile popover
enableTimezone now is gone and all profile_popover.test.tsx can run successfully.
Added state.entities.users.profiles[] as it before threw an error without it.
* Fix tests where "April 1 2019" was changed to "April 01 2019"
Now it will show "April 1 2019" and "timeZone" will only show if its other than empty ("").
* Fix test where date was set to NaN
Now date will show correctly and will not be NaN
* fix minor test case that failed before
* fix linting in server
* Delete tests that are not valid with timeZoneEnabled removed
tests in advanced_create_comment and advanced_create_post had timeZoneEnabled
set to false as default. The tests that use this are now changed to once which are meant to have timeZoneEnabled set to true.
Adjust jest function in advanced_create_post to get correct stacktrace
* Parameter deleted
isTimeZoneEnabled is always true and therefore the parameter can be deleted
* adjust to prettier standard
* Remove all occurrences of ExperimentalTimezone in /server
This removes all uses of ExperimentalTimezone and makes all conditions using this setting being either removed (== false) or always used (== true)
* Remove timezone parameter for getChannelMemberByGroup
As timezone is always enabled this function no longer has a second parameter. The endpoint will always be called with includeTimezones set to true
* Remove all uses of ExperimentalTimezone in webapp
All conditions dependent of this are adjusted to always be true if experimentalTimezone should be true and vice versa
* Change all tests checking for correct usage of ExperimentalTimezone
As this parameter is no longer used, the tests which check for correct behaviour of this is no longer needed
* Fix type errors
Tests regarding types does now pass
'npm run check-types' will run successfully
* fix lint issues
Fix all current lint errors and now lint test goes through
* Fix test regarding profile popover
enableTimezone now is gone and all profile_popover.test.tsx can run successfully.
Added state.entities.users.profiles[] as it before threw an error without it.
* Fix tests where "April 1 2019" was changed to "April 01 2019"
Now it will show "April 1 2019" and "timeZone" will only show if its other than empty ("").
* Fix test where date was set to NaN
Now date will show correctly and will not be NaN
* fix minor test case that failed before
* fix linting in server
* Delete tests that are not valid with timeZoneEnabled removed
tests in advanced_create_comment and advanced_create_post had timeZoneEnabled
set to false as default. The tests that use this are now changed to once which are meant to have timeZoneEnabled set to true.
Adjust jest function in advanced_create_post to get correct stacktrace
* Parameter deleted
isTimeZoneEnabled is always true and therefore the parameter can be deleted
* adjust to prettier standard
---------
Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
* migrate saml_commands.js to typescript & added comments & added function used by saml_commands from common_login_commands.js to the common_login_commands.d.ts file
* update(saml_commands.ts): added the TestSettings and SamlUser interface
* update(cypress/tests/support/saml_commands.ts): enhance function header comments
* upgrade cypress and test server config
* fix checks to lint and types
* fix CloudSettings and upgrade packages to latest
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* adding group members to channel initial commit
* adding group to channel functionality along with add new team members
* fixing circular dependency
* fixing e2e and other optimizations
* adding e2e tests for adding group members to channels
* cypress lint
* fixing comments
* adding count to button
* improvements
* adjusting some stuff from PR comments
* remove ability to add user to team, update message for non-team members
* remove adding to team from add groups functionality
* update misspelled variable
* lint and unit test fixes
* add tests, cleanup
* lint fix
* revert package-lock.json
* fixes for cypress tests
* rename TeamInviteBanner to TeamWarningBanner, since invites are no longer allowed
* update for warning
* lint fixes
* cleanup
* fix failing e2e tests
* update messages to not use markdown
---------
Co-authored-by: Scott Bishel <scott.bishel@mattermost.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
In system console > compliance export, if we set the radio button
from false to true. It would enable the "Run export now" button
as well. This would actually allow the user to create a job
without enabling compliance export.
As a result, there would be a job entry which would never run
because the config setting was never enabled.
To fix this, we don't enable/disable the button until the config
is actually saved.
https://mattermost.atlassian.net/browse/MM-53736
```release-note
NONE
```
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* MM-53989 Update to Node 18 and NPM 9
* MM-53989 Remove skip_integrity_check.js
* Force e2e-test/cypress to use its version of TS for types package
* Update .nvmrc
* Update .nvmrc lineending
* Update server.override.yml
---------
Co-authored-by: M-ZubairAhmed <m-zubairahmed@protonmail.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
* [MM-32576] Text copied from Microsoft OneNote pastes as an image
* [MM-32576] Text copied from Microsoft OneNote pastes as an image (linter and tests fix)
* [MM-32576] Text copied from Microsoft OneNote pastes as an image (E2E tests fix: mock clipboardData.getData())
---------
Co-authored-by: Andrey Karavashkin <akaravashkin@stsoft.ru>
* add base for calling the endpoint
* add endpoint and handler
* update store and layers
* call the endpoint
* align types
* update app layers
* generate mocks
* complete handler
* finish store query
* add todos
* add ui for member count
* add selector
* add a todo
* add cache layer
* optimize calls in FE
* handle invalidation of the cache
* fix go style
* fix test
* use existing channel layer count
* fix import error
* delete unnecessary code
* write tests for channel cache layer
* fix testname
* fix mocks
* fix cache layer test
* fix a test
* really fix the test
* write more tests for server
* address PR comments
* remove comment
* rename more_channels to browse_channels
* fix style
* update snapshot
* add translations
* Revert "add translations"
This reverts commit 56476a5dabe357703ef02be9a38b3e88f5c8b1e7.
* add only related translations
* address PR review points
* add test
* fix test
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* Revert "Revert "[MM-52547] Include current user profile in every redux action (#23219)""
This reverts commit 8f96888b1a06716d41e27e7f5e76fa193b0ac86d.
* Revert "Revert "[MM-52546] webapp/channels : Update current user and status on WebSocket reconnect (#23071)""
This reverts commit 69ee162a6e3d08f23f14628785b1e4f554259ea4.
* MM-53647 Fix overwriting the current user with sanitized data
* update more_channels for ui and show all channels
* update searchable channel list
* fix style
* fix tests
* fix style for delete icon
* fix failing tests
* fix style
* remove dot
* remove header button
* put back header button
* Fix duplicate keys in CombinedSystemMessage component (#23507)
* MM-52873 : Switch to npm's 'reselect' for Playbooks (#23396)
* Enable golangci-lint (attempt 2) (#23517)
This time we are just using the Makefile command
to see if that makes a difference
```release-note
NONE
```
* MM-52888 Always load users mentioned in message attachments (#23460)
Co-authored-by: Mattermost Build <build@mattermost.com>
* Prepare: run E2E smoketests with GitHub actions (#23301)
- Port E2E testing scripts from cypress-ui-automation
- Move server to docker-compose, move E2E images to ecrpublic
* Integrate General channel renaming, fixes
- Add local automation-dashboard
- Add readme
- Add E2E smoketests
- Bump postgres to 12
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: Saturnino Abril <saturnino.abril@gmail.com>
Co-authored-by: Antonis Stamatiou <stamatiou.antonis@gmail.com>
* MM-47064/MM-34345/MM-47072 Remove inheritance from Suggestion components and migrate to TS (#23455)
* MM-47064 Remove inheritance from Suggestion components
* Address feedback
* Fix users without DM channels not appearing in the channel switcher
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* MM-52544 Fix missing reply bar mention highlight (#23534)
* MM-52513: fixes deleting a reply (#23177)
* MM-52513: fixes deleting a reply
Currently when we receive a WS event for a reply being deleted we might
accidentally push it to a wrong team's store. This might happen if the
thread is already loaded in store and we are viewing another team.
In that case we were fetching the thread from the API using the team id
of the current team. The API returns the thread, even though the team id
is not the one which the thread belongs to.
This commit is fixing the above issue by getting the team id in which
the thread belongs to, or current team id in the case of DM/GM messages,
and using that to fetch the thread from the API.
PS: the fetching is needed since we don't send a thread_update WS event
upon deleting a reply, and we need to get the new participants list.
* Fixes team id on another occasion
* Refactors a bit
* Reverts returning empty string as team id
* Refactor a bit to pass the post as argument
---------
Co-authored-by: Kyriakos Ziakoulis <koox00@Kyriakoss-MacBook-Pro.local>
Co-authored-by: Kyriakos Ziakoulis <koox00@192.168.2.3>
Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
* Avoid calling the user count query in future if we get a count > 0 (#23545)
* Avoid calling the user count query in future if we get a count > 0
* re-adding mock session to avoid adding the old mitigation in future
* adjustments based on feedback
* MM-52365 - fix JS error banner (#23501)
* MM-52365 - fix js error banner
* add null type to bindings as an optional type
* Make used of typed atomic.Pointer (#23550)
* Make save_post_spec less affected by other E2E tests (#23541)
* Revert "Prepare: run E2E smoketests with GitHub actions (#23301)" (#23553)
This reverts commit 68be3a6bcd.
* adding debug log when executing query (#23559)
* server/docker-compose.yml: updates to run HA in local after monorepo (#23552)
* [MM-52919] Remove all uses of window.desktop.version from webapp (#23558)
Co-authored-by: Mattermost Build <build@mattermost.com>
* [MM-21096] webapp: Migrate "components/suggestion/search_channel_with_permissions_provider.jsx" to Typescript (#23323)
* migrate to ts
* linting
* fix test
* refactor
* Remove accidental comments from merge
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
* fix server ci after renaming the project (#23576)
* Temporarily let AdvancedLoggingConfig take precedence over AdvancedLoggingJSON (#23578)
* Temporarily let AdvancedLoggingConfig take precedence over AdvancedLoggingJSON
* Repo name ci fixes (#23569)
* mattermost-server -> mattermost
* mattermost-server -> mattermost
* Empty-Commit
* Empty-Commit
* Empty-Commit
---------
Co-authored-by: Antonis Stamatiou <stamatiou.antonis@gmail.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: Akis Maziotis <akis.maziotis@mattermost.com>
* MM-51585 : Fix duplicated date separator in center channel when Pinned posts RHS is open (#23068)
* Fix references from 'packages/*' to 'platform/*' in READMEs (#23498)
* [MM-52541] Mark files as deleted along with thread (#23226)
* mark thread files as deleted
* add missing check
* improve query
* Stopped rendering post preview if post is deleted
* Fixed lint error
* Fixed test
* updated types
* Removed deleted post from other post's embed data
* Added tests
* Apply suggestions from code review
Co-authored-by: Daniel Espino García <larkox@gmail.com>
* lint fix
---------
Co-authored-by: Konstantinos Pittas <konstantinos.pittas@mattermost.com>
Co-authored-by: Harshil Sharma <harshilsharma63@gmail.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: Harshil Sharma <18575143+harshilsharma63@users.noreply.github.com>
Co-authored-by: Daniel Espino García <larkox@gmail.com>
* MM-52476 Fix guest users access to playbooks. (#23279)
* Fix guest users access to playbooks.
* Fix guest access.
* Add guests list restriction.
* Update PULL_REQUEST_TEMPLATE.md to include Jira ticket for contributors (#23589)
* [MM-52836] : Migrate "components/admin_console/admin_definition_constants.jsx" to TypeScript (#23566)
* MM-52297 Fix reactions disappearing with search open and add testing utilities (#23510)
* MM-52297 Fix reactions disappearing when search is open
* Add unit tests and extra utilities
* Fix typing issue
* MM-53002: Fix ESR CI (#23599)
* Do not use the mattermost path
The /mattermost path is used by the image and it seems to conflict with
the container running the binary
* Use a regular machine in the esr-upgrade-diff job
* Add missing space
* [MM-52955] Fix panic for not found posts (#23561)
* [MM-52973] Avoid thundering herd problem in IsFirstUserAccount (#23549)
* [MM-45802] Clear CRT notification on deleted reply (#23568)
* reduce the counter on post deletion
* add test
* change translations
* fix collecting mentions for DMs
* add translation texts
* extract logic for getting mentions
* send WS event
* add e2e tests
* tidy mod
* WIP
* Deleting notification async
* Fixed a unit test
* Added more tests
* Updated i18n
* CI
* mattermost-server -> mattermost
* mattermost-server -> mattermost
---------
Co-authored-by: Konstantinos Pittas <konstantinos.pittas@mattermost.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
* Includes mmctl into the mono-repo (#23091)
* Includes mmctl into the mono-repo
* Update to use the new public module paths
* Adds docs check to the mmctl CI
* Fix public utils import path
* Tidy up modules
* Fix linter
* Update CI tasks to use the new file structure
* Update CI references
* [MM-30432]: Allow users to specify different desktop notification sounds per channel (#21671)
* [MM-44165]: When Help link is left blank Help Resources option should not be visible in the help menu (#23609)
* Clean up at .github due to repo rename (#23580)
* update .github after repo rename
* update
* Update PULL_REQUEST_TEMPLATE.md
---------
Co-authored-by: M-ZubairAhmed <m-zubairahmed@protonmail.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
* MM-52819 : "medical_symbol", "male_sign" and "female_sign" emojis are broken (#23538)
* [MM-52979]: Remove code around abandoned MUI modal migration (#23556)
* Re-export all React Testing Library functions (#23522)
* Fix panic if JSON null value is passed as channel update (#23629)
* MM-52818 - create config setting to enable/disable playbooks product (#23508)
* create config setting to enable/disable playbooks product
* fix to config name
* fix typo
* revert changes to package-lock.json
* update name of test
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* [MM-52926] Deprecating work templates (#23466)
Co-authored-by: Mattermost Build <build@mattermost.com>
* [MM-52839]: Migrate "components/admin_console/remove_file_setting.jsx" to Typescript (#23565)
* [MM-52833]: Migrate "components/admin_console/multiselect_settings.jsx" to Typescript (#23542)
* [MM-52835]: Migrate "components/admin_console/settings_group.jsx" and tests to Typescript (#23563)
* fix typo in index name for idx_teammembers_create_at (#23632)
* [MM-49989] Pass a context.Context to Client4 methods (#22922)
* Migrate all method in model/client4.go to accept a context.Context
* Fix th.*Client
* Fix remaining issues
* Empty commit to triger CI
* Fix test
* Add cancellation test
* Test that returned error is context.Canceled
* Fix bad merge
* Update mmctl code
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* Service environment (#23443)
* fix fileutils.TestFindFile on MacOS
* introduce model.ExternalServiceEnvironment
* pick license public key from external service env
* pick Stripe public key from external service env
* pick Rudder key from external service env
* configure Sentry DSN from external service env
* always log external_service_environment, Unsetenv
* clear faked BuildEnv, improve logging
* strip out unset GOTAGS
* fix Sentry tests
* simplify to just ServiceEnvironment
* relocate ServiceEnvironment in client config
* initialize CWS URLs based on service environment
* unset rudder key for boards dev
* harden service environment to avoid accidental production
* fix TestSentry again
* fix DEFAULT -> ENTERPRISE
* s/dev/test when naming playbooks rudder key
* simplify boards rudder key switch
* use uniform rudderKey variable names
* retain compatibility with existing pipeline
* reduce to just production/test
* unit test with valid test license
* simplify Playbooks telemetry initialization
* restore dev service environment
* emit ServiceEnvironment when running e2e tests
* [MM 22957] webapp a11y: fix sso btns focus issue (#23326)
* make suggested changes
* added form tag and removed event handler
* fix snapshot
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* Upgrade docker CI image to 23.0.1 (#23664)
Automatic Merge
* MM-52995: Fix opening DM/GM thread from thread footer (#23579)
* MM-52487: fix more playbooks tests (#23475)
* fix playbooks/channels/rhs/template_spec.js
* fix playbooks/channels/update_request_post_spec.js
* fix playbooks/runs/rdp_rhs_runinfo_spec.js
* fix playbooks/runs/rdp_rhs_statusupdates_spec.js
* remove enableexperimentalfeatures flag in e2e tests
* rdp_main_header_spec: simplify channel loaded assertion
* playbooks rhs participants: fix infinite fetch loop
* improved onboarding skipping
* simplify participants fetching
* Support json.RawMessage in configuration env overrides (#23610)
* support json.RawMessage in env overrides
* update more_channels for ui and show all channels
* remove header button
* put back header button
* [MM-52979]: Remove code around abandoned MUI modal migration (#23556)
* fix import
* update snapshot
* Update e2e-tests/cypress/tests/integration/channels/enterprise/accessibility/accessibility_modals_dialogs_spec.js
* fix e2e tests
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
Co-authored-by: M-ZubairAhmed <m-zubairahmed@protonmail.com>
Co-authored-by: Agniva De Sarker <agnivade@yahoo.co.in>
Co-authored-by: mvitale1989 <mvitale1989@hotmail.com>
Co-authored-by: Saturnino Abril <saturnino.abril@gmail.com>
Co-authored-by: Antonis Stamatiou <stamatiou.antonis@gmail.com>
Co-authored-by: Kyriakos Z <3829551+koox00@users.noreply.github.com>
Co-authored-by: Kyriakos Ziakoulis <koox00@Kyriakoss-MacBook-Pro.local>
Co-authored-by: Kyriakos Ziakoulis <koox00@192.168.2.3>
Co-authored-by: Ben Cooke <benkcooke@gmail.com>
Co-authored-by: Pablo Andrés Vélez Vidal <pablovv2012@gmail.com>
Co-authored-by: Ben Schumacher <ben.schumacher@mattermost.com>
Co-authored-by: Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com>
Co-authored-by: Devin Binnie <52460000+devinbinnie@users.noreply.github.com>
Co-authored-by: Sai Deepesh <saideepesh000@gmail.com>
Co-authored-by: Doug Lauder <wiggin77@warpmail.net>
Co-authored-by: Harshil Sharma <18575143+harshilsharma63@users.noreply.github.com>
Co-authored-by: Akis Maziotis <akis.maziotis@mattermost.com>
Co-authored-by: Hideaki Matsunami <mahaker@users.noreply.github.com>
Co-authored-by: Konstantinos Pittas <konstantinos.pittas+github@gmail.com>
Co-authored-by: Konstantinos Pittas <konstantinos.pittas@mattermost.com>
Co-authored-by: Harshil Sharma <harshilsharma63@gmail.com>
Co-authored-by: Daniel Espino García <larkox@gmail.com>
Co-authored-by: Christopher Speller <crspeller@gmail.com>
Co-authored-by: Tejas Karelia <tejas.karelia17@gmail.com>
Co-authored-by: Alejandro García Montoro <alejandro.garciamontoro@gmail.com>
Co-authored-by: Miguel de la Cruz <miguel@mcrx.me>
Co-authored-by: KyeongSoo Kim <gaganso71@korea.ac.kr>
Co-authored-by: Matheus <20505926+MattSilvaa@users.noreply.github.com>
Co-authored-by: Scott Bishel <scott.bishel@mattermost.com>
Co-authored-by: Julien Tant <785518+JulienTant@users.noreply.github.com>
Co-authored-by: Karan Mishra <karan.m2704@gmail.com>
Co-authored-by: Judy Hanson <106325339+Esterjudith@users.noreply.github.com>
Co-authored-by: Jesse Hallam <jesse.hallam@gmail.com>
Co-authored-by: Caleb Roseland <caleb@calebroseland.com>
* Remove build references
* Remove playbooks webapp and server, and add the prepackaged plugin
* Remove translations
* Add ProductSettings to the playwright type
* Restore playbooks as a prepackaged plugin for cypress e2e tests
* fix fileutils.TestFindFile on MacOS
* introduce model.ExternalServiceEnvironment
* pick license public key from external service env
* pick Stripe public key from external service env
* pick Rudder key from external service env
* configure Sentry DSN from external service env
* always log external_service_environment, Unsetenv
* clear faked BuildEnv, improve logging
* strip out unset GOTAGS
* fix Sentry tests
* simplify to just ServiceEnvironment
* relocate ServiceEnvironment in client config
* initialize CWS URLs based on service environment
* unset rudder key for boards dev
* harden service environment to avoid accidental production
* fix TestSentry again
* fix DEFAULT -> ENTERPRISE
* s/dev/test when naming playbooks rudder key
* simplify boards rudder key switch
* use uniform rudderKey variable names
* retain compatibility with existing pipeline
* reduce to just production/test
* unit test with valid test license
* simplify Playbooks telemetry initialization
* restore dev service environment
* emit ServiceEnvironment when running e2e tests