Compare commits

..

91 Commits

Author SHA1 Message Date
Uladzimir Havenchyk
f55dc0d3b5 chore: add single dev command to run before push 2025-06-19 16:49:42 +03:00
Nemanja Glumac
1b75ad7c5a Resolve a circular dependency in collections (#59685) 2025-06-19 13:27:05 +02:00
Alex Yarosh
51a7fdb409 docs - fix links (#59760) 2025-06-19 07:12:35 -04:00
Mahatthana (Kelvin) Nomsawadi
15dcbf0b7c fix(sdk): Fix flickered "Question new not found error" (#59696)
* Prevent flickered no question "new" found error

* Refix the bug
2025-06-19 11:50:35 +01:00
Timofey Kachalov
5703bc13d1 Apply proper SDK styling to the SortableList drag overlay (#59713) 2025-06-19 14:04:22 +04:00
Alex Yarosh
3f3b925eed redirects for category pages (#59579) 2025-06-18 21:31:50 -04:00
Alex Yarosh
6fe8a78990 docs: edit cards on dashboards (#59730)
* Update introduction.md

* Update docs/dashboards/introduction.md

Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>

* Update introduction.md

---------

Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2025-06-18 19:59:39 -04:00
Ryan Laurie
6a5566453f remove duplicate findRequests helper (#59726) 2025-06-18 16:58:38 -06:00
Ryan Laurie
65420ff3fd Update People + Groups Nav (take 2) (#59710)
* update people nav

* type fix

* use modern upsell

* fix e2e test, cleanup

* wider pages

* update tests

* update unit tests

* update titles and nav

* limit description width

* little updates
2025-06-18 22:56:19 +00:00
Ryan Laurie
15306c17e7 Light facelift for Tools + Troubleshooting (#59668) 2025-06-18 22:55:12 +00:00
bryan
a5acb871bb minor formatting (#59746) 2025-06-18 16:51:58 -06:00
Nathan Voxland
b10b0dce4b Make sure no inactive or archived tables and dashboards are shown in the popular items result (#59636) 2025-06-18 16:37:27 -05:00
Edward Paget
060ca28cc3 chore: remove unused partial permission checks (#59718)
These checks used to be used for the Database model's permission, but
are no longer after the move to the data permissions model
2025-06-18 20:44:23 +00:00
John Swanson
d2448daf08 Localize the trash name on memoized collection (#59662)
* Localize the trash name on memoized collection

* just defer translation on the `trash-collection`

When we're getting it explicitly rather than for all collections - for
the sake of speed here, since this was causing some issues with
serialization.

* parallelize

* docstring
2025-06-18 20:14:11 +00:00
Nick Fitzpatrick
c6a55b0f90 Fix re-rendering error modal on collection upload (#59073)
* fix re-rendering error modal on collection upload

* migrating file upload error modal, adding e2e
2025-06-19 01:36:50 +05:30
bryan
7c86d9d269 Fix docs workflow trigger action syntax (#59723) 2025-06-18 18:24:42 +00:00
bryan
9b42a0ae7b modify trigger to send source + target branches (#59575) 2025-06-18 12:03:11 -06:00
Ryan Laurie
610ee2e900 Revert "Update People + Groups Nav (#59363)" (#59703)
This reverts commit 50cf80b158.
2025-06-18 23:29:38 +05:30
Nick Fitzpatrick
658c1e4704 Small UI Fixes (#59644) 2025-06-18 22:05:07 +05:30
Nicolò Pretto
44e0478525 make database widget keyboard friendly (#59468)
* make database widget keyboard friendly

* restore role=option, as it's the correct one inside a listbox

* add unit test
2025-06-18 16:32:56 +00:00
Nicolò Pretto
b13dd15c41 embedding setup: prefill user details and update settings (#59694)
* update settings set in the processing step, closes EMB-499 and EMB-500

* EMB-486 prefill user details
2025-06-18 17:33:09 +02:00
Brad Anderson
03cf63892c Closes VIZ-162 - Stacked bar chart with mixed negative and positive values creates nonsensical percentage breakdowns in tooltips (#59138)
* VIZ-162 Updates percent calculation for stacked bar charts’ tooltips for bars with a mix of positive and negative values. Positive values are a percentage of the positive total and negative values are a percentage of the negative total.

* VIZ-162 Updates e2e tests to verify new stacked bar chart behavior
2025-06-18 10:02:28 -04:00
Timofey Kachalov
40f15d3ce7 Render Mantine and Echarts tooltips in a proper portal container for SDK (#59513) 2025-06-18 17:16:42 +04:00
Oleksandr Solovyov
f5b5de0dbd shorten filename to not overflow byte limit in some filesystems (#59625)
shorten filename to not overflow byte limit in some filesystems

in particular ext4 limits file name by 255 *bytes*, not chars, which is doable by using 3-byte chars

fixes #59233
2025-06-18 16:12:56 +03:00
Ryan Laurie
50cf80b158 Update People + Groups Nav (#59363) 2025-06-18 12:58:34 +00:00
Nicola Mometto
40d2b1bfa1 increment failed-fingerprints rather than the throwable object (#59627)
* increment failed-fingerprints rather than the throwable object

* fix: continue? needs updated stats
2025-06-18 11:18:50 +01:00
Uladzimir Havenchyk
bc4750a562 fix: css layout of time grouping errors (#59658) 2025-06-18 10:27:16 +03:00
Ryan Laurie
4523266d6c update metabot nav (#59440) 2025-06-18 00:40:27 +00:00
appleby
46fc871718 Add e2e reproduction for #35067 (#59584)
* Add e2e reproduction for #35067

Closes #35067

* Inline single-use query
2025-06-17 14:33:05 -07:00
Nicola Mometto
8150ee9bbd perf: filter json fields first (#59631) 2025-06-17 15:25:39 -04:00
Stas Gavrylov
4f376c4ce5 Fix storybook docs examples rendering (#59639) 2025-06-17 22:03:04 +03:00
Jeff Bruemmer
8540e3cc26 dev notes (#59643) 2025-06-17 14:51:45 -04:00
Sloan Sparger
3220b41358 [Metabot] Update the metabot team (#59649)
* update the metabot team

* remove trailing comma
2025-06-17 13:30:15 -05:00
Nathan Voxland
e00e7d8668 Clear checksums when rolling back from 55 (#59570) 2025-06-17 13:13:12 -05:00
Nathan Voxland
99dbd78088 Correct saving of pivot card metadata (#59283) 2025-06-17 13:03:41 -05:00
lbrdnk
7437bfc147 Add coerced-string-nums-dataset (#59568)
* Add coerced-string-nums-dataset

* Adjust coercion strategy
2025-06-17 19:33:19 +02:00
Nicolò Pretto
f67b4aae0e EMB-501 and EMB-503, review wording on the last step and flip order of code and preview (#59612)
* emb-501: Review wording so that it's not perceived as working

* EMB-503: Flip order of code and preview

* update top sentence
2025-06-17 18:43:05 +02:00
Alex Yarosh
3a9e1d2380 Update metrics.md (#59629) 2025-06-17 12:04:21 -04:00
Nathan Voxland
4e98918192 Support passing an environment file to jar-download (#59574) 2025-06-17 09:15:50 -05:00
Edward Paget
ab5465ec9b fix: card before update to not always force update (#59559) 2025-06-17 08:26:25 -05:00
Stas Gavrylov
653d9e616e Add TZ option to Cypress config to stabilize local testing (#59453) 2025-06-17 14:43:10 +03:00
Nicolò Pretto
21c90d92c3 set embedding-homepage visible as soon as we can (#59476)
* set embedding-homepage visible as soon as we can

* cleanup test

* reorder because it makes more sense

* Update frontend/src/metabase/setup/components/EmbeddingSetup/steps/UserCreationStep.tsx

Co-authored-by: Phoomparin Mano <poom@metabase.com>

---------

Co-authored-by: Phoomparin Mano <poom@metabase.com>
2025-06-17 11:49:59 +02:00
Mahatthana (Kelvin) Nomsawadi
6165712a53 Ignore ?locale search param in result downloads (#59243)
* Fix can't download static SQL question\

when a parameter only expects a single value

* Ignore `?locale` search param in result downloads

* Finish the comment

* Fix public action tests failing

* Address review: Call side-effect explicitly

* Preserve same behavior

* Flip boolean to make it easier to read

* Improve boolean condition

* revert the use of `isEmbeddingSdk` env until #59602 is fixed

* Add missing condition to retain the same behavior

* Fix more failing tests duh!

* Fix should sync logic for real this time.
2025-06-17 10:34:44 +01:00
Sloan Sparger
269009d1f3 [Metabot] Analyze chart improvements (#59449) 2025-06-17 06:44:05 +00:00
Thomas Schmidt
aa5dab0b8c Bot 188 sql features in chat (#59382)
* Use Metabot for FixSQL Button

* Enrich context with sql schema if user is viewing a native query (or the editor)
2025-06-17 07:53:08 +02:00
John Swanson
d710fb129f fix a flake (#59424)
just no reason to hardcode an ID like this.
2025-06-16 14:28:07 -07:00
Noah Moss
36573b38fa support pivots with between 31 and 63 breakouts (#59494) 2025-06-16 16:22:28 -04:00
Uladzimir Havenchyk
c7fb35e7fc test: fix flaky test (#59547)
* test: fix flaky test

* one more attempt

* debug

* one more time

* one more time

* one more time
2025-06-16 23:05:31 +03:00
bryan
558af5e372 add 'mage alias' fix help w/o bb installed (#59322) 2025-06-16 13:57:12 -06:00
Luis Paolini
537d4169ee Update upgrading-metabase.md (#58477)
* Update upgrading-metabase.md

Adding a note about upgrading between major versions

* Update upgrading-metabase.md

* Apply suggestions from code review

Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>

---------

Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2025-06-16 14:54:12 -04:00
Jacob Joseph
5846360d58 Update table.md (#59490)
Fixed wrong header level (was h2, should be h3)
2025-06-16 13:23:04 -04:00
lbrdnk
4410db3aea Fix searching for uuid column values in dashboard filter (#59272)
* Fix searching for uuid column values in dashboard filter

* Adjust so only the uuid fields are remapped for search

* Address review remarks
2025-06-16 18:51:56 +02:00
Alex Yarosh
59326bee8c update link (#59557) 2025-06-16 12:45:25 -04:00
Sébastien
f463fa21bc Closes VIZ-917 two data points for one series (second try) (#59546)
* trying

* no comment
2025-06-16 18:07:47 +02:00
Brad Anderson
a1cf3cbe6b Reverts VIZ-1080, needs more time for review (#59550)
* Reverts VIZ-1080, needs more time for review

* Update Loki Snapshots

---------

Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-06-16 11:41:07 -04:00
Raphael Krut-Landau
010c5510fc Fix padding in Heading visualization component (#59555)
This fixes a bug where the padding on a Heading would disappear when it was edited.

Before:

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/utGnP2ljFMMNOgi82vVn/b3cd934b-320b-4202-9619-1e1cad7b046d.png)

After:

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/utGnP2ljFMMNOgi82vVn/cc35902e-309a-4b02-8f6b-5d14295015e9.png)
2025-06-16 11:35:51 -04:00
Jeff Bruemmer
ba4b0a30c8 docs - note on db routing (#59549)
* note on db routing

* note on connection swapping

* add warning

* edits

* revisions
2025-06-16 11:13:23 -04:00
Ngoc Khuat
dc92ed99e3 Fix v_alerts incorrectly classify by the minute and custom schedule (#58468) 2025-06-16 14:45:00 +00:00
Nicolò Pretto
3e9ef060ed MVP of Embedding setup flow (#58853)
* Add embedding setup flow with multi-step wizard. Add EmbeddingSetup component with welcome, data connection, processing, and final steps. Create setupEmbeddingSettings action for configuring embedding and JWT. Add CodeSnippet component for displaying code examples. Set up proper routing for the embedding setup flow.

* Update embedding setup flow to actually create the database and handle errors. Update DataConnectionStep to display error messages.

* Fix linter errors in EmbeddingSetup component and setupEmbeddingSettings action

* Setup embedding flow: Remove SchemaSelectionStep, fix imports and types

* Fix linter errors and finalize embedding setup flow with navigation and original content restored

* Add EmbeddingSetupWrapper to provide context for embedding setup flow

* Fix table fetching in TableSelectionStep to use metadata endpoint

* Implement model and dashboard creation in ProcessingStep using /api/card endpoint

* Fix useEffect and useCallback dependencies and import order in TableSelectionStep

* working flow

* small tweaks

* sidebar with steps

* update snippet to use iframe embed

* better "Need assistance" positioning

* fix and refactor database and tables steps

* style final step

* bottom part of /final

* done step and idk i'm tired

* remove chevron and add syntax highlight as per feedback on the loom

* fix user not being loaded

* welcome step and final step

* remove dead code

* add query builder

* more stuff

* add comment about keepMounted

* set the proper settings during setup, fixes EMB-462 and EMB-461

* hide DatabaseStatus, fixes EMB-458

* "do later" -> link to /, closes EMB-456

* attempt at setting a max width, maybe closes EMB-454

* fix icons

* fix scrollbar on tall pages

* to refactor: wip link between setup and onboarding

* fix jumpy layout while moving across pages

* fix DatabaseStatus showing up after landing to the homepage

* Revert "to refactor: wip link between setup and onboarding"

This reverts commit b4c19da37d.

* wip user step

* revert changes to database status, we don't need those changes now that we're not in the routes that use the App component

* prevent going to setup/embedding if setup is already done

* table search

* restore original position of metabot to keep diff cleaner

* category + icon on search input

* restore routes structures

* add widht and height, fixes EMB-480

* remove "Need assistance" link, closes EMB-479

* change content in DoneStep, closes EMB-478

* removed /embed from the url

* empty set for search + layout adjustements, closes EMB-481

* removing things i commited by mistake

* locale selector, closes EMB-466

* cleanup unused code

* fix loading not being centered in table selection loading

* fix processingStatus i18n issue

* Remove undefined CSS custom property

* Revert "fix loading not being centered in table selection loading"

This reverts commit 8fda19338a.

* re-do the centering

* close EMB-473, refactor to be only one page

* move CodeSnippet in the file where it's used, it's not a generic
component for now

* Add a basic embedding onboarding E2E test (#59323)

* Add a basic E2E test

* Add missing import

* Finish assertions

* Wait for DB sync

* Hide DB sync status, so Cypress could click a button

* Fix test on CI

* Fix E2E after upstream change

* Some adjustment to make CI passes

* Wait for loader to disappear to avoid failing CI

* Simulate being on cloud

* Addresses review feedback

* fix sidebar steps, titles and visibility

* fix another wrong string

* Update frontend/src/metabase/setup/components/EmbeddingSetup/EmbeddingSetupSidebar.tsx

Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>

* address pr feedbback

* fix error ui in table selection

* add useForceLocaleRefresh to table step

* update label on test too

* more label updates

* Properly refetch database API

* Add DB sync retries assertion

* fix the retry of the database sync

---------

Co-authored-by: Kyle Doherty <5248953+kdoh@users.noreply.github.com>
Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
2025-06-16 16:20:31 +02:00
Riley Thompson
1d89072891 Add regression tests for clickhouse (#59348)
* add regression tests

* Add issue references

* make double comment test driver agnostic

* make tests more agnostic

* format

* make another test agnostic

* add prometheus metrics

* add driver query metrics test

* test against failed count

* move clickhouse native tests back, remove parallel from metrics query test

* fix kondo

* add todo attribution

* disable 0.8.4 broken tests, re-enable 0.8.6 broken tests
2025-06-16 10:16:58 -04:00
Uladzimir Havenchyk
35fa63c63a fix: allow dragging editor border to completely hide it (#59335)
* fix: allow dragging editor border to completely hide it

* add test

* cleanup

* add animation

* fix leftovers

* fix overflow
2025-06-16 12:13:09 +00:00
metamben
76da6d5382 Resolve visibility in query instead of filtering with mi/can-read? (#59360)
* Resolve visibility in query instead of filtering with mi/can-read?

---------

Co-authored-by: Mihael Konjevic <konjevic@gmail.com>
2025-06-16 12:09:22 +00:00
Romeo Van Snick
c3674747f4 Close table header popover with escape (#59262)
* Manually close popover on escape

* Add repro for metabase#55673

* Revert "Manually close popover on escape"

This reverts commit cce85f0882.

* Trap focus in click actions popover

* Remove unneeded closeOnEscape
2025-06-16 12:00:22 +02:00
Fraser
e537911bc3 Scroll element into view before checking visibility (#59531) 2025-06-16 20:37:49 +12:00
Timofey Kachalov
c21360e3bd Update the SDK version for the latest npm tag (#59532) 2025-06-16 08:31:56 +00:00
Timofey Kachalov
7ba6f246f3 Fix sample app dev bundle tests (#59511) 2025-06-16 12:13:50 +04:00
Jakub Chodorowicz
33fc7acca9 Dev-601-format-storybook-folders-with-prettier (#59190)
* Format with prettier .storybook folder

* Skip reformatting mockServiceWorker file

* Format storybook folders with prettier on pre-commit
2025-06-16 09:16:22 +02:00
Ryan Laurie
6d5393cfeb Settings Visual Updates (#59140)
* Routing + Nav

* Add SettingsSection everywhere

* Remove tabs from WhiteLabel pages

* Remove tabs from auth pages

---------

Co-authored-by: Fraser McIntosh <fraser@metabase.com>
Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-06-16 09:38:58 +12:00
Raphael Krut-Landau
0860a98a1e Support translation of user-generated content in statically embedded questions and dashboards (#56879) 2025-06-13 21:23:44 -04:00
Aleksandr Lesnenko
f040ca027c fix object id column size (#59505)
* fix object id column size

* Update Loki Snapshots

---------

Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-06-13 20:47:42 -04:00
appleby
876368b12d Add some tests for implicitly-joinable visible-columns (#59227)
* Add missing :ident to :model/products-and-reviews mock card

* Add tests for implicitly-joinable visible-columns

* Add more context and cross-reference the comment about implicit-self-join-test

* Put keyword first when looking up entries in lib.tu/mock-cards
2025-06-13 16:45:31 -07:00
Alex Yarosh
8b0cd97ab9 relativedatetime truncates (#59501) 2025-06-13 18:57:40 -04:00
Uladzimir Havenchyk
39b274db1b Native time groupings (#58180)
* process-query supports temporal-unit template tags in native queries (#57295)

The query processor understands temporal-unit template tags and can parse and compile
`{{mb.time_grouping('param', 'table.column')}}` appropriately.  This does not include lib or frontend support and this
feature is not yet usable outside of manually making a query and passing it to qp/process-query.

* Update metabase.lib.native to understand mb.time_grouping parameters (#57506)

This adds lib support for time_grouping parameters. To do that, it pulls out the parsing logic from the driver code and pulls it into lib, where both the driver and lib can use it. The frontend still doesn't support these parameters, so while you can technically type in and run a query with a time_grouping parameter, the frontend behaves oddly if you try.

* implement frontend for time grouping in native queries (#57849)

* Update metabase.lib.native to understand mb.time_grouping parameters

* move parse-param tests

* keep picky behavior of old tagfinding

* fix ns alias

* fix ns declaration for cljs

* add lib tests for finding function tags

* remove resurrected file

* fix rebased code

* fix linting

* update doc string

* fix modules

* implement frontend for time grouping in native queries

* fix modules

* fix validation bug

* update sidebar

* fix typecheck

* fix styles

* use correct icon

---------

Co-authored-by: William Zimrin <william@metabase.com>

* implement dashboard mapping to time grouping parameters (#57931)

* Update metabase.lib.native to understand mb.time_grouping parameters

* move parse-param tests

* keep picky behavior of old tagfinding

* fix ns alias

* fix ns declaration for cljs

* add lib tests for finding function tags

* remove resurrected file

* fix rebased code

* fix linting

* update doc string

* fix modules

* implement frontend for time grouping in native queries

* fix modules

* fix validation bug

* update sidebar

* fix typecheck

* fix styles

* implement dashboard mapping to time grouping parameters

* filter columns properly

* fixup

* fixup

* temporal-unit tags use variable targets

* fix backend tests

* use variable

* cleanup

* add handling for required params

* update copy and fix required toggle usage

---------

Co-authored-by: William Zimrin <william@metabase.com>

* tests for native query time grouping (#58091)

* Update metabase.lib.native to understand mb.time_grouping parameters

* move parse-param tests

* keep picky behavior of old tagfinding

* fix ns alias

* fix ns declaration for cljs

* add lib tests for finding function tags

* remove resurrected file

* fix rebased code

* fix linting

* update doc string

* fix modules

* implement frontend for time grouping in native queries

* fix modules

* fix validation bug

* update sidebar

* fix typecheck

* fix styles

* implement dashboard mapping to time grouping parameters

* filter columns properly

* fixup

* fixup

* temporal-unit tags use variable targets

* fix backend tests

* use variable

* cleanup

* add handling for required params

* update copy and fix required toggle usage

* reset default value if time grouping option is excluded from the list of available options

* add tests

* drop not planned test

---------

Co-authored-by: William Zimrin <william@metabase.com>

* add tests for mapping of native query to temporal unit parameter (#58161)

* rework tag editor sidebar and related files to typescript (#58283)

* revert default required logic (#58568)

* revert default required logic

* fix test

* add native query validation of time grouping syntax (#58426)

* add basic fe validation for native queries

* fixup

* add cljs function for validating native queries

* make validate function take a full query and work in cljs

* add backend/cljc tests for validate-native-query

* improved error messages for validate-native-query tests

* use a new dianostics method from lib

* fix clj linting

* update sidebar styling

* fix initial state

* adjust error styling

* fix tests and drop not valid anymore code

* fix linting

* favor first template tag found and update tags when type changes

* validate that temporal unit function parameters aren't empty

* add e2e tests

* convert day/week/month/quarter/year groupings to dates

* fix empty param

* only convert days to dates

* finally actually make date conversion work correctly?

* address review

* adjust tests to the latest changes

---------

Co-authored-by: William Zimrin <william@metabase.com>

* rename test

* update native query time grouping tests to be more comprehensive (#58814)

* Fix time grouping tests (#58878)

* validate time unit parameters and fix bug (#58993)

* Fix and test nil values for native time groupings (#59062)

* add e2e tests for optional usage of time grouping (#59045)

* add e2e tests for optional usage of time grouping

* cleanup

* fixup

* update test

* fix class reference

---------

Co-authored-by: William <william@metabase.com>
2025-06-13 18:49:29 -04:00
Tyler Plude
184d6a5b6d Fixes import warnings in shared js color getter bundle (#58445)
* Fixes import warnings in shared js color getter bundle

* fix static viz backend errors

* remove commented line

* pr feedback
2025-06-13 15:43:22 -07:00
Nathan Voxland
2628e7874d Added validation for email-from-name (#59330) 2025-06-13 17:12:59 -05:00
Alex Yarosh
5b83c629d9 docs: update pivot docs (#59492)
* pivots

* Apply suggestions from code review

Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>

---------

Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
2025-06-13 20:37:25 +00:00
Aleksandr Lesnenko
18ff09c54a adjust measured cells spacing (#59475)
* adjust measured cells spacing

* Update Loki Snapshots

* update specs for new widths

---------

Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-06-13 19:24:02 +00:00
William
3e0e2c6b99 Add setting to disable reusing a dashboard's last used parameters (#59293)
Set MB_DASHBOARDS_SAVE_LAST_USED_PARAMETER to false to disable saving.
2025-06-13 14:22:46 -05:00
Uladzimir Havenchyk
c55139ed0c chore: cleanup native editor after refactoring (#59281)
* chore: cleanup native editor after refactoring

* rename type

* fix types
2025-06-13 17:56:55 +00:00
Jeff Bruemmer
623523c6fc docs - alert note (#59481)
* note on disposable alerts

* edit

* alerts permissions note

* summary

* phrasing
2025-06-13 13:52:31 -04:00
Riley Thompson
7d306e5884 Revert clickhouse to 0.8.4 (#59470)
* revert to 0.8.4

* manually revert changes that depended on 0.8.6

* other fixes for 0.8.4
2025-06-13 12:28:51 -04:00
Edward Paget
eabbba2463 fix: make the jwt idp uri a required setting (#59344)
The SDK now requires the jwt uri to be set to function in version 55
this enforces that requirement on the admin page.
2025-06-13 16:21:12 +00:00
Nathan Voxland
2c567ae30f Removed query analysis backend code (#58816) 2025-06-13 10:39:47 -05:00
Sloan Sparger
135ba04d91 [Metabot] Guard ai entity analysis (#59339)
* guard ai entity analysis

* fix types

* add token feature to BE

* Add :ai_entity_analysis premium feature to token feature test

* iteration

* fix bad reference

---------

Co-authored-by: Mihael Konjevic <konjevic@gmail.com>
2025-06-13 09:00:36 -05:00
Brad Anderson
2f1de41467 VIZ-1020 Updates text card "extra large" breakpoint version so it's only applied on full-width dashboards since fixed-width dashboards don't have enough height to display it without scrollbars (#59437) 2025-06-13 09:38:20 -04:00
metamben
172fe61ae5 Select the most viewed tables when generating SQL queries (#59359)
Fixes BOT-181
2025-06-13 15:17:42 +02:00
Oisin Coveney
18a8fdbf6d remove isJwtProviderSet booleans (#59459) 2025-06-13 14:35:00 +03:00
Sloan Sparger
f41897df9d add a startNewConversation helper (#59423) 2025-06-13 13:32:36 +02:00
Oisin Coveney
64887b6369 Rename initialDashboardId to dashboardIdProp (#59457) 2025-06-13 10:06:50 +00:00
Oisin Coveney
fa9d884b60 Convert TitleAndDescription to typescript (#59413) 2025-06-13 11:52:14 +03:00
Oisin Coveney
055e8b0b66 [EMB-327] MS1: Add Dashboard Context (#57595) 2025-06-13 11:44:59 +03:00
785 changed files with 17476 additions and 11596 deletions

View File

@@ -400,8 +400,10 @@
clojure.test.check.clojure-test/defspec clojure.test/deftest
clojure.test.check.properties/for-all clojure.core/let
clojurewerkz.quartzite.jobs/defjob clojure.core/defn
instaparse.core/defparser clojure.core/def
metabase-enterprise.serialization.test-util/with-dbs clojure.core/fn
metabase-enterprise.serialization.test-util/with-random-dump-dir clojure.core/let
metabase-enterprise.content-translation.routes-test/with-new-secret-key! clojure.core/fn
metabase.actions.test-util/with-actions clojure.core/let
metabase.api.common/let-404 clojure.core/let
metabase.app-db.custom-migrations.util/with-temp-scheduler! clojure.core/fn

View File

@@ -350,6 +350,14 @@
:api #{metabase.connection-pool}
:uses #{}}
content-translation
{:team "Admin Webapp"
:api #{metabase.content-translation.api
metabase.content-translation.models}
:uses #{api
premium-features
util}}
content-verification
{:team "Admin Webapp"
:api #{metabase.content-verification.core
@@ -368,6 +376,7 @@
:api #{metabase.dashboards.api
metabase.dashboards.autoplace
metabase.dashboards.constants
metabase.dashboards.init
metabase.dashboards.models.dashboard
metabase.dashboards.models.dashboard-card
metabase.dashboards.models.dashboard-tab}
@@ -394,6 +403,7 @@
request
revisions
search
settings
util
warehouse-schema
xrays}}
@@ -475,6 +485,7 @@
{:team "Embedding"
:api #{metabase.embedding.api
metabase.embedding.init
metabase.embedding.jwt
metabase.embedding.settings
metabase.embedding.validation}
:uses #{analytics
@@ -885,7 +896,6 @@
premium-features
public-sharing
pulse
query-analysis
query-permissions
query-processor
request
@@ -895,19 +905,6 @@
view-log
warehouse-schema}}
query-analysis
{:team "Querying"
:api #{metabase.query-analysis.core
metabase.query-analysis.init}
:uses #{config
driver
legacy-mbql
lib
query-processor
settings
task
util}}
query-permissions
{:team "Admin Webapp"
:api #{metabase.query-permissions.core}
@@ -1483,11 +1480,9 @@
:api #{metabase-enterprise.ai-sql-fixer.api}
:uses #{api
driver
query-analysis
query-processor
util
enterprise/metabot-v3
}}
enterprise/metabot-v3}}
enterprise/ai-sql-generation
{:team "Metabot"
@@ -1556,6 +1551,17 @@
task
util}}
enterprise/content-translation
{:team "Admin Webapp"
:api #{metabase-enterprise.content-translation.dictionary
metabase-enterprise.content-translation.routes}
:uses #{api
content-translation
embedding
premium-features
util
enterprise/api}}
enterprise/content-verification
{:team "Admin Webapp"
:api #{metabase-enterprise.content-verification.api.routes}
@@ -1678,15 +1684,6 @@
:uses #{premium-features
util}}
enterprise/query-reference-validation
{:team "Querying"
:api #{metabase-enterprise.query-reference-validation.api}
:uses #{api
collections
query-analysis
request
util}}
enterprise/sandbox
{:team "Admin Webapp"
:api #{metabase-enterprise.sandbox.api.routes

3
.github/team.json vendored
View File

@@ -63,7 +63,6 @@
"npfitz",
"johnswanson",
"rafpaf",
"sloansparger",
"iethree",
"nvoxland",
"fraserdrops",
@@ -94,6 +93,8 @@
"name": "Metabot",
"label": ".Team/Metabot",
"members": [
"retro",
"sloansparger",
"somtom"
]
},

View File

@@ -1,13 +1,23 @@
name: Docs Bump Detected
on:
pull_request:
pull_request_target:
types:
- opened
- synchronize
- reopened
branches:
- 'master'
- 'release-x.[0-9]+.x'
paths:
- 'docs/**'
jobs:
push_workflow_to_docs_metabase_github_io_job:
runs-on: ubuntu-latest
env:
SOURCE_BRANCH: ${{ github.head_ref || github.ref }}
TARGET_BRANCH: ${{ github.event.pull_request.base.ref }}
steps:
- name: Report changed docs files exist
run: |
@@ -15,20 +25,13 @@ jobs:
- name: Trigger repo dispatch
uses: actions/github-script@v7
env:
BRANCH_NAME: ${{ github.head_ref || github.ref }}
with:
github-token: ${{ secrets.METABASE_AUTOMATION_USER_TOKEN }}
script: | #js
if (process.env.BRANCH_NAME === "master" ||
/^release-x\.\d+\.x$/.test(process.env.BRANCH_NAME)) {
github.rest.repos.createDispatchEvent({
owner: "${{ github.repository_owner }}",
repo: "docs.metabase.github.io",
event_type: "docs_update",
client_payload: { branch_name: process.env.BRANCH_NAME
}
});
} else {
console.log("Branch name is not to be published: ", process.env.BRANCH_NAME);
}
client_payload: {
source_branch: process.env.SOURCE_BRANCH,
target_branch: process.env.TARGET_BRANCH}});

View File

@@ -1,35 +1,36 @@
name: Docs Merge Detected
on:
push:
pull_request:
types:
- closed
branches:
- master
- 'master'
- 'release-x.[0-9]+.x'
paths:
- 'docs/**'
jobs:
push_workflow_to_docs_metabase_github_io_job_merge:
push_and_merge_workflow_to_docs_metabase_github_io_job:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
env:
SOURCE_BRANCH: ${{ github.head_ref || github.ref }}
TARGET_BRANCH: ${{ github.event.pull_request.base.ref }}
steps:
- name: Report changed docs files exist
run: |
echo "A change in the docs directory was detected on merge."
echo "A PR with changes to the docs directory was merged."
- name: Trigger repo dispatch
uses: actions/github-script@v7
env:
BRANCH_NAME: ${{ github.head_ref || github.ref }}
with:
github-token: ${{ secrets.METABASE_AUTOMATION_USER_TOKEN }}
script: | #js
if (process.env.BRANCH_NAME === "master" ||
/^release-x\.\d+\.x$/.test(process.env.BRANCH_NAME)) {
github.rest.repos.createDispatchEvent({
github.rest.repos.createDispatchEvent({
owner: "${{ github.repository_owner }}",
repo: "docs.metabase.github.io",
event_type: "docs_merge",
client_payload: { branch_name: process.env.BRANCH_NAME }
});
} else {
console.log("Branch name is not to be published: ", process.env.BRANCH_NAME);
}
client_payload: {
source_branch: process.env.SOURCE_BRANCH,
target_branch: process.env.TARGET_BRANCH}});

View File

@@ -196,6 +196,7 @@ jobs:
strategy:
matrix:
test_suite: ${{ fromJSON(needs.get-sample-apps-data.outputs.matrix) }}
environment: ["production", "development"]
if: |
!cancelled() && needs.build.result == 'success'
runs-on: ubuntu-22.04
@@ -212,6 +213,7 @@ jobs:
TZ: US/Pacific # to make node match the instance tz
CYPRESS_CI: true
SAMPLE_APP_BRANCH_NAME: ${{ needs.get-sample-apps-data.outputs.branch_name }}
SAMPLE_APP_ENVIRONMENT: ${{ matrix.environment }}
permissions:
id-token: write

View File

@@ -395,8 +395,8 @@ jobs:
# Please keep the value in sync with `inputs.branch`'s release branch
npm publish --tag ${{fromJson('{"master": "nightly", "release-x.51.x": "51-stable", "release-x.52.x": "52-stable", "release-x.53.x": "53-stable", "release-x.54.x": "54-stable", "release-x.55.x": "55-stable", "esbuild-main": "56-esbuild"}')[inputs.branch]}}
- name: Add `latest` tag to the latest release branch (`release-x.54.x`) deployment
if: ${{ inputs.branch == 'release-x.54.x' }}
- name: Add `latest` tag to the latest release branch (`release-x.55.x`) deployment
if: ${{ inputs.branch == 'release-x.55.x' }}
working-directory: sdk
run: |
npm dist-tag add @metabase/embedding-sdk-react@${{ env.sdk_version }} latest

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -2,3 +2,4 @@ frontend/src/cljs
docs/configuring-metabase/environment-variables.md
docs/api/*
docs/api-documentation.md
.storybook-sdk/msw-public/mockServiceWorker.js

View File

@@ -28,7 +28,7 @@ const config: StorybookConfig = {
reactDocgen: "react-docgen-typescript",
},
webpackFinal: config => {
webpackFinal: (config) => {
return {
...config,
resolve: {
@@ -55,10 +55,10 @@ const config: StorybookConfig = {
...config.module,
rules: [
...(config.module?.rules ?? []).filter(
rule => !isCSSRule(rule) && !isSvgRule(rule),
(rule) => !isCSSRule(rule) && !isSvgRule(rule),
),
...appConfig.module.rules.filter(
rule => isCSSRule(rule) || isSvgRule(rule),
(rule) => isCSSRule(rule) || isSvgRule(rule),
),
],
},
@@ -67,5 +67,5 @@ const config: StorybookConfig = {
};
export default config;
const isCSSRule = rule => rule.test?.toString() === "/\\.css$/";
const isSvgRule = rule => rule.test?.test(".svg");
const isCSSRule = (rule) => rule.test?.toString() === "/\\.css$/";
const isSvgRule = (rule) => rule.test?.test(".svg");

51
bb.edn
View File

@@ -3,7 +3,8 @@
;; so the namespaces are mage.cli, mage.format, etc.
:paths ["mage" "test" "bin/lint-migrations-file/src"]
:deps {metosin/malli {:mvn/version "0.17.0"}
table/table {:mvn/version "0.5.0"}}
table/table {:mvn/version "0.5.0"}
mvxcvi/puget {:mvn/version "1.3.4"}}
:tasks
{:requires [[mage.cli :as cli]
[mage.color :as c]]
@@ -14,6 +15,16 @@
(vector 'parsed (list 'cli/parse! (list 'current-task)))
(cons 'do body))))
alias
{:doc "Installs 'mage' alias and autocomplete"
:examples [["./bin/mage alias" "Prints instructions to install the 'mage' alias and autocomplete"]
["./bin/mage alias zsh" "Prints shell script to put into .zshrc for zsh users"]]
:requires [[mage.alias :as alias]]
:arg-schema [:or
[:tuple]
[:tuple [:enum "bash" "zsh" "fish"]]]
:task (task! (alias/instructions parsed))}
cljfmt-staged
{:doc "Runs cljfmt on staged files"
:requires [[mage.format :as format]]
@@ -121,6 +132,7 @@
["JARS=~/my-stuff ./bin/mage jar-download 1.45.2" "Download metabase_1.45.2.jar to ~/my-stuff"]]
:requires [[mage.jar-download :as jar-download]]
:options [["-r" "--run" "run the new jar after downloading it"]
["-e" "--env-file FILE" "you can optionally provide a lein-env file to specify the environment to use when running the jar."]
["-d" "--delete" "delete the old jar if found, by default does not re-download it"]
["-p" "--port PORT" "you can optionally provide a port to run the jar on, if not, we use a sane port."]]
:arg-schema [:or
@@ -141,15 +153,6 @@
:requires [[mage.stats-repl :as stats-repl]]
:task (stats-repl/connect (cli/parse! (current-task)))}
setup-autocomplete
{:doc "Prints instructions to setup autocomplete"
:examples [["./bin/mage setup-autocomplete" "Shows a link to instructions to make autocomplete work."]]
:requires [[mage.autotab :as autotab]]
:arg-schema [:or
[:tuple]
[:tuple [:enum "bash" "zsh" "fish"]]]
:task (task! (autotab/instructions parsed))}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Private Tasks:
;; - hidden from `./bin/mage` listing and `bb tasks`
@@ -193,33 +196,35 @@
(apply readability/check arguments))}
-example-calculator
{;; `:doc` is a short docstring for the task, will be listed in `./bin/mage -h` and other help info
:doc "The sample task docstring"
{;; `:doc` is a short docstring for the task, will be listed in `./bin/mage -h` and other help info.
;; Keep these short, they need to fit on one line in the output from `./bin/mage -h`.
:doc "The example calculator's task docstring"
;; examples get printed out when you pass -h or --help.
:examples [["./bin/mage -example-calculator 1 + 99" "evaluates to 100"]
["./bin/mage -example-calculator 100 - 99" "evaluates to 1"]]
;; The task is the actual code that runs when you run the task.
:task (task!
(println "Parsed input:") (prn parsed)
(let [{:keys [arguments data]} (cli/parse! (current-task))
(println "Parsed input:") (u/pp parsed)
(let [{:keys [arguments data]} parsed
[a op b] arguments]
(println a (name op) b "=" (c/blue (({:+ + :- -} op) a b)))))
;; (optional) `:require` lazily libraries for just your task:
:requires [[mage.color :as c]]
:requires [[mage.color :as c]
[mage.util :as u]]
;; (optional) `:options` are passed to [[clojure.tools.cli/parse-opts]].
;; See: https://clojure.github.io/tools.cli/index.html#clojure.tools.cli/parse-opts
:options [["-a" "--a-cli-flag" "Check staged files (not actually used)"]
["-p" "--port PORT" "Some port we care about in -example (not actually used)"]]
:options [["-n" "--negate" "Negate the result of the calculation"]
["-a" "--also-add N" "Add N to the result of the calculation"]]
;; (optional) `:arg-schema` is a malli schema for the arguments passed to the task, after the options
:arg-schema [:tuple :int [:enum :+ :-] :int]
;; (optional) `:usage-fn` is a function called with the current-task map
;; and returns a string containing extra-detailed usage information.
:usage-fn (fn [{:keys [doc]}]
(println "Optional extra usage information, if you want.")
(println "Reversed docstring:" (apply str (reverse doc))))
;; (optional) `:usage-fn` is a function called with the current-task map.
;; Returns a string containing extra-detailed usage information.
:usage-fn (fn [{:keys [doc] :as _task}]
(str "Optional extra usage information, for explicit callouts.\n"
"Reversed docstring: '" (c/green (apply str (reverse doc))) "'"))
;; (optional) Any other keys are completely allowed. Put things to lookup or that you want to be easy to change
;; here. These will be returned from `(current-task)`. See: start-db for an example of using `:ports` to define a
;; map of ports.
;; top-level map of ports. If something should be easily accessible in the task, put it here.
:data {:a [:b :c] :b [:d]}}
-test {:doc "run all mage tests"

40
before-push.sh Executable file
View File

@@ -0,0 +1,40 @@
#! /bin/bash
trap "echo 'Interrupted! Exiting.'; exit 1" SIGINT
# This script is used to run the all dev checks with a single command.
echo "Building CLJS..."
yarn build:cljs
if [ $? -ne 0 ]; then
echo "Error: Building CLJS failed." >&2
exit 1
fi
echo "Building CLJS done"
echo "Linting ESLint..."
yarn lint-eslint-pure
if [ $? -ne 0 ]; then
echo "Error: Linting ESLint failed." >&2
exit 1
fi
echo "Linting ESLint done"
echo "Linting Prettier..."
yarn lint-prettier-pure
if [ $? -ne 0 ]; then
echo "Error: Linting Prettier failed." >&2
exit 1
fi
echo "Linting Prettier done"
echo "Type checking..."
yarn type-check-pure
if [ $? -ne 0 ]; then
echo "Error: Type checking failed." >&2
exit 1
fi
echo "Type checking done"
# log success
echo "All checks passed!"

View File

@@ -44,13 +44,12 @@
(zen))))
(defn- print-help []
(do
(lolcat "./mage/resource.txt")
(flush)
(println (c/bold " ✨ Metabase Automation Genius Engine ✨"))
(println "")
(println (u/sh "bb tasks"))
(println (tip-o-day))))
(lolcat "./mage/resources/splash.txt")
(flush)
(println (c/bold " ✨ Metabase Automation Genius Engine ✨"))
(println "")
(println (u/sh "./bin/bb tasks"))
(println (tip-o-day)))
(defn -main [& _]
(cond

View File

@@ -1,5 +1,7 @@
---
title: Actions overview
redirect_from:
- /docs/latest/actions
---
# Actions overview

View File

@@ -197,7 +197,6 @@ config:
persisted-model-refresh-cron-schedule: 0 0 0/6 * * ? *
persisted-models-enabled: false
premium-embedding-token: null
query-analysis-enabled: false
query-caching-max-kb: 2000
query-caching-max-ttl: 3024000.0
redirect-all-requests-to-https: false
@@ -247,7 +246,6 @@ config:
slack-bug-report-channel: metabase-bugs
source-address-header: X-Forwarded-For
sql-jdbc-fetch-size: 500
sql-parsing-enabled: true
ssh-heartbeat-interval-sec: 180
start-of-week: sunday
subscription-allowed-domains: null

View File

@@ -1137,14 +1137,6 @@ Allow persisting models into the source database.
Token for premium features. Go to the MetaStore to get yours!
### `MB_QUERY_ANALYSIS_ENABLED`
- Type: boolean
- Default: `false`
- [Configuration file name](./config-file.md): `query-analysis-enabled`
Whether or not we analyze any queries at all.
### `MB_QUERY_CACHING_MAX_KB`
- Type: integer

View File

@@ -7,7 +7,7 @@ summary: Configure how much information Metabase displays in its logs.
# Metabase logs
Metabase logs quite a bit of information by default. Metabase uses [Log4j 2][https://logging.apache.org/log4j/2.x/] under the hood, so you can configure how much information Metabase logs.
Metabase logs quite a bit of information by default. Metabase uses [Log4j 2](https://logging.apache.org/log4j/2.x/) under the hood, so you can configure how much information Metabase logs.
## View and download Metabase logs
@@ -17,7 +17,7 @@ If you're running self-hosted Metabase, you'll also be able see the logs in the
## How to read Metabase logs
See [How to read logs][../troubleshooting-guide/server-logs.md].
See [How to read logs](../troubleshooting-guide/server-logs.md).
## Configuring logging Level

View File

@@ -1,5 +1,7 @@
---
title: "Configuration overview"
redirect_from:
- /docs/latest/configuring-metabase
---
# Configuration overview

View File

@@ -179,7 +179,7 @@ Duplication only includes the dashboard, its card layout, filters, and (optional
To edit dashboard cards and move them around, click the **pencil** icon in the top right of a dashboard to enter the dashboard's editing interface.
### Editing cards
### Moving cards around
Once you're in edit mode, you'll see a grid appear. You can move and resize the cards in the dashboard to your liking and they'll snap to the grid.
@@ -194,6 +194,8 @@ Once you're in edit mode, you'll see a grid appear. You can move and resize the
Metabase will automatically update a question's display to make sure your data looks great at any size you choose.
To edit the cards themselves, see [Editing dashboard cards](#editing-dashboard-cards).
### Dashboard sections
To speed up card arrangement, you can add **sections** to your dashboards.
@@ -227,6 +229,13 @@ You can change the width of a dashboard by going into the three dots menu in the
- **Fixed width** (default). Metabase will restrict the layout to a fixed width in the center of the screen. This fixed width can keep dashboard layouts consistent between smaller laptop screens and larger desktop screens.
- **Full width**. The layout and cards will expand to take up the full width of the screen.
## Editing dashboard cards
To edit a card's:
- **Underlying query**: click on the card's title while _not_ in dashboard editing mode. If the card displays multiple questions, pick the question you want to edit from the dropdown.
- **Visualization settings**, see [changing a card's visualization settings](#changing-a-cards-visualization-settings).
## Changing a card's visualization settings
You can change a card's visualization settings (to add a goal line, for example). Changing a card's visualization settings will only affect how the question appears on that dashboard card; these changes won't affect the original question's visualization settings.

View File

@@ -18,7 +18,7 @@ Filters can only be linked when they're connected to columns that have an explic
- In the same table.
- In two different tables that have a foreign key relationship specified in the [table metadata](../data-modeling/metadata-editing.md).
- In two different tables that have a foreign key relationships to one or more intermediate tables, as specified in the [table metadata](../data-modeling/metadata-editing.md)
- In two different tables that have a foreign key relationships to one or more intermediate tables, as specified in the [table metadata](../data-modeling/metadata-editing.md).
![Setting up foreign key in table metadata](./images/foreign-key-linked-filters.png)
@@ -46,7 +46,7 @@ The filter(s) you select in the **linked filters** tab will be the parent filter
Linked filters are only "aware" of relationships defined in the table metadata. This constraint lets people connect filters to the same column on multiple dashboard cards (across multiple tabs), but the constraint also means that:
- Linked filters can't see relationships defined by joins in models or questions.
- Linked filters can't use any filter or join logic from any underlying card or model
- Linked filters can't use any filter or join logic from any underlying card or model.
For example, say you have a table with State and City columns, and you build a model that filters out rows with `City = San Francisco`. You ask a question based on that model, and add it to a dashboard. You add State and City filters to the dashboard, and link them. If you select were to select `State = CA`, the city filter may still show `San Francisco` as option, even though there are no records with `San Francisco` in the question and the underlying model, because the filter only "knows" about the underlying table metadata (which includes sample values for the column).
@@ -54,7 +54,7 @@ For example, say you have a table with State and City columns, and you build a m
Metabase uses database column metadata to populate values for linked filters, which means that linked filters have to be connected to database columns. In particular:
- You can't create linked filters on custom columns
- You can't create linked filters on custom columns.
- Native/SQL questions must have a [field filter](../questions/native-editor/sql-parameters.md#the-field-filter-variable-type) variable in order to be linked. Basic SQL variables aren't connected to database columns, so they won't work for linked filters.

View File

@@ -1,5 +1,7 @@
---
title: Dashboards overview
redirect_from:
- /docs/latest/dashboards
---
# Dashboards overview

View File

@@ -39,11 +39,7 @@ You can use custom expressions to combine multiple metrics, or perform calculati
To create a metric, bring up the command palette with cmd/ctrl + k. That’s cmd + k for Macs, or ctrl + k for Windows PCs. Search for New metric.
You can also create a metric by first creating a question, then converting it to a metric:
1. Click on **+ New** and select **Question**
2. Build your query using the query builder
3. Once you've created your question, you can convert it to a metric by clicking the three dot menu (**...**) and selecting **Turn into a metric**
You can also create a new metric by going to **Browse > Metrics** in the navigation side bar and clicking on **+**.
Select your starting data. You can start from a model, metric, table, or saved question.

View File

@@ -1,5 +1,7 @@
---
title: "Data modeling overview"
redirect_from:
- /docs/latest/data-modeling
---
# Data modeling overview

View File

@@ -5,6 +5,7 @@ redirect_from:
- /docs/latest/databases/connections/sql-server
- /docs/latest/administration-guide/databases/h2
- /docs/latest/databases/connections/h2
- /docs/latest/databases/connections
---
# Adding and managing databases

View File

@@ -1,5 +1,7 @@
---
title: Databases overview
redirect_from:
- /docs/latest/databases
---
# Databases overview

View File

@@ -31,6 +31,7 @@ title: Driver interface changelog
`metabase.driver/upload-type->database-type` or `metabase.driver/allowed-promotions` -- make sure you use
`:metabase.upload/varchar-255` rather than something like `::upload/varchar-255`.
- Added the multi-method `metabase.driver.sql.parameters.substitution/time-grouping->replacement-snippet-info`. This is effectively `->replacement-snippet-info` for the new native query time grouping feature, but is its own separate multimethod because it needs an extra parameter.
- The `metabase.models.secret` namespace has been replaced with `metabase.secrets.core`; if you were using it please
update your usages.

View File

@@ -1,5 +1,7 @@
---
title: Embedded analytics SDK
redirect_from:
- /docs/latest/embedding/sdk
---
# Embedded analytics SDK
@@ -98,9 +100,9 @@ You can find the [Embedded analytics SDK source code in the Metabase repo](https
View the SDK's changelog:
* [54-nightly](https://github.com/metabase/metabase/blob/master/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
* [53-stable](https://github.com/metabase/metabase/blob/release-x.53.x/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
* [52-stable](https://github.com/metabase/metabase/blob/release-x.52.x/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
- [54-nightly](https://github.com/metabase/metabase/blob/master/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
- [53-stable](https://github.com/metabase/metabase/blob/release-x.53.x/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
- [52-stable](https://github.com/metabase/metabase/blob/release-x.52.x/enterprise/frontend/src/embedding-sdk/CHANGELOG.md)
## Embedded analytics SDK on NPM

View File

@@ -1,5 +1,7 @@
---
title: Embedding overview
redirect_from:
- /docs/latest/embedding
---
# Embedding overview

View File

@@ -1,5 +1,7 @@
---
title: "Organization overview"
redirect_from:
- /docs/latest/exploration-and-organization
---
# Organization overview

View File

@@ -14,7 +14,7 @@ On Pro and Enterprise plans, you can purchase a development instance or developm
- **Self-hosted**: you can purchase a dev token that you can use for one or more self-hosted development instances (meaning: you can reuse the same token for multiple dev instances at no additional cost). The development token will have access to the same set of paid features as your production token.
- **Cloud**: you can purchase a development instance hosted on [Metabase Cloud](https://www.metabase.com/cloud/). The development instance will have access to the same set of paid features as your production token.
Dev instances are only available to Pro and Enterprise plans, but they're not included in the base plans; dev instances must be purchased as an add-on to your plan.
Dev instances are only available to Pro and Enterprise plans; they're not included in the base plans. Dev instances must be purchased as an add-on to your plan, after you've completed your trial and made your first payment.
## Pay a flat fee, not per test user
@@ -46,3 +46,7 @@ You can choose a Cloud instance or get a token for a self-hosted development ins
If you're on a Pro Cloud plan and downgrade to a Starter plan, we'll delete any development instances you've created. All of your production instances will remain intact (minus the Pro features).
If you downgrade and you're on a self-hosted plan, the token will no longer be valid, and you'll lose access to the paid features.
## Getting data from development to production
You can export changes made in your development instance and import them into your production instance. Check out [serialization](../installation-and-operation/serialization.md).

View File

@@ -1,5 +1,6 @@
---
title: "Serialization"
summary: How to export and import Metabase content between instances using serialization. Useful for version control, staging environments, and duplicating assets.
redirect_from:
- /docs/latest/enterprise-guide/serialization
---
@@ -34,8 +35,6 @@ Check out our guides for:
- [Running multiple environments](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/multi-env)
- [Setting up git-based workflow](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/git-based-workflow)
> Serialization isn't intended for use cases like duplicating assets or swapping data sources _within_ the same Metabase instance. If you're using serialization for duplicating assets within the same instance, check out [How export works](#how-export-works), [How import works](#how-import-works), and the directions for your use case in [Other uses of serialization](#other-uses-of-serialization)
## How export works
- [What gets exported](#what-gets-exported)
@@ -60,7 +59,7 @@ Metabase will only export the following entities:
- Public sharing settings for questions and dashboards
- [General Metabase settings](#general-metabase-settings-that-are-exported)
- Events and timelines
- Database connection strings (only if specified through [export options](#customize-what-gets-exported)).
- Database connection strings (only if specified through [export options](#customize-what-gets-exported))
All other entities—including users, groups, permissions, alerts, subscriptions—won't get exported.
@@ -146,7 +145,7 @@ See [export parameters in CLI commands](#export-options) or [export parameters i
Questions can be found in the `cards` directory of a collection directory. Here's an example card YAML file for a question written with SQL that uses a field filter and has an area chart visualization.
> To preserve a native query's multi-line format, remove trailing whitespace from native queries. If your native query has trailing whitespace, YAML will convert your query to a single string literal (which only affects presentation, not functionality).
To preserve a native query's multi-line format, remove trailing whitespace from native queries. If your native query has trailing whitespace, YAML will convert your query to a single string literal (which only affects presentation, not functionality).
```yml
name: Products by week
@@ -687,7 +686,9 @@ We're providing some directions on how to approach these unsupported use cases,
### Using serialization for duplicating content within the same Metabase
Using serialization to duplicate content is not trivial, because you'll need to wrangle [Entity IDs](#metabase-uses-entity-ids-to-identify-and-reference-metabase-items) for all the items you want to duplicate — and the IDs for all the items that are related to those items — to avoid overwriting existing data.
> Duplicating assets via serialization, while technically possible, isn't officially supported, so do so at your own risk. The risk here being that you may have to manage long chains of dependencies, which can make it more likely you'll forget to edit an entity ID, or overwrite an entity ID that already exists. So make sure you're doing backups and checking your changes into version control.
Using serialization to duplicate content is not trivial, because you'll need to wrangle [Entity IDs](#metabase-uses-entity-ids-to-identify-and-reference-metabase-items) for all the items you want to duplicate — _and_ the IDs for all the items that are related to those items — to avoid overwriting existing data.
Before starting this perilous journey, review [how export works](#how-export-works) and [how import works](#how-import-works), and contact [help@metabase.com](mailto:help@metabase.com) if you have any questions.
@@ -725,9 +726,13 @@ If your collections contains dashboards, models, and other items that can add de
### Using serialization to swap the data source for questions within one instance
If you want to change the data source for some of the questions in your Metabase — for example, just for questions in a single collection - you can serialize the questions manually, then edit the exported YAML files.
> We've since built an official solution for situations where you want to build one dashboard and change the database it queries based on who's viewing it. Check out [Database routing](../permissions/database-routing.md).
> If you want to switch _every_ question built on database A to use database B instead, and database B has exactly the same schema as database A, you don't need to use serialization: you can just swap the connection string in **Admin > Databases**
Read the blockquote above before proceeding, as that's probably what you're looking for. We're leaving the docs below as a backup in case [database routing](../permissions/database-routing.md) doesn't solve your problem.
If you want to switch _every_ question built on database A to use database B instead, and database B has exactly the same schema as database A, you don't need to use serialization: you can just swap the connection string in **Admin > Databases**.
If you want to change the data source for some of the questions in your Metabase — for example, just for questions in a single collection - you can serialize the questions manually, then edit the exported YAML files.
Your databases must have the same engine, and ideally they should have the same schema.
@@ -762,7 +767,7 @@ A few other changes to call out:
- The exported YAML files have a slightly different structure:
- Metabase will prefix each file with a 24-character Entity ID (like `IA96oUzmUbYfNFl0GzhRj_accounts_model.yaml`).
You can run a Metabase command to [drop Entity IDs](./commands.md#drop-entity-ids) before exporting.
You can run a Metabase command to [drop Entity IDs](./commands.md#drop-entity-ids).
- The file tree is slightly different.
- To serialize personal collections, you just need to include the personal collection IDs in the list of comma-separated IDs following the `-c` option (short for `--collection`).
@@ -774,7 +779,8 @@ If you've written scripts to automate serialization, you'll need to:
## Further reading
- [Serialization tutorial](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/serialization).
- [Serialization tutorial](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/serialization)
- [Database routing](../permissions/database-routing.md)
- [Multiple environments](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/multi-env)
- [Setting up a git-based workflow](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/git-based-workflow).
- Need help? Contact [support@metabase.com](mailto:support@metabase.com).
- [Setting up a git-based workflow](https://www.metabase.com/learn/metabase-basics/administration/administration-and-operation/git-based-workflow)
- Need help? Contact [support@metabase.com](mailto:support@metabase.com)

View File

@@ -107,13 +107,15 @@ With X being the latest version available for each release.
Check out a list of [Metabase releases](https://github.com/metabase/metabase/releases).
When upgrading between major versions (e.g. v53.x to v54.x), use the latest minor version available for that major version. E.g., if you want to upgrade from v50 to v51, use the latest point version available for 51.
## Upgrading Metabase on other platforms
- [Upgrading Azure Web Apps deployments](running-metabase-on-azure.md#additional-configurations)
## What happens during an upgrade or downgrade?
During a **major version** upgrade (e.g., 53.1 5o 54.1), Metabase will:
During a **major version** upgrade (e.g., 53.1 or 54.1), Metabase will:
- Perform all the migrations needed to upgrade to the new version, such as any schema changes to the application database between the two versions.
- Keep all the metadata it needs to work on the application database.
@@ -168,3 +170,5 @@ If you're running Metabase in a cluster:
1. Reduce the number of nodes to a single node. You can't upgrade all nodes at the same time because the ugprade process works by acquiring a migration lock on the application database from a single client, which performs the migration. If you keep more than one node active when you do a major version upgrade, the application won't behave correctly, as schema changes to the application database could cause problems for nodes that are still running the older version of Metabase.
2. Perform the upgrade as normal (as outlined above).
3. Raise the number of nodes to the same number you had before.
Make sure you container orchestrator or cluster manager doesn't kill the Metabase process while it's performing the migrations, otherwise you'll may end up with a corrupted application database and you'll need to restore from a backup.

View File

@@ -2,6 +2,7 @@
title: "People overview"
redirect_from:
- /docs/latest/administration-guide/sso
- /docs/latest/people-and-groups
---
# People overview
@@ -70,4 +71,3 @@ Metabase supports user provisioning via the SCIM protocol.
[saml-google]: ./saml-google.md
[saml-keycloak]: ./saml-keycloak.md
[sso-def]: https://www.metabase.com/glossary/sso

View File

@@ -1,5 +1,6 @@
---
title: Notification permissions
summary: Learn who can create and edit alerts and dashboard subscriptions, and what data recipients can see in their notifications.
---
# Notification permissions
@@ -19,7 +20,7 @@ What you can do with alerts and dashboard subscriptions depends on whether you'r
Everyone's in the All Users group. Which means that everyone can:
- Create [alerts](../questions/alerts.md) and [dashboard subscriptions](../dashboards/subscriptions.md#setting-up-a-dashboard-subscription).
- Add new recipients to dashboard subscriptions that they created. Non-admins can only add themselves to alerts.
- Add new recipients to dashboard subscriptions and alerts that they created.
- Unsubscribe from any alert or subscription in their [Account settings](../people-and-groups/account-settings.md).
When a notification creator adds new recipients to an alert or subscription, Metabase will display data to the recipients using the **creator's** [data permissions](../permissions/data.md) and [collection permissions](../permissions/collections.md).

View File

@@ -1,5 +1,7 @@
---
title: Permissions overview
redirect_from:
- /docs/latest/permissions
---
# Permissions overview

View File

@@ -1,5 +1,6 @@
---
title: Alerts
summary: Set up alerts to get notified via email, Slack, or webhooks when your questions return interesting results.
redirect_from:
- /docs/latest/users-guide/15-alerts
- /docs/latest/questions/sharing/alerts
@@ -31,8 +32,18 @@ To create an alert:
4. Select what you want to be alerted about. The alert options will depend on the question's visualization. See [types of alerts](#types-of-alerts).
5. Select when you want Metabase to check the results. Metabase can check for results by the minute, hourly, daily, weekly, monthly, or on a custom schedule that you set using the Quartz [cron syntax](https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html).
6. Select the alert's destination: [email](../configuring-metabase/email.md), [Slack](../configuring-metabase/slack.md), or to a [webhook](../configuring-metabase/webhooks.md).
7. Configure any other options (like [only sending the alert once](#send-a-one-time-alert)).
8. Click **Done**.
You'll also have the option to only send the alert once. To test the alert, you can hit the **Send now** button. But just make sure that the question returns results. If the question doesn't return any results, Metabase won't send the alert.
## Send a one-time alert
When setting up an alert, if you select the option to **Only send the alert once**, Metabase will send that alert once, then delete itself, never to alert anyone ever again. These "disposable" alerts are handy for things like letting you know when you reach a one-time milestone.
## Testing alerts
To test the alert, first make sure that the question returns results (if the question doesn't return any results, Metabase won't send the alert).
Then hit the **Send now** button to trigger the alert.
## Types of alerts

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 230 KiB

Some files were not shown because too many files have changed in this diff Show More