Compare commits

...

671 Commits

Author SHA1 Message Date
Nathan Voxland
2935aefc64 only include tables you can use for native query builder 2025-08-12 23:09:01 -05:00
Nathan Voxland
0ecddc9870 Merge remote-tracking branch 'origin/feature/reports' into document-sql 2025-08-12 19:48:05 -05:00
Aleksandr Lesnenko
7ebb0f0000 fix pivot query editing in documents 2025-08-12 20:56:35 -03:00
Denis Berezin
25ce9c5dcf Reports fix fe ci (#62046)
* Fix some CI issues

* Fix some CI issues

* Fix typecheck issues

* Fix lint

* Fix unit tests

* Fix e2e tests
2025-08-13 02:48:09 +03:00
Edward Paget
14a343de12 feat: check for name length 2025-08-12 16:06:07 -05:00
Brad Anderson
ec0c2dba8b Reverts probably-accidental change 2025-08-12 17:02:25 -04:00
Brad Anderson
39afe7fff5 UXW-451 Adds some light dataset error handling 2025-08-12 16:42:00 -04:00
Edward Paget
ab958737a9 fix: remove extraneous precondition migration 2025-08-12 15:33:11 -05:00
Brad Anderson
45a0c85158 UXW-472 Adds ArchivedEntityBanner for documents 2025-08-12 15:49:51 -04:00
Nick Fitzpatrick
d2479a5b95 bury shame 2025-08-12 15:48:11 -04:00
Nick Fitzpatrick
6d13f02bf3 Move, Archive, and Bookmark in documents page 2025-08-12 15:46:27 -04:00
Brad Anderson
3b8161ca75 Fix issue where "Delete permanently" errors out instead of deleting 2025-08-12 15:05:20 -04:00
Brad Anderson
93047a3e2f Updates Document type with newly added properties 2025-08-12 15:04:14 -04:00
Edward Paget
2b902a4ce1 feat: return can_restore, can_delete for docs 2025-08-12 13:43:04 -05:00
eliotmetabase
e03e528f09 Update menu items (#62072)
* Update commands and remove descriptions

* Removes unused code

---------

Co-authored-by: Brad Anderson <brad@metabase.com>
2025-08-12 11:09:29 -07:00
Brad Anderson
6f74d26021 Fix issue where metabot nodes sometimes yield a false positive in hasUnsavedChanges because they updated their own attributes 2025-08-12 13:56:01 -04:00
Nick Fitzpatrick
cb9d5e33e2 more e2e tests 2025-08-12 13:36:11 -04:00
Brad Anderson
1ddff04bf6 Changes how mention text is referenced in the documents metabot prompt serializer. It uses a cache in the documents slice now. It was using a node attribute before but that was hacky and it messed with the "is dirty" calculation. 2025-08-12 13:04:09 -04:00
Edward Paget
640b530563 fix: casing in tests 2025-08-12 11:16:12 -05:00
Nathan Voxland
952a52974c Able to generate sql charts 2025-08-12 11:05:44 -05:00
Edward Paget
915abf29eb fix: token features in recent views test 2025-08-12 10:50:22 -05:00
Edward Paget
67eceb653a fix: whitespace exclusion path 2025-08-12 10:17:59 -05:00
Edward Paget
11260e4d72 fix: whitespace and round-trip serdes test 2025-08-12 10:15:33 -05:00
Edward Paget
11d3fb22d2 Merge branch 'master' into feature/reports 2025-08-12 09:55:58 -05:00
Edward Paget
2627574bce feat: add documents to recents 2025-08-12 09:51:56 -05:00
Brad Anderson
53fcff39ef Updates "Created by Metabot" line based on design/user feedback 2025-08-12 10:38:55 -04:00
Jeff Bruemmer
99c391fb9f field filter intro (#62059) 2025-08-12 08:06:53 -05:00
Anderson
47f6a9ac46 chore: add andsalves as a team member (#62041) 2025-08-12 10:04:30 -03:00
github-automation-metabase
0f0d91d824 Bump com.microsoft.sqlserver/mssql-jdbc from 12.10.0.jre11 to 13.1.1.jre11-preview (#61486)
Inspect dependency changes here:

Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
2025-08-11 23:00:29 -07:00
github-automation-metabase
dd41094d50 Bump org.eclipse.jetty/jetty-server from 12.0.22 to 12.0.24 (#62001)
* Bump org.eclipse.jetty/jetty-server from 12.0.22 to 12.0.24

Inspect dependency changes here:

* Consolidate Jetty deps bumps

---------

Co-authored-by: Cam Saul <github@camsaul.com>
2025-08-11 22:59:35 -07:00
github-automation-metabase
676c64a2aa Bump clj-kondo/clj-kondo from 2025.04.07 to 2025.07.28 (#61771)
* Bump clj-kondo/clj-kondo from 2025.04.07 to 2025.07.28

Inspect dependency changes here: https://github.com/clj-kondo/clj-kondo/blob/v2025.07.28/CHANGELOG.md

* Fix some of the Kondo warnings -- seems like there are false positives

* Fix Kondo warnings

---------

Co-authored-by: Cam Saul <github@camsaul.com>
2025-08-11 22:21:13 -07:00
github-automation-metabase
709df6c4ac Bump com.facebook.presto/presto-jdbc from 0.292 to 0.293 (#59521)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
2025-08-11 20:14:27 -07:00
github-automation-metabase
f2096262fa Bump org.graalvm.polyglot/polyglot from 24.2.1 to 24.2.2 (#61248)
* Bump org.graalvm.polyglot/polyglot from 24.2.1 to 24.2.2

Inspect dependency changes here: https://github.com/oracle/graal/compare/graal-24.2.1...graal-24.2.2

* Consolidate GraalVM deps bumps

---------

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: bryan <bryan.maass@gmail.com>
Co-authored-by: Cam Saul <github@camsaul.com>
2025-08-11 20:14:03 -07:00
github-automation-metabase
73763282b7 Bump org.apache.logging.log4j/log4j-core from 2.24.3 to 2.25.1 (#60904)
* Bump org.apache.logging.log4j/log4j-core from 2.24.3 to 2.25.1

Inspect dependency changes here:

* Merge other Log4j version bumps

---------

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: bryan <bryan.maass@gmail.com>
Co-authored-by: Cam Saul <github@camsaul.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
2025-08-11 20:12:16 -07:00
github-automation-metabase
43f07d3c88 Bump net.clojars.wkok/openai-clojure from 0.22.0 to 0.23.0 (#61776)
Inspect dependency changes here: https://github.com/wkok/openai-clojure/blob/0.23.0/CHANGELOG.md
2025-08-12 02:32:30 +00:00
github-automation-metabase
ecc7d9ba86 Bump io.github.clojure/tools.build from 0.10.9 to 0.10.10 (#61775)
Inspect dependency changes here: https://github.com/clojure/tools.build/blob/v0.10.10/CHANGELOG.md

Co-authored-by: bryan <bryan.maass@gmail.com>
2025-08-12 02:32:22 +00:00
github-automation-metabase
c9205461c1 Bump com.google.cloud/google-cloud-bigquery from 2.51.0 to 2.54.0 (#61778)
Inspect dependency changes here: https://github.com/googleapis/java-bigquery/blob/v2.54.0/CHANGELOG.md
2025-08-12 02:32:08 +00:00
github-automation-metabase
65974dc29d Bump clj-http/clj-http from 3.13.0 to 3.13.1 (#60246)
Inspect dependency changes here: https://github.com/dakrone/clj-http/blob/3.13.1/changelog.org

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
2025-08-12 02:31:52 +00:00
github-automation-metabase
b452abc839 Bump djblue/portal from 0.59.2 to 0.60.2 (#61997)
Inspect dependency changes here: https://github.com/djblue/portal/blob/0.60.2/CHANGELOG.md

Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
2025-08-12 01:52:21 +00:00
github-automation-metabase
debcec5881 Bump io.github.seancorfield/build-uber-log4j2-handler from v2.24.0 to v2.25.1 (#60900)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
2025-08-11 18:19:12 -07:00
github-automation-metabase
2f15322530 Bump io.netty/netty-buffer from 4.2.1.Final to 4.2.3.Final (#61250)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
2025-08-11 18:17:56 -07:00
Aleksandr Lesnenko
8783c54480 improve state management UXW-463 UXW-450 2025-08-11 22:12:02 -03:00
github-automation-metabase
cce80c3f1d Bump diehard/diehard from 0.11.13 to 0.12.0 (#59517)
Inspect dependency changes here: https://github.com/sunng87/diehard/blob/0.12.0/CHANGELOG.md

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
2025-08-12 00:43:56 +00:00
github-automation-metabase
5647025c0c Bump com.github.seancorfield/next.jdbc from 1.3.1002 to 1.3.1048 (#59516)
Inspect dependency changes here: https://github.com/seancorfield/next-jdbc/blob/v1.3.1048/CHANGELOG.md

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
2025-08-12 00:41:28 +00:00
github-automation-metabase
ebb0d64993 Bump babashka/fs from 0.5.25 to 0.5.26 (#59146)
Inspect dependency changes here: https://github.com/babashka/fs/blob/v0.5.26/CHANGELOG.md

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
2025-08-12 00:06:08 +00:00
Denis Berezin
96a1ed0b8f UX-west FE bug fixes (#61948)
* UXW-466 enterprise-login-page-logo

* fix dash subscription popover cut off #59888

* Fix collection menu tooltips position #59379
2025-08-12 02:13:18 +03:00
Brad Anderson
9f8331cb63 UXW-462 Fix issue where you can write markdown in metabot blocks 2025-08-11 18:37:46 -04:00
Aleksandr Lesnenko
65bbe6429e feedback on the command 2025-08-11 19:21:19 -03:00
Aleksandr Lesnenko
7b367b6c0f refactor 2025-08-11 19:21:19 -03:00
Brad Anderson
c328d7f7e0 UXW-462 Fix issue where sometimes custom tiptap node tries to re-render too quickly resulting in an error 2025-08-11 18:09:44 -04:00
Brad Anderson
08cec1d1f5 UXW-462 Adds database picker in metabot block 2025-08-11 18:00:31 -04:00
Nick Fitzpatrick
5c489b9c95 Markdown Loki Test 2025-08-11 17:44:02 -04:00
Aleksandr Lesnenko
4a079f203a bump padding 2025-08-11 18:20:52 -03:00
Aleksandr Lesnenko
1fc9390906 updated styles 2025-08-11 18:15:18 -03:00
github-automation-metabase
8d6ba8f390 Bump ring/ring-mock from 0.6.1 to 0.6.2 (#62003)
Inspect dependency changes here: https://github.com/ring-clojure/ring-mock/compare/0.6.1...0.6.2
2025-08-11 21:14:08 +00:00
Edward Paget
3164d5d866 fix: kondo warning on unused var 2025-08-11 16:13:22 -05:00
github-automation-metabase
6ee5cbf07a Bump com.nimbusds/nimbus-jose-jwt from 10.4 to 10.4.1 (#62005)
Inspect dependency changes here:
2025-08-11 21:13:05 +00:00
github-automation-metabase
aba008b9b7 Bump org.apache.tika/tika-core from 3.1.0 to 3.2.2 (#61998)
Inspect dependency changes here:
2025-08-11 21:08:59 +00:00
github-automation-metabase
a9a088ef1f Bump com.oracle.database.jdbc/ojdbc17 from 23.8.0.25.04 to 23.9.0.25.07 (#61780)
Inspect dependency changes here:

Co-authored-by: dpsutton <dan@dpsutton.com>
2025-08-11 21:05:45 +00:00
Edward Paget
71d915b7d0 feat: support serdes on documents (#62032) 2025-08-11 16:04:13 -05:00
github-automation-metabase
3fc274a4cf Bump com.fasterxml.woodstox/woodstox-core from 7.1.0 to 7.1.1 (#58758)
Inspect dependency changes here: https://github.com/FasterXML/woodstox/compare/woodstox-core-7.1.0...woodstox-core-7.1.1

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
2025-08-11 20:59:30 +00:00
bryan
ba8f1f3ccf mage: Replace blank lines with empty strings + mage ls (#61987) 2025-08-11 20:55:21 +00:00
github-automation-metabase
db122be70b Bump com.amazon.redshift/redshift-jdbc42 from 2.1.0.32 to 2.1.0.34 (#62004)
Inspect dependency changes here: https://github.com/aws/amazon-redshift-jdbc-driver/blob/v2.1.0.34/CHANGELOG.md
2025-08-11 20:42:57 +00:00
github-automation-metabase
9781d9b7cd Bump cider/cider-nrepl from 0.55.7 to 0.57.0 (#60245)
Inspect dependency changes here: https://github.com/clojure-emacs/cider-nrepl/blob/v0.57.0/CHANGELOG.md

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: bryan <bryan.maass@gmail.com>
2025-08-11 13:38:13 -07:00
github-automation-metabase
3feae381dd Bump org.xerial/sqlite-jdbc from 3.49.1.0 to 3.50.3.0 (#61485)
Inspect dependency changes here: https://github.com/xerial/sqlite-jdbc/compare/3.49.1.0...3.50.3.0
2025-08-11 13:31:34 -07:00
Edward Paget
bbe95ee859 fixup! pinning reconcilation with documents 2025-08-11 15:26:37 -05:00
github-automation-metabase
9c2156a025 Bump commons-net/commons-net from 3.11.1 to 3.12.0 (#61773)
Inspect dependency changes here:
2025-08-11 13:07:45 -07:00
Edward Paget
6542c95758 feat: support pinning documents 2025-08-11 14:51:17 -05:00
Riley Thompson
4ac4d34af7 handle nested arrays (#61977) 2025-08-11 15:44:04 -04:00
github-automation-metabase
9a4c0bb7c3 Bump io.netty/netty-common from 4.2.2.Final to 4.2.3.Final (#61251)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
2025-08-11 12:36:37 -07:00
github-automation-metabase
ebd8ecb06c Bump com.github.seancorfield/honeysql from 2.7.1310 to 2.7.1325 (#61481)
Inspect dependency changes here: https://github.com/seancorfield/honeysql/blob/v2.7.1325/CHANGELOG.md

Co-authored-by: bryan <bryan.maass@gmail.com>
2025-08-11 12:27:50 -07:00
github-automation-metabase
98a9b04fb1 Bump thheller/shadow-cljs from 3.1.4 to 3.1.8 (#61484)
Inspect dependency changes here:

Co-authored-by: bryan <bryan.maass@gmail.com>
2025-08-11 12:26:11 -07:00
github-automation-metabase
19f1e5517a Bump djblue/portal from 0.59.2 to 0.60.1 (#61774)
Inspect dependency changes here: https://github.com/djblue/portal/blob/0.60.1/CHANGELOG.md

Co-authored-by: bryan <bryan.maass@gmail.com>
2025-08-11 12:25:13 -07:00
Jeff Bruemmer
ee248d5fff fix typos (#62029) 2025-08-11 17:09:12 +00:00
Jacob Joseph
b3d4d009aa Update filters.md (#61983)
we removed the gear icon from filters on dashboard editing, but the docs were still referring to it
2025-08-11 12:02:04 -05:00
Gustavo Saiani
d2f01b00eb Remove promo banner (#62023) 2025-08-11 14:01:01 -03:00
Sloan Sparger
a076cca120 [Metabot] Remove non-streaming metabot code (#61988)
* remove streaming code

* remove comment
2025-08-11 11:57:10 -05:00
Riley Thompson
42e48c71e0 Enable DB routing for Starburst and Presto (#61949)
* enable db routing for starburst

* enable presto routing
2025-08-11 16:23:59 +00:00
Aleksandr Lesnenko
88ef82938d fix command 2025-08-11 13:23:46 -03:00
Riley Thompson
b3a9f566df Enable athena routing (#61934) 2025-08-11 11:22:39 -04:00
Brad Anderson
9477b72420 Fix issue where charts sometimes don't get added via metabot when inserted in the middle of a document 2025-08-11 11:09:51 -04:00
Aleksandr Lesnenko
5ef76f8592 fix visualizer cards don't have dashcard description setting (#62006) 2025-08-11 11:51:21 -03:00
Jeff Bruemmer
fbc7f9668d Update embedded-analytics-js.md (#62012) 2025-08-11 08:17:27 -05:00
Nicola Mometto
4c79e29cca Archive deleted tables (#61592)
* add migration

* add table before update to correctly set deactivated_at

* no need for schema

* archive tables

* tests

* note

* include active to index

* guard against nil changes

* doc

* guard against archival

* note

* prper count

* serdes/test

* extra safety guard

* more accurate logging

* use epocSecond

* more error validation

* change suffix

* add rollback mig

* move migrations to v56

* safer
2025-08-11 14:11:12 +01:00
Thomas Schmidt
0ab4df1655 Support markdown links in Metabot response (#61732) 2025-08-11 06:55:22 +00:00
Aleksandr Lesnenko
38bd513835 fix command search 2025-08-09 15:25:14 -03:00
Phoomparin Mano
4b128f68a9 Update parameters section subtitle for questions in embed flow (#61968) 2025-08-09 21:44:36 +07:00
Lodewijk Wensveen
b0687c26d2 fix(formatting): round compact numbers with Intl; preserve legacy k casing (closes #59454) (#61645)
* test(formatting): add compact rounding edge cases (refs #59454)

* fix(formatting): round compact numbers with Intl; preserve legacy k casing (closes #59454)

---------

Co-authored-by: Denis Berezin <denis.berezin@metabase.com>
2025-08-09 03:29:46 -04:00
Cam Saul
c6674c0185 [Lib] make visible-columns only work on stages (#61943)
* Make `visible-columns` stage-only

* More minor caching improvements
2025-08-09 00:35:00 +00:00
Aleksandr Lesnenko
e4c92ff6e2 placeholder 2025-08-08 18:46:12 -03:00
Aleksandr Lesnenko
4cbb2297a5 mention + command feedback 2025-08-08 18:30:14 -03:00
Edward Paget
54ebe17696 fix: handle inadvertent documents in oss tests 2025-08-08 16:18:44 -05:00
John Swanson
69b313f83e Format datetimes with user locale (#61680)
Bind the `*formatting-locale*` to the user's locale (falling back to the
system locale).

Also use `i18n/site-locale` instead of `(Locale. (system/site-locale))`,
which Does The Right Thing instead of incorrectly calling the
single-arity version of `Locale.`.

Fixes [UXW-208: Dashboard card download result using date locale from
instance and ignore user
locale](https://linear.app/metabase/issue/UXW-208/dashboard-card-download-result-using-date-locale-from-instance-and)

Fixes [UXW-142: Date formatting has undefined behavior (broken on my machine)](https://linear.app/metabase/issue/UXW-142/date-formatting-has-undefined-behavior-broken-on-my-machine)
2025-08-08 15:41:27 -05:00
Marcos
d76385094e fix examples in timezone docs (#61979) 2025-08-08 14:36:42 -06:00
Edward Paget
41674dd1de fix: final in-place search test fixes 2025-08-08 15:12:03 -05:00
Denis Berezin
772e56a62e Fix tabs alignment for horizontal tabs with grow (#61895)
* Fix tabs alignment for horizontal tabs with grow

* Review fixes
2025-08-08 23:10:55 +03:00
Edward Paget
9595d9493d fix: more in-place search fixes for documents 2025-08-08 14:47:04 -05:00
Edward Paget
3c3a8dd127 fix: set type to :question dashboard_id to nil 2025-08-08 14:31:46 -05:00
Edward Paget
4373216910 fix: migration order 2025-08-08 14:25:58 -05:00
Edward Paget
efbfc502f1 fix: in_place search fixes and test fixes 2025-08-08 14:17:42 -05:00
Oleksandr Yakushev
ab2eb8a1f9 [perf] Fix metabase.util.performance cljc-related issues (#61847)
* [perf] Fix metabase.util.performance cljc-related issues

* [perf] Move faster walk implementation into clj-only namespace
2025-08-08 22:12:39 +03:00
Denis Berezin
d1dd7964c2 fix: update loki after icon change (#61974) 2025-08-08 21:48:06 +03:00
Edward Paget
9bd2243573 fix: emit documentment read on api get 2025-08-08 13:21:52 -05:00
Edward Paget
9c2838341e feat: documents in search
Also supports view_counts and last_viewed_at for documents
2025-08-08 13:21:51 -05:00
Edward Paget
a60e02dd1e fix: remove documents token hack 2025-08-08 13:21:51 -05:00
Edward Paget
92e9d6360d fix: set null on collection cascade for documents
mirrors behavior for dashboards and cards
2025-08-08 13:21:51 -05:00
Nick Fitzpatrick
c6f35e0393 initial e2e tests 2025-08-08 14:58:13 -03:00
Aleksandr Lesnenko
89b4bbe920 fix metadata fetching 2025-08-08 14:29:51 -03:00
Phoomparin Mano
a1206f3886 Fix pivot tables in static embedding having white cell backgrounds in dark mode (#61939) 2025-08-08 23:16:07 +07:00
Nicolò Pretto
6c24ddee41 test(embed-js): migrate tests to use custom element api (#61965)
* test(embed-js): migrate tests to use custom element api

* use CreateApiKeyResponse

* Update e2e/test/scenarios/embedding/sdk-iframe-embedding/sdk-iframe-embedding.cy.spec.ts

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

---------

Co-authored-by: Phoomparin Mano <poom@metabase.com>
2025-08-08 15:51:03 +00:00
Aleksandr Lesnenko
0ab1d4ccb6 no emojis and markdown downloading 2025-08-08 12:44:25 -03:00
Aleksandr Lesnenko
ea64672746 drop emojis 2025-08-08 12:44:25 -03:00
Nicolò Pretto
e4afb704fe test(simple-embed): add test for is-saved-enabled, initial-sql-parameters and target-collection for metabase-question (#61830) 2025-08-08 17:14:08 +02:00
Brad Anderson
b9a446a933 Localizes "Created with Metabot" text 2025-08-08 10:21:15 -04:00
Brad Anderson
7bd57d1d66 MetabotEmbed polish:
* Prevents prompt from highlighting when you hit "Run" (potentially bringing up the editor bubble menu).
* Prevents useEffect hook from running way more than it needs to.
* Adds margin below MetabotEmbed.
* Hitting escape with nothing in the textarea will now remove the MetabotEmbed block.
* Makes layout less janky when Metabot responds with a long error message.
2025-08-08 09:55:47 -04:00
Edward Paget
aedb754045 fix: login_attrs -> jwt_attrs for jwt users (#61940)
* fix: login_attrs -> jwt_attrs for jwt users

Enables the new behavior where login attributes persist between jwt
logins for existing jwt-based users.

* fixup! add rollback migration

* fixup! yaml syntax
2025-08-08 08:50:33 -05:00
Alex Yarosh
1991635e2a docs: embedded analytics js (#61955)
Co-authored-by: Nicolò Pretto <info@npretto.com>
Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-08-08 10:57:40 +01:00
Aleksandr Lesnenko
dfeafc9489 do not show bubble menu on disallowed nodes 2025-08-08 01:42:49 -03:00
Aleksandr Lesnenko
9f0c6d1e2e fix replace question 2025-08-08 01:40:50 -03:00
Aleksandr Lesnenko
e716d1d253 clean 2025-08-08 01:37:28 -03:00
Timothy S. Dean
8ad7691ba9 Fix revision history for old cards (#61755)
Cards created before v0.55 lack the `:card_schema` field in their revision history. When loading these old revisions, the system throws "Cannot SELECT a Card without including :card_schema" because the Card model's `after-select` expects this field to always be present.

Existing code adds the legacy default `card_schema` value (20) in `revert-to-revision!`. This PR adds the value (20) to old revisions in `revision.clj`'s `after-select`.

This allows users to view revision history and revert cards that were created before the v0.55 upgrade.
2025-08-07 19:47:40 -06:00
Aleksandr Lesnenko
f7c8221468 improved mention and command 2025-08-07 22:10:42 -03:00
Denis Berezin
30df0133e7 Fix navigate forwards to a Details modal for QB (#61835)
* Fix navigate forwards to a Details modal for QB

* Add e2e tests

* Fix e2e tests
2025-08-08 03:05:35 +03:00
AlessioLaiso
c2cee019de Updates the info and info_filled icons (#61938)
* Updates the info and info_filled icons

* use currentcolor fill instead

* remove fixed width and height and rely on viewBox

* tweak svg paths slightly

* fix y position

---------

Co-authored-by: Phoomparin Mano <phoomparin@gmail.com>
Co-authored-by: Maz Ameli <maz@metabase.com>
2025-08-07 21:06:54 +00:00
Denis Berezin
812d1eceef Fix creator list UI on search page (#61936) 2025-08-07 23:44:16 +03:00
Brad Anderson
4135955236 UXW-461 Save button always shows up for new documents (and user has necessary permissions) 2025-08-07 16:24:52 -04:00
Brad Anderson
b2a0c144ba UXW-461 Prevents jump when Save button appears/disappears. Also adds subtle fade-in transition when it appears. 2025-08-07 16:13:11 -04:00
Fraser
d7653edd9d Upgrade fetch mock to v12 (#61857) 2025-08-08 07:28:15 +12:00
Brad Anderson
9a56a9e96b UXW-459 Fix issues with LeaveRouteConfirmModal and new documents 2025-08-07 15:25:57 -04:00
Nick Fitzpatrick
436840eac9 hide object detail row in document tables 2025-08-07 16:18:07 -03:00
Cam Saul
f294fb48b7 Fix QP preprocessing middleware disabling Malli checks (#59324)
* Fix QP preprocessing middleware disabling Malli checks

* Test fix

* Yet another fix

* WIP

* Update preprocess.clj
2025-08-07 12:17:28 -07:00
Aleksandr Lesnenko
19f3c013aa fix annoying tooltip (#61883) 2025-08-07 15:36:39 -03:00
Brad Anderson
ab0bd1b8ff UXW-459 Fix issue where creating a new document when starting from another document overwrites the existing document (and shows previous document's metadata in new document) 2025-08-07 14:27:13 -04:00
Cam Saul
5edd511b5b Finish untangling the metadata knot (#61767)
* Ensure we're actually using a cached metadata provider in tests

* Remove profiling code

* Restore accidentally-deleted `native-query-snippet` fn

* Fix accidental edits

* Fix metadata calculation for joins that contain joins

* All Lib tests are passing

* The PR that fixes everything [WIP] [ci skip]

* Test fix 🔧

* Sort namespaces

* Docstring formatting

* [Lib tests] 100 failures, 33 errors.

* [Lib] 98 failures, 24 errors.

* [Lib] 76 failures, 17 errors.

* [Lib] 49 failures, 4 errors

* [Lib] 46 failures, 2 errors.

* [Lib] 15 failures, 0 errors.

* [Lib] 13 failures, 0 errors.

* All Lib tests passing

* [QP tests] 2 failures, 1 error.

* Revert :encode/cache-key

* Minor caching performance improvements

* Fix nest breakouts/cumulative aggregations

* Add some more stuff to lib.core

* Test fixes/cljfmt/kondo

* Test fix 🔧

* Test fixes and fix some busted tests

* OMG CACHE SO MUCH FASTER!!!!!

* Fix MongoDB

* Fix tests and support mock segments

* Code cleanup and test fixes 🔧

* Test fix 🔧

* Fix set versus map

* PR feedback

* cljfmt

* More PR feedback and tighten up the field resolution code a bit

* Some schema cleanup

* PR feedback

* PR feedback

* Add TODO

* PR feedback

* Remove implementation of join `visible-columns` which is the same as :default

* Remove unused Card visible columns

* Restore the Card implementation of visible columns in THIS PR.
2025-08-07 11:25:42 -07:00
Nick Fitzpatrick
c800fb73d0 Handle URL slugs, remove version code from document page, handle 404 and 403 2025-08-07 14:43:28 -03:00
Brad Anderson
0463d74f76 UXW-453 Fix 404 when clicking draft card title 2025-08-07 13:36:34 -04:00
Nick Fitzpatrick
f8924beba5 add title to untitled docs 2025-08-07 13:54:45 -03:00
Phoomparin Mano
b46048533c fix(sdk): send CORS headers for error messages when embedding is disabled (#61808) 2025-08-07 23:46:32 +07:00
Edward Paget
92eb7e62a1 fix: add entity id column to documents 2025-08-07 11:27:27 -05:00
Brad Anderson
6351f1c4ef Replaces hard-coded metabot-generated card title with title from the /generate-content response (or translates a default title if none provided) 2025-08-07 12:25:19 -04:00
Cam Saul
d0c0516fa2 Fix busted tests from #53373 (#61899) 2025-08-07 09:06:33 -07:00
Edward Paget
eeb46a43f1 fix: jwt auth doesn't wipe login_attributes (#61927)
Missed this from the big remerge, where login attributes were being
reset to an empty value on jwt login. Also fixed not including the
jwt-group-sync on the initial formik state.
2025-08-07 11:05:02 -05:00
Phoomparin Mano
31412ebe1e Remove Beta badge from Embedded Analytics JS (#61920) 2025-08-07 22:45:47 +07:00
Phoomparin Mano
5b885a5447 Temporarily replace docs and quickstart with "Try it out" (#61926) 2025-08-07 22:45:29 +07:00
Nicolò Pretto
8df9924e76 fix(sdk): targetCollection should take precedence over recent dashboard (#61874) 2025-08-07 17:40:39 +02:00
Cam Saul
f6d3a73bb3 Add mbql-5-query macro (#61898)
* Add `mbql-5-query` macro

* Remove new test
2025-08-07 09:39:55 -06:00
Edward Paget
eb8f2d91d0 fix: foreign key indexes 2025-08-07 10:34:07 -05:00
Aleksandr Lesnenko
8c5adc5f85 fixed drills & query editing for metabot cards 2025-08-07 10:37:14 -04:00
Brad Anderson
a792b1706e Updates MetabotEmbed to use most up-to-date api contract 2025-08-07 10:37:14 -04:00
Brad Anderson
268352d02b Stubs out the necessary updates to make MetabotEmbed work with an UnsavedCard from the BE rather than a full Card 2025-08-07 10:37:14 -04:00
Brad Anderson
acafad1b6a Updates MetabotEmbed to use most up-to-date api contract 2025-08-07 10:37:14 -04:00
Brad Anderson
4f95b0ebb7 Updates MetabotEmbed "stop generating" functionality to work with regular (non-streaming) api call 2025-08-07 10:37:14 -04:00
Brad Anderson
92017cfe7c Updates MetabotEmbed to always use draft cards 2025-08-07 10:37:14 -04:00
Brad Anderson
9ee59951ae Updates MetabotEmbed to work with upcoming BE changes 2025-08-07 10:37:14 -04:00
Luiz Arakaki
2581cc50b4 add snowflake csid as Metabase_Metabase (#61866) 2025-08-07 14:14:37 +00:00
Nick Fitzpatrick
403bf4eafd Show tooltip with precise time in document metadata 2025-08-07 11:12:24 -03:00
Nick Fitzpatrick
010af9dc10 undo moves should work once archived is boolean 2025-08-07 11:12:24 -03:00
Cam Saul
be36bd367d More Lib metadata caching improvements and faster remove-inactive-field-refs (#61897)
* More Lib metadata caching improvements

* Faster remove-inactive-field-refs middleware
2025-08-07 10:06:22 -04:00
Roman Abdulmanov
064110eaa2 feat: endpoint for retrieve embedding token from jwt (#61540)
* Added to_session endpoint

* Added to_session endpoint

* Added to_session endpoint

* Added to_session endpoint

* Added to_session endpoint

* Some small cleanup

- remove unnecessary try/catch clauses

- rename/rework unnecessary public wrapper fn

- make `jwt` required for the endpoint

- only return session token, not any JWT data

* Test fixes

---------

Co-authored-by: John Swanson <john.swanson@metabase.com>
2025-08-07 08:39:01 -05:00
Edward Paget
8c1e179da7 fix: bad var reference in tests 2025-08-07 08:36:37 -05:00
Phoomparin Mano
794d472d29 Tag an embed flow test "persists chart embed options" as flaky (#61865) 2025-08-07 20:28:12 +07:00
Tony-metabase
dd9668fd41 Fix Payload Type Typo for Notifications (#61823)
* Fix Payload Type for Notifications

* Update api.html
2025-08-07 14:15:26 +02:00
Nicolò Pretto
5a2c86ad40 chore(sdk): post release 56 workflow changes (#61909)
* chore(sdk): post release 56 workflow changes

* update changelogs
2025-08-07 12:22:14 +02:00
Nicolò Pretto
35a47b2418 change rspack to allow testing custom domains locally easier (#61800) 2025-08-07 09:31:05 +00:00
Jakub Chodorowicz
304d4cda21 add connection string form prefill feature (#61323)
* wip: add connection string form prefill feature;

add tests

* Refactor deprecated export format

* Skip jdbc:prefix when parsing

* Add snowflake support

* Add success message

* Add a feedback message when pasting a connection string

* Refactor field mapping

* wip use regexes to parse connection strings

* make port optional

* Add snowflake

* Add bigquery and clickhouse

* Add Athena support

* Add Amazon Redshift

* Improve clickhouse

* Add failure message

* Add databricks and druid

* Add MySQL

* Add presto

* Adapt snowflake, create objectToString helper

* Add Apache Spark

* Add SQL server

* Add Oracle

* Add Starburst

* Add vertica

* Reset connection string input on change of key

* Map only when select db and protocol matches

* Fix and refactor semicolon params parsing

* Add tracking to database string uri parsing

* create mapping config with placeholders

use placeholders also in tests

* Create engineKeys types

* Create Cypress paste command using synthetic react events

* Use fade transition for feedback animation

* Add e2e tests for connection strings form filling

* fill in display name from connection string

* Add succes failure text test

* Validate form after filling in fields

* Use more standard fallback for paste

* Remove unused regex parsing implementation

* use mass setFields for fomik setting values

* Add test case for clearing existing values, including engine select field

* Fix form fields being overwritten when pasting connection string

* Add onPaste behavior and use simpler paste mechanism in Cypress

* Fix typo

* Extract and use engineKey type and isEngineKey guard

* Make connection string field controlled by formik

Fix submit values

Fix type error

* Remove unneeded prop justify

* Run regex just for currently selected db

* Fix naming of the test file

* Add e2e db connection test

* Fix missing path in th rspack emedding setup

* Explain why connection string is not sent to BE

* use pojo instead of map for db engines config

* Revert to * export to maintain consistency

* fix connection string test

* create a more meaningful type name
2025-08-07 11:25:36 +02:00
Nicolò Pretto
211f371fd5 mock /app/embed.js in test to the dev server to have up to date version (#61598)
in e2e tests
2025-08-07 11:03:46 +02:00
Aleksandr Lesnenko
40368f85fb l10n 2025-08-06 22:29:48 -03:00
Aleksandr Lesnenko
978e12c2d6 swap icon 2025-08-06 22:26:38 -03:00
Cam Saul
3a5e8d1471 QP Binning middleware => Lib (#61530)
* QP Binning middleware => Lib

* Test fixes 🔧

* Resolution should propagate fingerprints from card metadata

* Revert accidental snapshots skip
2025-08-06 16:08:45 -07:00
Aleksandr Lesnenko
ea4c347006 UXW-416: replace question should replace only 1 question 2025-08-06 19:57:52 -03:00
Aleksandr Lesnenko
5556654506 UXW-400: formatting floating menu 2025-08-06 19:19:34 -03:00
Nathan Voxland
4ea6c16f19 Merge remote-tracking branch 'origin/feature/reports' into feature/reports 2025-08-06 16:48:59 -05:00
Nathan Voxland
6620040235 New metabot documents API 2025-08-06 16:48:47 -05:00
Edward Paget
f809d7747c fix: module sort 2025-08-06 16:36:22 -05:00
Edward Paget
181e8f31d2 fix: tests and kondos 2025-08-06 16:21:47 -05:00
Edward Paget
83bd4ba534 Merge branch 'master' into feature/reports 2025-08-06 15:50:29 -05:00
Edward Paget
f770d21cdf fix: for OSS tests 2025-08-06 15:48:48 -05:00
eliotmetabase
93ec57af84 Update Admin Webapp and DashViz to UX West (#61849)
* Update teams and modules

* Update codeowners
2025-08-06 13:48:23 -07:00
lbrdnk
e5b8670c6d Add MB_SYNC_LEAF_FIELDS_LIMIT setting (#61842)
* Add MB_MONGODB_FIELD_LIMIT setting

* Update tests

* Make the setting generic
2025-08-06 22:40:17 +02:00
Edward Paget
f6f6b2d3a9 fix: ordering of migrations for mysql 2025-08-06 15:36:19 -05:00
Edward Paget
745ab32bde fix: tests and lints 2025-08-06 15:33:44 -05:00
Nick Fitzpatrick
6760658aec App Bar Breadcrumbs for documents 2025-08-06 17:18:47 -03:00
lbrdnk
88b979623a Check data permissions of result metadata columns (#61740)
* Add result_metadata perms check to qp

* Check result metadata view data on card put

* Throw the exception

* Test

* Add perm check for ad-hoc referencing cards

* Docstrings

* Use seq

* Order of checks

* Apply suggestions from code review

Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>

* Simplify into

---------

Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
2025-08-06 22:11:10 +02:00
Edward Paget
bad6bccac2 fix: require non-blank string for name 2025-08-06 15:03:50 -05:00
Edward Paget
7448009633 feat: add document delete endpoint 2025-08-06 14:59:33 -05:00
Edward Paget
7418a137c8 fix: always add documents to bookmark lookup 2025-08-06 14:42:37 -05:00
Edward Paget
40269ca9c0 fix: add perms info to documents in collections 2025-08-06 14:41:31 -05:00
Maz Ameli
458913d017 Add table link to metadata page (#61764)
* add table link to metadata page

* Table

* Add a e2e test

* Add a e2e test

---------

Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2025-08-06 19:21:50 +00:00
Edward Paget
42bee66fba fix: hide documents in collection items if not EE 2025-08-06 14:05:14 -05:00
Edward Paget
76ee0b6f8c feat: allow documents to be bookmarked 2025-08-06 13:52:35 -05:00
Aleksandr Lesnenko
912aca8811 fix UXW-412 again 2025-08-06 15:13:33 -03:00
Brad Anderson
2e9f07ede2 Fix issue where submitting empty metabot prompt (by hitting "Run" or cmd+enter) makes it spin forever 2025-08-06 14:00:11 -04:00
Nick Fitzpatrick
9568b9956d Document Collection Item Caching 2025-08-06 14:23:13 -03:00
John Swanson
d9373fa6d8 Include columns that are not specifically excluded (#61761)
When streaming data for a query, we were only including columns if a)
the viz settings for the column were completely empty, or if b) the viz
settings for the columns included specifically enabling that column.

The problem occurs most clearly for things like native SQL queries.

If you construct a query like

```
SELECT id FROM venues;
```

and then set the column viz settings to *something* non-empty (most easy
way: just hide the `id` column and then show it again), and then save
the card, then change the query to:

```
SELECT id, name FROM venues;
```

then if you download the CSV for this card (even after saving it!)
you'll get a result that only contains `id` and not `name`.

A few tests needed to change here because they were implicitly assuming
the old behavior, but I don't think that's entirely intentional. This
behavior was different than the behavior in the Metabase application
proper, where UI results would show all the columns (in the above
example, they'd immediately show `id` *and* `name`).
2025-08-06 10:20:08 -07:00
Alex Yarosh
34e884c47a docs: jwt docs (#61876)
* jwt edits

* Optimized 2 images, saved 188.8 KB (46.0% smaller)

* why are y'all 'waiting for the status to be reported'

---------

Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-08-06 16:59:46 +00:00
Edward Paget
80867e1335 feat: allow documents to be archived 2025-08-06 11:49:50 -05:00
Timofey Kachalov
ee9d5d3832 feat(sdk): Add "SDK incompatibility with instance" banner (#61859) 2025-08-06 19:34:36 +04:00
Brad Anderson
7894f1e45e Fix issue where temporary implementation of metabot block can't create questions 2025-08-06 11:20:10 -04:00
Riley Thompson
230784e3fb Always set connection role for Redshift (#61869) 2025-08-06 15:16:03 +00:00
Nick Fitzpatrick
fd4a621603 document entity 2025-08-06 12:15:28 -03:00
Phoomparin Mano
8119bc5c8c feat(sdk): add translation context and aria-label to embedding sdk settings (#61856) 2025-08-06 21:42:42 +07:00
Phoomparin Mano
94570c4c1b Add color reset button to embed flow (#61839) 2025-08-06 21:40:16 +07:00
Timofey Kachalov
aade35f0db refactor(sdk): Minor imports/code adjustments for Hosted Bundle (#61862) 2025-08-06 18:11:28 +04:00
Edward Paget
0486d547d3 feat: include revision info in collection tree res 2025-08-06 09:08:37 -05:00
Edward Paget
ec7163091a feat: revision history for documents 2025-08-06 08:57:32 -05:00
Timofey Kachalov
289e00d760 refactor(sdk): Add styles for custom SDK spinner loader (#61864) 2025-08-06 13:25:25 +00:00
Jakub Chodorowicz
7428fee268 Prg-108-add-gem-icon-and-free-trial-cta-in-interactive-embedding (#61714)
* Create Upsell CTA component

* Replace pro labe with gem in embed upsell

* Create and use UpsellCta in Embedding Upsell

* Rebuiltd the logic for showing links and upsells in embedding modal

* Add UpsellCta tests

* Remove unneeded hook

Fix test and URL rendering for hosted

* Remove unneeded hook useInteractiveEmbeddingCta

* Fix test not running in target build (OSS)

* Fix embedded modal ee end premium cloud tests

* Add missing translation tag

* Use single upsellcta styling
2025-08-06 11:51:04 +02:00
Timofey Kachalov
ffad0df277 refactor(sdk): Prepare e2e code for Hosted Bundle (#61852) 2025-08-06 13:12:08 +04:00
Nicolò Maria Mezzopera
d86d74ba5f PR-envs and ci skip should work together (#61448)
* feat: promote uberjar as the single uberjar creation workflow

* chore: remove useless   reuse-existing-artifacts

* refactor: streamline PR environment workflow by removing wait_for_uberjar input and simplifying uberjar retrieval

* fix: ensure default editions are used if container info retrieval fails

* chore: don't build uberjar outside of run-tests

* fix: update uberjar artifact name to use the current SHA instead of PR head SHA

* fix: update uberjar artifact names to use PR head SHA when available

* fix: update uberjar workflow to simplify input parameters and improve conditional checks

* fix: add concurrency settings to uberjar workflow

* fix: update documentation condition in run-tests workflow

* fix: add default node version

* fix: update conditions for container info retrieval and containerization steps

* fix: update default node version to 22 in uberjar workflow

* Update .github/workflows/uberjar.yml

* Update .github/workflows/uberjar.yml

---------

Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
2025-08-06 09:08:29 +00:00
Phoomparin Mano
141cff0fe8 Fix upsell button and auth links in embedding admin settings (#61802) 2025-08-06 15:21:14 +07:00
Timofey Kachalov
cc758a125d refactor(sdk): Convert webpack.embedding-sdk.config to rspack and prepare for Hosted Bundle (#61822) 2025-08-06 10:09:46 +04:00
Aleksandr Lesnenko
287e496a1b wip but working sql query editor in documents 2025-08-05 23:28:00 -03:00
Cam Saul
4b8d3a1dc8 Flaky test fix for metabase.queries.api.card-test/we-can-get-a-list-of-dashboards-a-card-appears-in (#61619)
* Flaky test fix for metabase.queries.api.card-test/we-can-get-a-list-of-dashboards-a-card-appears-in

* Fix formatting

* cljfmt

* Fix Kondo warning
2025-08-05 16:18:13 -07:00
Aleksandr Lesnenko
2ac44861b5 Persist cards when saving document (#61818)
* chore: remove document version model

* persist cards only when saving documents

* chore: remove in_document type

* feat: return document creator

* feat: save cards with parameters pass in as cards

in POST and PUT requests to documents

* chore: exclude doc cards from where shouldn't be

search, recents, collection items

* chore: fixup search and card tests

* contract

* feat: update document ast with new card ids

* fix: report -> document in collection api

* fix: ws

* feat: clone cards not associated with document

* chore: add tests for document permissions

* fix contract

* fetch root collection

* update message

* must be working now

* fix sidebar

---------

Co-authored-by: Edward Paget <ed.paget@gmail.com>
2025-08-05 19:59:20 -03:00
Denis Berezin
47d994182c Merge branch 'master' into feature/reports
# Conflicts:
#	frontend/src/metabase/redux/app.ts
2025-08-06 00:18:15 +03:00
Denis Berezin
17435642ef Fix some CI issues 2025-08-06 00:03:50 +03:00
Case Nelson
c9106f66f1 fix: handle arrays in sparksql (#61690) 2025-08-05 20:58:21 +00:00
Alexander Polyankin
efac2b8f96 [Release blocker] Revert fuzzy matching changes (#61828)
* Revert fuzzy matching changes

* Revert fuzzy matching changes

* Revert fuzzy matching changes

* Revert fuzzy matching changes

* Revert fuzzy matching changes

* Test fixes
2025-08-05 15:55:38 -04:00
Phoomparin Mano
ab30c325db Rename embed-iframe route to embed-js (#61803) 2025-08-06 02:47:46 +07:00
Denis Berezin
a917ade608 Merge branch 'master' into feature/reports
# Conflicts:
#	resources/migrations/056_update_migrations.yaml
#	test/metabase/test/util/namespace.clj
2025-08-05 22:30:13 +03:00
Alexander Polyankin
d11ce55c79 [Release blocker] Revert join custom columns changes (#61827) 2025-08-05 15:19:32 -04:00
Cam Saul
81b5c133b2 Ensure we're actually using a cached metadata provider in tests (somewhat faster Lib/QP tests) (#61702)
* Ensure we're actually using a cached metadata provider in tests

* Remove profiling code

* Restore accidentally-deleted `native-query-snippet` fn

* Fix accidental edits

* Test fix 🔧

* Sort namespaces
2025-08-05 18:58:24 +00:00
Nick Fitzpatrick
1799892d0b Document Metadata 2025-08-05 14:45:26 -03:00
Phoomparin Mano
673c5b93ed Add enable_embedding_simple to stats.clj (#61807) 2025-08-05 22:01:08 +07:00
Ngoc Khuat
44ec7bc393 [Action v2] Undo / Redo (#61677) 2025-08-05 13:24:50 +00:00
Timofey Kachalov
62b48d1795 refactor(sdk): Prepare src/metabase code for Hosted Bundle (#61801) 2025-08-05 15:25:26 +04:00
Timofey Kachalov
da35b08918 refactor(sdk): Add x-metabase-version header to BE responses (#61799) 2025-08-05 12:35:50 +04:00
Timofey Kachalov
4a56e706eb Migrate webpack.shared.config.js to rspack (#61796) 2025-08-05 12:34:24 +04:00
Brad Anderson
4f7c22ed53 Adds subtle animation to "Working on it..." message 2025-08-04 17:34:07 -04:00
Brad Anderson
ba806688b6 Fix issues with multiple in-flight requests 2025-08-04 17:17:48 -04:00
Phoomparin Mano
d8a03a312f Update copy from new iframe to Embedded Analytics JS in embed flow (#61788) 2025-08-05 01:13:01 +04:00
Brad Anderson
18898a5fdf Tweaks metabot block styling, wires up "stop generating" functionality 2025-08-04 17:00:10 -04:00
dpsutton
81f880637b bump hive to 4.1.0 (#61766)
solves:
https://github.com/metabase/metabase/security/code-scanning/305
https://github.com/metabase/metabase/security/code-scanning/304
https://github.com/metabase/metabase/security/code-scanning/301
https://github.com/metabase/metabase/security/code-scanning/302

does not solve:
https://github.com/metabase/metabase/security/code-scanning/490
2025-08-04 15:32:00 -05:00
Oleksandr Yakushev
9a6dd6456f [pivot] Implement optimized clj->js and use it when recalculating pivots on frontend (#61241) 2025-08-04 21:22:22 +03:00
Brad Anderson
1ebe336a00 UXW-404 Improves image formatting 2025-08-04 13:05:36 -04:00
Aleksandr Lesnenko
36790affcf auto focus on title on new documents 2025-08-04 13:08:36 -03:00
Phoomparin Mano
698be3e9f7 Revert "feat(sdk): hide tables by default in embedding data picker if there a…" (#61792) 2025-08-04 22:17:36 +07:00
Aleksandr Lesnenko
a15154cb84 fix layout 2025-08-04 11:51:08 -03:00
Phoomparin Mano
f232f68588 Cleanup stacked card background on embed flow preview (#61782) 2025-08-04 17:29:10 +07:00
Aleksandr Lesnenko
095cae88af fix links to tables 2025-08-01 22:20:08 -03:00
Aleksandr Lesnenko
5314f9f976 missing import 2025-08-01 22:10:37 -03:00
Aleksandr Lesnenko
7189344bfd paste smartlinks 2025-08-01 22:01:48 -03:00
Aleksandr Lesnenko
11b74e0e4b split mention vs command, allow mentioning other entities 2025-08-01 21:29:55 -03:00
Aleksandr Lesnenko
c5862c278d mention all entities 2025-08-01 20:47:30 -03:00
Aleksandr Lesnenko
0af4b1c0de uxw-366: Navigation back to the report from a drill through can be difficult - can we add the back button like for dashboards 2025-08-01 20:18:35 -03:00
Oleksandr Yakushev
75ef744af8 [m.u.performance] Make performance namespace cross-platform (#61159) 2025-08-02 02:05:40 +03:00
Aleksandr Lesnenko
4cd96fa6a2 fix embedding dashboard-only cards to documents 2025-08-01 19:30:19 -03:00
Aleksandr Lesnenko
b47ccb6123 fix FE usage of documents api 2025-08-01 18:43:27 -03:00
Phoomparin Mano
84e35e40da feat(sdk): hide tables by default in embedding data picker if there are more than 2 models (#61022)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2025-08-01 21:27:33 +00:00
Riley Thompson
d3f48b79a5 Enable DB routing for Databricks (#61630) 2025-08-01 16:56:46 -04:00
Edward Paget
5271f4092d chore: rename everything to document (#61743)
strip out snapshotting code
2025-08-01 15:04:32 -05:00
Jeff Bruemmer
643695fc44 docs - update expressions list (#61727)
* date funcs

* summary
2025-08-01 15:43:19 -04:00
Jeff Bruemmer
fd29d268d3 docs - update time grouping example (#61752)
* Update time-grouping-parameters.md

* tags

* edit
2025-08-01 15:42:16 -04:00
dpsutton
1a14bd6eba submit init function, not results (#61733)
was blocking on startup
stacktrace below is representative. has a few other things like reveal
but shows that we get into a huge loop over all cards and you end up
waiting for the instance to be ready for a long time
```
	at metabase.lib.card$fn__77290$fn__77297.invoke(card.cljc:71)
	at metabase.lib.card$fn__77302$__GT_card_metadata_columns77301__77303$fn__77304.invoke(card.cljc:141)
	at clojure.core$mapv$fn__8569.invoke(core.clj:7059)
	at clojure.lang.PersistentVector.reduce(PersistentVector.java:418)
	at clojure.core$reduce.invokeStatic(core.clj:6964)
	at clojure.core$mapv.invokeStatic(core.clj:7050)
	at clojure.core$mapv.invoke(core.clj:7050)
	at metabase.lib.card$fn__77302$__GT_card_metadata_columns77301__77303.invoke(card.cljc:141)
	at metabase.lib.card$fn__77302$fn__77308.invoke(card.cljc:120)
	at metabase.lib.card$fn__77316$card_cols_STAR_77315__77317.invoke(card.cljc:163)
	at metabase.lib.card$fn__77316$fn__77322.invoke(card.cljc:157)
	at metabase.lib.card$fn__77350$card_metadata_columns77349__77351.invoke(card.cljc:223)
	at metabase.lib.card$fn__77350$fn__77354.invoke(card.cljc:217)
	at metabase.lib.card$eval77367$_AMPERSAND_f__77368.invoke(card.cljc:257)
	at metabase.lib.card$eval77367$fn__77372.invoke(card.cljc:242)
	at clojure.lang.MultiFn.invoke(MultiFn.java:244)
	at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777$fn__74778.invoke(calculation.cljc:524)
	at metabase.lib.metadata.cache$fn__74548$do_with_cached_value74547__74549.invoke(cache.cljc:104)
	at metabase.lib.metadata.cache$fn__74548$fn__74555.invoke(cache.cljc:92)
	at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:523)
	at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
	at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:516)
	at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
	at metabase.lib.field.resolution$fn__80775$resolve_in_card_returned_columns80774__80776.invoke(resolution.cljc:352)
	at metabase.lib.field.resolution$fn__80775$fn__80784.invoke(resolution.cljc:346)
	at metabase.lib.field.resolution$fn__80788$resolve_in_card_or_stage_metadata80787__80789.invoke(resolution.cljc:365)
	at metabase.lib.field.resolution$fn__80788$fn__80801.invoke(resolution.cljc:358)
	at metabase.lib.field.resolution$resolve_from_previous_stage_or_source_STAR_.invokeStatic(resolution.cljc:410)
	at metabase.lib.field.resolution$resolve_from_previous_stage_or_source_STAR_.invoke(resolution.cljc:390)
	at metabase.lib.field.resolution$fn__80844$resolve_from_previous_stage_or_source80843__80845.invoke(resolution.cljc:440)
	at metabase.lib.field.resolution$fn__80844$fn__80861.invoke(resolution.cljc:434)
	at metabase.lib.field.resolution$fn__80865$resolve_field_ref80864__80867.invoke(resolution.cljc:471)
	at metabase.lib.field.resolution$fn__80865$fn__80878.invoke(resolution.cljc:457)
	at metabase.lib.field$eval80922$_AMPERSAND_f__80923.invoke(field.cljc:62)
	at metabase.lib.field$eval80922$fn__80925.invoke(field.cljc:60)
	at clojure.lang.MultiFn.invoke(MultiFn.java:239)
	at metabase.lib.metadata.calculation$fn__74679$metadata74678__74680$fn__74681.invoke(calculation.cljc:287)
	at metabase.lib.metadata.cache$fn__74548$do_with_cached_value74547__74549.invoke(cache.cljc:104)
	at metabase.lib.metadata.cache$fn__74548$fn__74555.invoke(cache.cljc:92)
	at metabase.lib.metadata.calculation$fn__74679$metadata74678__74680.invoke(calculation.cljc:286)
	at metabase.lib.metadata.calculation$fn__74679$fn__74684.invoke(calculation.cljc:275)
	at metabase.lib.breakout$fn__80328$breakouts_metadata80327__80329$fn__80331.invoke(breakout.cljc:43)
	at clojure.core$mapv$fn__8569.invoke(core.clj:7059)
	at clojure.lang.PersistentVector.reduce(PersistentVector.java:418)
	at clojure.core$reduce.invokeStatic(core.clj:6964)
	at clojure.core$mapv.invokeStatic(core.clj:7050)
	at clojure.core$mapv.invoke(core.clj:7050)
	at metabase.lib.breakout$fn__80328$breakouts_metadata80327__80329.invoke(breakout.cljc:42)
	at metabase.lib.breakout$fn__80328$fn__80334.invoke(breakout.cljc:35)
	at metabase.lib.stage$fn__81784$breakouts_columns81783__81785.invoke(stage.cljc:59)
	at metabase.lib.stage$fn__81784$fn__81787.invoke(stage.cljc:55)
	at metabase.lib.stage$fn__81843$summary_columns81842__81844.invoke(stage.cljc:92)
	at metabase.lib.stage$fn__81843$fn__81846.invoke(stage.cljc:86)
	at metabase.lib.stage$eval81986$_AMPERSAND_f__81988.invoke(stage.cljc:290)
	at metabase.lib.stage$eval81986$fn__81996.invoke(stage.cljc:283)
	at clojure.lang.MultiFn.invoke(MultiFn.java:244)
	at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777$fn__74778.invoke(calculation.cljc:524)
	at metabase.lib.metadata.cache$fn__74548$do_with_cached_value74547__74549.invoke(cache.cljc:104)
	at metabase.lib.metadata.cache$fn__74548$fn__74555.invoke(cache.cljc:92)
	at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:523)
	at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
	at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:516)
	at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
	at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:513)
	at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
	at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:510)
	at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
	at metabase.queries.models.card$dataset_query__GT_dimensions.invokeStatic(card.clj:1270)
	at metabase.queries.models.card$dataset_query__GT_dimensions.invoke(card.clj:1262)
	at metabase.queries.models.card$extract_non_temporal_dimension_ids.invokeStatic(card.clj:1277)
	at metabase.queries.models.card$extract_non_temporal_dimension_ids.invoke(card.clj:1274)
	at metabase.search.ingestion$execute_function_attr.invokeStatic(ingestion.clj:68)
	at metabase.search.ingestion$execute_function_attr.invoke(ingestion.clj:63)
	at metabase.search.ingestion$execute_all_function_attrs$fn__131886.invoke(ingestion.clj:80)
	at clojure.lang.PersistentHashMap$NodeSeq.kvreduce(PersistentHashMap.java:1309)
	at clojure.lang.PersistentHashMap$BitmapIndexedNode.kvreduce(PersistentHashMap.java:804)
	at clojure.lang.PersistentHashMap$NodeSeq.kvreduce(PersistentHashMap.java:1314)
	at clojure.lang.PersistentHashMap$BitmapIndexedNode.kvreduce(PersistentHashMap.java:804)
	at clojure.lang.PersistentHashMap.kvreduce(PersistentHashMap.java:238)
	at clojure.core$fn__8559.invokeStatic(core.clj:6987)
	at clojure.core$fn__8559.invoke(core.clj:6967)
	at clojure.core.protocols$fn__8287$G__8282__8296.invoke(protocols.clj:174)
	at clojure.core$reduce_kv.invokeStatic(core.clj:6998)
	at clojure.core$reduce_kv.invoke(core.clj:6989)
	at metabase.search.ingestion$execute_all_function_attrs.invokeStatic(ingestion.clj:76)
	at metabase.search.ingestion$execute_all_function_attrs.invoke(ingestion.clj:73)
	at metabase.search.ingestion$__GT_document.invokeStatic(ingestion.clj:87)
	at metabase.search.ingestion$__GT_document.invoke(ingestion.clj:85)
	at clojure.core$map$fn__5952$fn__5953.invoke(core.clj:2759)
	at medley.core$distinct_by$fn__15232$fn__15233.invoke(core.cljc:290)
	at clojure.core$map$fn__5952$fn__5953.invoke(core.clj:2759)
	at clojure.core$completing$fn__8562.invoke(core.clj:7010)
	at clojure.core$map$fn__5952$fn__5953.invoke(core.clj:2759)
	at toucan2.pipeline$with_init$fn__51829.invoke(pipeline.clj:327)
	at clojure.core$completing$fn__8562.invoke(core.clj:7010)
	at toucan2.jdbc.result_set$reduce_result_set.invokeStatic(result_set.clj:156)
	at toucan2.jdbc.result_set$reduce_result_set.invoke(result_set.clj:125)
	at toucan2.jdbc.query$reduce_jdbc_query.invokeStatic(query.clj:51)
	at toucan2.jdbc.query$reduce_jdbc_query.invoke(query.clj:22)
	at toucan2.jdbc.pipeline$transduce_execute_with_connection_primary_method_java_sql_Connection_default_default.invokeStatic(pipeline.clj:19)
	at toucan2.jdbc.pipeline$transduce_execute_with_connection_primary_method_java_sql_Connection_default_default.invoke(pipeline.clj:9)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:15)
	at methodical.impl.combo.threaded$combine_methods_thread_last$fn__23165$combined_method_thread_last__23166.invoke(threaded.clj:64)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:65)
	at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
	at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:216)
	at toucan2.pipeline$transduce_execute$with_connection_STAR___51727.invoke(pipeline.clj:78)
	at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
	at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
	at toucan2.jdbc.connection$do_with_connection_primary_method_java_sql_Connection.invokeStatic(connection.clj:13)
	at toucan2.jdbc.connection$do_with_connection_primary_method_java_sql_Connection.invoke(connection.clj:11)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
	at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
	at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
	at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:210)
	at toucan2.connection$do_with_connection_primary_method_.invokeStatic(connection.clj:204)
	at toucan2.connection$do_with_connection_primary_method_.invoke(connection.clj:194)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
	at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
	at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
	at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:210)
	at toucan2.pipeline$transduce_execute.invokeStatic(pipeline.clj:77)
	at toucan2.pipeline$transduce_execute.invoke(pipeline.clj:64)
	at clojure.lang.Var.invoke(Var.java:401)
	at toucan2.pipeline$transduce_compiled_query.invokeStatic(pipeline.clj:244)
	at toucan2.pipeline$transduce_compiled_query.invoke(pipeline.clj:240)
	at toucan2.pipeline$transduce_built_query.invokeStatic(pipeline.clj:252)
	at toucan2.pipeline$transduce_built_query.invoke(pipeline.clj:246)
	at toucan2.pipeline$transduce_query_primary_method_default.invokeStatic(pipeline.clj:272)
	at toucan2.pipeline$transduce_query_primary_method_default.invoke(pipeline.clj:269)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:15)
	at methodical.impl.combo.threaded$combine_methods_thread_last$fn__23165$combined_method_thread_last__23166.invoke(threaded.clj:64)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:65)
	at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
	at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:216)
	at toucan2.pipeline$transduce_query_STAR_.invokeStatic(pipeline.clj:278)
	at toucan2.pipeline$transduce_query_STAR_.invoke(pipeline.clj:274)
	at toucan2.pipeline$transduce_with_model.invokeStatic(pipeline.clj:293)
	at toucan2.pipeline$transduce_with_model.invoke(pipeline.clj:280)
	at toucan2.pipeline$transduce_parsed.invokeStatic(pipeline.clj:309)
	at toucan2.pipeline$transduce_parsed.invoke(pipeline.clj:295)
	at clojure.lang.AFn.applyToHelper(AFn.java:160)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.core$apply.invokeStatic(core.clj:669)
	at clojure.core$apply.invoke(core.clj:662)
	at toucan2.pipeline$reducible_fn$reify__51862.reduce(pipeline.clj:404)
	at clojure.core$transduce.invokeStatic(core.clj:7025)
	at clojure.core.Eduction.reduce(core.clj:7874)
	at clojure.core$reduce.invokeStatic(core.clj:6964)
	at clojure.core$reduce.invoke(core.clj:6947)
	at metabase.util$rconcat$reify__16182.coll_reduce(util.cljc:1188)
	at clojure.core$transduce.invokeStatic(core.clj:7026)
	at clojure.core.Eduction.reduce(core.clj:7874)
	at clojure.core$transduce.invokeStatic(core.clj:7025)
	at clojure.core$transduce.invokeStatic(core.clj:7021)
	at clojure.core$transduce.invoke(core.clj:7012)
	at metabase.search.appdb.index$index_docs_BANG_.invokeStatic(index.clj:279)
	at metabase.search.appdb.index$index_docs_BANG_.invoke(index.clj:275)
	at metabase.search.appdb.core$populate_index_BANG_.invokeStatic(core.clj:169)
	at metabase.search.appdb.core$populate_index_BANG_.invoke(core.clj:168)
	at metabase.search.appdb.core$eval132669$fn__132671.invoke(core.clj:182)
	at clojure.lang.MultiFn.invoke(MultiFn.java:234)
	at metabase.search.core$init_index_BANG_$iter__133794__133798$fn__133799.invoke(core.clj:91)
	at clojure.lang.LazySeq.force(LazySeq.java:50)
	at clojure.lang.LazySeq.realize(LazySeq.java:89)
	at clojure.lang.LazySeq.seq(LazySeq.java:106)
	at clojure.lang.RT.seq(RT.java:555)
	at clojure.core$seq__5488.invokeStatic(core.clj:139)
	at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:24)
	at clojure.core.protocols$fn__8266.invokeStatic(protocols.clj:74)
	at clojure.core.protocols$fn__8266.invoke(protocols.clj:74)
	at clojure.core.protocols$fn__8207$G__8202__8220.invoke(protocols.clj:13)
	at clojure.core$reduce.invokeStatic(core.clj:6965)
	at clojure.core$reduce.invoke(core.clj:6947)
	at metabase.search.core$init_index_BANG_.invokeStatic(core.clj:88)
	at metabase.search.core$init_index_BANG_.doInvoke(core.clj:80)
	at clojure.lang.RestFn.invoke(RestFn.java:411)
	at metabase.search.task.search_index$init_BANG_$fn__173098.invoke(search_index.clj:38)
	at metabase.app_db.cluster_lock$do_with_cluster_lock_STAR_$with_connection_STAR___126394$with_transaction_STAR___126395.invoke(cluster_lock.clj:61)
	at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
	at metabase.app_db.connection$do_transaction$thunk__61025.invoke(connection.clj:145)
	at metabase.app_db.connection$do_transaction.invokeStatic(connection.clj:164)
	at metabase.app_db.connection$do_transaction.invoke(connection.clj:141)
	at metabase.app_db.connection$do_with_transaction_primary_method_java_sql_Connection.invokeStatic(connection.clj:201)
	at metabase.app_db.connection$do_with_transaction_primary_method_java_sql_Connection.invoke(connection.clj:174)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:13)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at toucan2.connection$do_with_transaction_around_method_toucan2_connection_default.invokeStatic(connection.clj:249)
	at toucan2.connection$do_with_transaction_around_method_toucan2_connection_default.invoke(connection.clj:245)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:13)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:58)
	at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
	at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:212)
	at metabase.app_db.cluster_lock$do_with_cluster_lock_STAR_$with_connection_STAR___126394.invoke(cluster_lock.clj:53)
	at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
	at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
	at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
	at toucan2.jdbc.connection$do_with_connection_primary_method_javax_sql_DataSource.invokeStatic(connection.clj:18)
	at toucan2.jdbc.connection$do_with_connection_primary_method_javax_sql_DataSource.invoke(connection.clj:15)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
	at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
	at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
	at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:210)
	at metabase.app_db.connection$do_with_connection_primary_method_default.invokeStatic(connection.clj:132)
	at metabase.app_db.connection$do_with_connection_primary_method_default.invoke(connection.clj:130)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
	at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
	at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
	at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:210)
	at toucan2.connection$do_with_connection_primary_method_.invokeStatic(connection.clj:204)
	at toucan2.connection$do_with_connection_primary_method_.invoke(connection.clj:194)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
	at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
	at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
	at methodical.util.FnWithMeta.invoke(util.clj:46)
	at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
	at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
	at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:210)
	at metabase.app_db.cluster_lock$do_with_cluster_lock_STAR_.invokeStatic(cluster_lock.clj:53)
	at metabase.app_db.cluster_lock$do_with_cluster_lock_STAR_.invoke(cluster_lock.clj:51)
	at metabase.app_db.cluster_lock$fn__126406$do_with_cluster_lock126405__126407$do_with_cluster_lock_STAR__STAR___126409.invoke(cluster_lock.clj:78)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.core$apply.invokeStatic(core.clj:667)
	at clojure.core$apply.invoke(core.clj:662)
	at metabase.util.retry$decorate$fn$reify__126370.call(retry.clj:110)
	at io.github.resilience4j.retry.Retry.lambda$decorateCallable$5(Retry.java:306)
	at metabase.util.retry$decorate$fn__126369.doInvoke(retry.clj:111)
	at clojure.lang.RestFn.invoke(RestFn.java:400)
	at metabase.util.retry$fn__126375$make126374__126376$fn__126377.invoke(retry.clj:120)
	at metabase.app_db.cluster_lock$fn__126406$do_with_cluster_lock126405__126407.invoke(cluster_lock.clj:82)
	at metabase.app_db.cluster_lock$fn__126406$fn__126412.invoke(cluster_lock.clj:63)
	at metabase.app_db.cluster_lock$fn__126406$do_with_cluster_lock126405__126407.invoke(cluster_lock.clj:75)
	at metabase.app_db.cluster_lock$fn__126406$fn__126412.invoke(cluster_lock.clj:63)
	at metabase.search.task.search_index$init_BANG_.invokeStatic(search_index.clj:37)
	at metabase.search.task.search_index$init_BANG_.invoke(search_index.clj:33)
	at metabase.search.task.search_index$eval173156$fn__173157.invoke(search_index.clj:46)
	at metabase.startup.core$run_startup_logic_BANG_$fn__173079.invoke(core.clj:30)
	at metabase.startup.core$run_startup_logic_BANG_.invokeStatic(core.clj:28)
	at metabase.startup.core$run_startup_logic_BANG_.invoke(core.clj:24)
	at metabase.core.core$init_BANG__STAR_.invokeStatic(core.clj:181)
	at metabase.core.core$init_BANG__STAR_.invoke(core.clj:117)
	at metabase.core.core$init_BANG_.invokeStatic(core.clj:194)
	at metabase.core.core$init_BANG_.invoke(core.clj:189)
	at dev$init_BANG_.invokeStatic(dev.clj:143)
	at dev$init_BANG_.invoke(dev.clj:139)
	at dev$start_BANG_.invokeStatic(dev.clj:180)
	at dev$start_BANG_.invoke(dev.clj:176)
	at dev$eval206099.invokeStatic(NO_SOURCE_FILE:1)
	at dev$eval206099.invoke(NO_SOURCE_FILE:1)
	at clojure.lang.Compiler.eval(Compiler.java:7739)
	at clojure.lang.Compiler.eval(Compiler.java:7729)
	at clojure.lang.Compiler.eval(Compiler.java:7694)
	at clojure.core$eval.invokeStatic(core.clj:3232)
	at clojure.core$eval.invoke(core.clj:3228)
	at vlaaad.reveal.repl$wrap_eval$fn__37945.invoke(repl.clj:90)
	at clojure.main$repl$read_eval_print__9248$fn__9251.invoke(main.clj:437)
	at clojure.main$repl$read_eval_print__9248.invoke(main.clj:437)
	at clojure.main$repl$fn__9257.invoke(main.clj:459)
	at clojure.main$repl.invokeStatic(main.clj:459)
	at clojure.main$repl.doInvoke(main.clj:368)
	at clojure.lang.RestFn.applyTo(RestFn.java:140)
	at clojure.core$apply.invokeStatic(core.clj:667)
	at clojure.core$apply.invoke(core.clj:662)
```
2025-08-01 14:25:50 -05:00
Jeff Bruemmer
debb945c57 link to intro page (#61744) 2025-08-01 19:22:18 +00:00
Phoomparin Mano
8d195dc6db Add note on useExistingUserSession's browser compatibility (#61663) 2025-08-02 02:00:22 +07:00
Aleksandr Lesnenko
c06ea7d391 do not leak prosemirror styles into charts 2025-08-01 14:17:20 -03:00
John Swanson
1eccdad5f4 Format scalar currencies correctly (#61664)
Previously we were treating all currency formatting as if we were in a
table, and only adding the currency symbol if `currency-in-header` were
explicitly set to `false` for the column.

When formatting a scalar value, though, we want to always add the
currency symbol inline (since there is no header in this case).

I found that `metabase.channel.render.body/format-cell` and
`metabase.formatter.core/format-number` were actually only used to
format *scalar* cells and *scalar* numbers (as opposed to cells in a
table), so I renamed them for a bit more clarity and added a new
optional argument, `scalar?`, to
`metabase.formatter.core/number-formatter`. When passed (and truthy) the
currency symbol will be splatted into the formatted number even if
`:currency-in-header` is not `false`.
2025-08-01 09:51:31 -07:00
Ryan Laurie
3f07958eae [ci run] Fix deprecated input (#61700)
* replaced deprecated Input with TextInput

* udpate a couple more things

---------

Co-authored-by: iamkabilash <iamkabilash@gmail.com>
2025-08-01 10:51:06 -06:00
Jeff Bruemmer
0947c6b604 docs - minor edits (#61735)
* minor edits

* Update docs/permissions/row-and-column-security.md

Co-authored-by: Alex Yarosh <alexandra@metabase.com>

---------

Co-authored-by: Alex Yarosh <alexandra@metabase.com>
2025-08-01 16:47:09 +00:00
Jeff Bruemmer
e62c8f1fff docs - rename data sandboxing to row and column security (#61682) 2025-08-01 12:35:02 -04:00
John Swanson
efb70a343a do not throw on empty query for /search (#61615)
instead just pass `(not-empty q)` to the search subsystem, which will
convert it to `nil` if it's empty and pass it unchanged if it's not.

I still don't think this is probably the ideal user experience when you
navigate to `/search` but it's not an error at least.
2025-08-01 08:48:45 -07:00
John Swanson
6f34845c13 Fix zero measure count issue for pivot tables (#61565) 2025-08-01 08:23:26 -07:00
Edward Paget
e2e2e5fdf3 keep report cards and collections in sync (#61686) 2025-08-01 10:04:50 -05:00
Riley Thompson
11f24779e2 Always set roles on connections (#61563)
* always set roles on connections

* add deps

* include sql-jdbc.execute

* kondo warn on reflection
2025-08-01 14:51:25 +00:00
Brad Anderson
086a00ab8d Fix: UXW-382 - Public Links menu item within sharing menu is too large (#61628)
* UXW-382 Updates "Public link" menu item for admins when public links aren't enabled so it doesn't look obviously broken

* UXW-382 Updates tests

* UXW-382 Updates "enable public links" menu item to be disabled per PR feedback

* UXW-382 Swaps core styles for mantine props per PR feedback
2025-08-01 10:50:58 -04:00
Nicolò Pretto
ed82963a86 chore(sdk): bump minimum react version to 18 (#61718) 2025-08-01 16:36:02 +02:00
Edward Paget
0fe24156a3 fix: issues generating valid urls for map tiles (#61634)
* fix: issues generating valid urls for map tiles

Fixes to issues generating map tiles, one is on x-ray dashboards we need
to check that we're not in a real dashboard and send an ad hoc tile
request.

Second if the field ref sent in the request has options we need to
remove the 'base-type' option because the type will be encoded as
something like test%2FFloat and the way Jetty decodes URLs before
parsing turns it into a '/' in a position a path separator cannot be:
https://github.com/jetty/jetty.project/issues/7713

* fixup! typeguard dashbaord id

* Update maps.cy.spec.js

* fixup! better handle null field opts
2025-08-01 08:40:27 -05:00
Riley Thompson
ad3ec1b797 Enable DB routing for snowflake (#61434) 2025-08-01 09:24:24 -04:00
Jeff Bruemmer
9276aaad2a docs - update generated docs (#61689)
* config template

* api docs

* env var docs
2025-08-01 09:21:27 -04:00
Ryan Laurie
329b903a8b update metabot question creation parsing 2025-08-01 07:14:18 -06:00
Timofey Kachalov
c69ef65bff feat(sdk): Use Mantine styles with CSS layer for the SDK (#61475) 2025-08-01 17:12:25 +04:00
Nicolò Pretto
87f36432ca allow setting the default cypress browser via env CYPRESS_BROWSER (#61652)
* allow setting the default cypress browser via env CYPRESS_BROWSER

* keep --browser have higher priority than the env
2025-08-01 12:19:34 +02:00
Nicolò Pretto
00ceb1aff2 remove references to ENTERPRISE_TOKEN (#61667)
* update docs that referenced old envs CYPRESS_ALL

* remove requirement on ENTERPRISE_TOKEN that's not needed anymore
2025-08-01 12:18:09 +02:00
Nicolò Pretto
b243e4e4d4 prepare the sdk workflow for 56 release (#61704) 2025-08-01 08:31:34 +00:00
Oleksandr Yakushev
7c2347fef6 [qp] Use metabase.util.performance/postwalk instead of regular clojure.walk (#60722) 2025-08-01 06:10:20 +00:00
Ryan Laurie
ab0ed63e26 update build info for v56 (#61676) 2025-07-31 20:18:24 -06:00
Ryan Laurie
d34ddd45c2 fix release notes preview action (#61671) 2025-07-31 20:18:16 -06:00
Aleksandr Lesnenko
82acc79f82 fe: reports -> documents 2025-07-31 21:58:28 -03:00
Aleksandr Lesnenko
240862340a icons 2025-07-31 21:00:14 -03:00
bryan
b07b86a367 enable cider middleware in dev-start (#61678)
Co-authored-by: Raimon Grau <raimonster@gmail.com>
2025-07-31 23:18:52 +00:00
Ryan Laurie
c4db9bf7fe fix native models test (#61697) 2025-07-31 22:20:33 +00:00
Cam Saul
d389949074 Re-implementation of metabase.driver.common.parameters.* that uses Lib (#61158)
* Re-implementation of `metabase.driver.common.parameters.*` that uses Lib

* Fix Kondo warnings

* Move tests that have nothing to do with drivers to QP

* Test fixes 🔧

* Test fixes 🔧

* Try simplifying the PR
2025-07-31 18:14:41 -04:00
bryan
0a9b808754 update jar-download to handle {v,}1.56.0-beta (#61696) 2025-07-31 22:11:21 +00:00
Nick Fitzpatrick
7849e0394c cleaning up emoji ui a bit 2025-07-31 19:10:19 -03:00
Riley Thompson
f1057b6420 Enable DB routing for Redshift (#61390)
* db routing for redshift

* simplify test

* dataset name multimethod

* small change

* use delayed defs

* add redshift ci routing env var

* small fix

* update dataset definitions

* change back to original data
2025-07-31 17:14:50 -04:00
Jakub Chodorowicz
28bf41bb17 Replace getStoreUrl usage with useStoreUrl (#61534)
* Replace getStoreUrl usage with useStoreUrl

* Refactor getStoreUrl

* Add harcoded default store URL (live store)
2025-07-31 15:09:31 -06:00
Oleksandr Yakushev
73bcc90a68 [pivot] Replace json-roundtrip with explicit type conversions (#61384) 2025-08-01 00:09:26 +03:00
Nick Fitzpatrick
8fa264cb17 gross emojis 2025-07-31 18:08:02 -03:00
Oleksandr Yakushev
74a6335bd3 [legacy-mbql] Optimize normalize-tokens (#60721) 2025-08-01 00:03:43 +03:00
Aleksandr Lesnenko
ca4744dc08 why scroll to bottom when opened 2025-07-31 17:51:25 -03:00
Aleksandr Lesnenko
78e9dda8dd jumping layout when loading 2025-07-31 17:51:25 -03:00
Ryan Laurie
b36f00cf80 stop header bouncing 2025-07-31 14:42:55 -06:00
Nick Fitzpatrick
3f24ba5687 disable metabot sidebar on mob+b 2025-07-31 17:40:18 -03:00
Aleksandr Lesnenko
d7dc44feb2 always clone non in_report cards 2025-07-31 17:34:38 -03:00
Aleksandr Lesnenko
0450ba6a67 always create a card clone when embedding 2025-07-31 17:34:38 -03:00
Aleksandr Lesnenko
b30ecea5ca cleanup 2025-07-31 17:34:38 -03:00
Nick Fitzpatrick
fc8ca9b602 Print Report 2025-07-31 17:01:10 -03:00
Riley Thompson
fa3b11fcde Retry have-select-privilege? on error (#61236)
* feat: driver/do-with-resilient-connection

* feat: :keep-open? option to do-with-connection-with-options

* feat: attempt describe-database with resilient connection

* feat: execute jdbc query with retry conn

* test

* avoid recursive issues

* simplify

* changelog

* type hint

* force local conn, so the connection being closed won't close outer unrealized result sets

* working test

* more test

* opts

* style

* add test for connection options

* notes

* fix test

* docstring

* Update src/metabase/driver/sql_jdbc/execute.clj

Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>

* logs

* better logs

* try to close conn when it's no longer valid

* pull out logic to is-conn-open

* is-conn-open? test

* clarify

* Update docs/developers-guide/driver-changelog.md

Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>

* update version

* chore: move tests to right namespace

* retry have select privilege on error

* add test

* improve test

* remove let

* separate connection for each test

* clean up test

* try druid jdbc ci fix

* close connection during test

* use do with resilient connection in test for druid

* formatting

* always set role if supported

* Fix clickhouse and sqlserver

* impersonation test

* use normal-driver-select

* address comments

* kondo

* remove debug

---------

Co-authored-by: Nicola Mometto <nicola.mometto@metabase.com>
Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
2025-07-31 19:38:56 +00:00
Luiz Arakaki
68366d7d37 remove trigger for uberjar 2025-07-31 15:20:36 -03:00
Luiz Arakaki
63a94c8788 run build and docker uberjar on push 2025-07-31 14:47:46 -03:00
Ryan Laurie
10bd9d68ce Insert into reports from metabot (#61642)
* insert from metabot

* Metabot plugin and hook

* make stuff nicer

* cleanup

* no more snapshots
2025-07-31 11:19:18 -06:00
Denis Berezin
f8f5e20c1f UXW-381 Fix collections bulk action buttons UI (#61640) 2025-07-31 19:06:57 +03:00
Alex Yarosh
06712c46e5 Update database-routing.md (#61672) 2025-07-31 15:39:59 +00:00
Aleksandr Lesnenko
7221915503 polish 2025-07-31 11:59:02 -03:00
Brad Anderson
f9d74d1f3b Fix: UXW-28 When deleting a tab with questions saved to the dashboard, no option offered to keep and move those questions (#61526)
* UXW-28 Adds confirmation modal when deleting a tab that contains dashboard-only cards

* UXW-28 Makes confirmation modal smarter; uses short version if all questions on a tab are dashboard questions, lists affected questions if it's a mix

* UXW-28 Adds tests
2025-07-31 10:51:35 -04:00
Brad Anderson
1dffd98bd7 UXW-314 Fix action icon inconsistencies (#61639) 2025-07-31 08:48:04 -06:00
Nicola Mometto
909354fe89 Attempt to reconnect during select probing if connection is closed (#60857)
* feat: driver/do-with-resilient-connection

* feat: :keep-open? option to do-with-connection-with-options

* feat: attempt describe-database with resilient connection

* feat: execute jdbc query with retry conn

* test

* avoid recursive issues

* simplify

* changelog

* type hint

* force local conn, so the connection being closed won't close outer unrealized result sets

* working test

* more test

* opts

* style

* add test for connection options

* notes

* fix test

* docstring

* Update src/metabase/driver/sql_jdbc/execute.clj

Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>

* logs

* better logs

* try to close conn when it's no longer valid

* pull out logic to is-conn-open

* is-conn-open? test

* clarify

* Update docs/developers-guide/driver-changelog.md

Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>

* update version

* chore: move tests to right namespace

* impersonation test

* use normal-driver-select

* trigger CI

---------

Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
2025-07-31 15:19:49 +01:00
Edward Paget
944ca02530 chore: remove stray #p (#61665)
Not sure why kondo didn't get this.
2025-07-31 09:08:50 -05:00
Vamsi Peri
a2b720a743 Delete .github/workflows/claude.yml (#61666) 2025-07-31 13:27:43 +00:00
eliotmetabase
3f19d40ca1 Temporary change to fix CI, will update modules properly (#61662) 2025-07-31 13:05:34 +00:00
Phoomparin Mano
e357c4f0db Design cleanup for embedding sdk settings page (#61653) 2025-07-31 19:57:52 +07:00
Timofey Kachalov
8563b74b89 Remove circular references in SDK package (#61657) 2025-07-31 16:16:13 +04:00
Nicolò Pretto
6558cca6a4 feat(simple-embed): parse attributes with json5 to be more permissive… (#61648)
* feat(simple-embed): parse attributes with json5 to be more permissive with quotes

* Update package.json

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>

* fix tests

* Apply suggestion from @heypoom

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

---------

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: Phoomparin Mano <poom@metabase.com>
2025-07-31 11:57:30 +00:00
Phoomparin Mano
435e905ffd Hide Embed menu from "New" button if the user is not an admin (#61658) 2025-07-31 18:39:58 +07:00
Oleksandr Solovyov
3063577208 update snowflake's commons-lang3 to clear out security issue (#61656) 2025-07-31 13:38:27 +02:00
Timofey Kachalov
1c6c3681a8 Add backend-sources as triggers to SDK compatibility tests (#61650) 2025-07-31 14:28:48 +04:00
Chris Truter
84f0a92394 Assign correct MB version metadata to data-editing functions (#61647) 2025-07-31 09:31:04 +00:00
Chris Truter
9019aab71e BE support for Table Data Editing (#61490)
Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>
2025-07-31 08:34:17 +00:00
Cam Saul
abdfe5062c Faster field ref resolution (#61529)
* Remove debugging stuff

* 14 failures, 1 error.

* 10 failures, 1 error.

* 10 failures, 0 errors.

* Better log messages

* Faster field ref resolution

* Test fixes 🔧

* Some test fixes 🔧

* Remove resolve-joined-fields middleware

* Fix lib.underlying calculation of fields with join aliases

* Fix busted pivot tests

* Remove unused fn

* More resolution fixes

* drill-thru use vars so we can get updated fns in the REPL

* Consolidate the lib metadata => legacy metadata functions

* Add a pile of additional tests

* Migrate the `resolve-joined-fields` middleware (#39884)

* Support automatically removing duplicate refs in `:fields` and `:breakouts` during normalization

* More cleanup and extra tests 🔧

* Add ::mbql.s/OrderBys

* Mess with logging in resolution even more

* Order bys should be distinct ignoring keys like :base-type or namespaced keys

* I have fixed #60587

* One last round of test fixes??

* Test fix

* Code cleanup

* Fix test failures 🔧

* MongoDB test fix

* Fix Oracle test 🔧

* MongoDB test fix 🔧

* cljfmt

* e2e test fix?

* Test fix 🔧

* Less noisy logging

* Improve field resolution for implicit joins; PR feedback (part 1)

* PR feedback (part 2) and extra dox
2025-07-30 23:35:25 +00:00
eliotmetabase
adefc0f0b7 Create UX West, remove Admin Webapp and Dashviz (#61644) 2025-07-30 23:34:58 +00:00
dpsutton
fadfd67275 Test drivers on folder changes (#61633)
* Run tests if files in lib/drivers/qp are changes

check src/metabase/lib, src/metabase/query_processor, modules/drivers

we key off of team label but this is hopefully close enough to what we
really want

* run an action linter

```
❯ actionlint /Users/dan/projects/work/metabase/.github/workflows/drivers.yml
.github/workflows/drivers.yml:440:71: property "exclude-tag" is not defined in object type {name: string; test-args: string} [expression]
.github/workflows/drivers.yml:537:15: description is required in metadata of "Wait for localhost port to be ready" action at "/Users/dan/projects/work/metabase/.github/actions/await-port/action.yml" [action]
    |
537 |       - uses: ./.github/actions/await-port
    |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
.github/workflows/drivers.yml:587:13: description is required in metadata of "Test database driver" action at "/Users/dan/projects/work/metabase/.github/actions/test-driver/action.yml" [action]
    |
587 |       uses: ./.github/actions/test-driver
    |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.github/workflows/drivers.yml:743:71: property "exclude-tag" is not defined in object type {name: string; test-args: string} [expression]
```

acitonlint seems pretty nice

not fixing the exclude-tag since that seems to work just fine

* fix syntax

* fetch base branch for file checks

to see if we changed files, need the base

* indentation is fun. super fast iteration

* resequence if before run
2025-07-30 18:28:38 -05:00
Aleksandr Lesnenko
4b57f82089 saving new report should not show LeaveRouteConfirmModal 2025-07-30 20:19:56 -03:00
Aleksandr Lesnenko
b8d2ac9ebc fix backend not starting 2025-07-30 20:00:53 -03:00
Aleksandr Lesnenko
00e3499af8 remove replace question, drop refresh question 2025-07-30 19:29:04 -03:00
Aleksandr Lesnenko
d81a470a57 drop flushSync error 2025-07-30 19:28:58 -03:00
Aleksandr Lesnenko
c329272406 send used card ids 2025-07-30 19:28:49 -03:00
Aleksandr Lesnenko
75ec895750 less redux 2025-07-30 19:28:42 -03:00
Aleksandr Lesnenko
60ca78c873 remove snapshots 2025-07-30 19:28:35 -03:00
dpsutton
a204791f86 run third tier on devex team label (#61577)
* run third tier on devex team label

* empty to poke CI

* make prepare-statement private

probably good for this to be private either way, but this is done now to
kick CI and run tests that aren't running in CI

* close single quote
2025-07-30 17:09:57 -05:00
Edward Paget
4e7f0f28d3 fix: snyk set org and repo for open source limits (#61605) 2025-07-30 15:56:54 -05:00
John Swanson
a15d4122f2 Don't try to update setting as non-admin (#61567)
We're using a setting as a half-baked way to track whether we've ever
created a non-table chart. We do this regardless of whether you're an
admin or not, but the endpoint responds with a 403 if you're not an
admin.

Honestly motivation here was fixing [UXW-152: 403 thrown for non-admins
when viewing question re:
non-table-chart-generated](https://linear.app/metabase/issue/UXW-152/403-thrown-for-non-admins-when-viewing-question-re-non-table-chart)
but it feels a little silly. But... it's not *completely* unreasonable.
2025-07-30 20:47:37 +00:00
Case Nelson
8bc377369b refactor: drop with-temp from field-ref-repro tests (#61566) 2025-07-30 16:23:42 -04:00
Uladzimir Havenchyk
2ff3bb736f deps: update deps that use form-data to the fixed versions (#61582)
* deps: update deps that use form-data to the fixed versions

* downgrade jsdom
2025-07-30 20:06:09 +00:00
Uladzimir Havenchyk
badbd28565 deps: upgrade on-headers dep (#61589) 2025-07-30 20:05:11 +00:00
Nathan Voxland
c45c500628 Check for dev namespace better (#61610) 2025-07-30 14:46:08 -05:00
Uladzimir Havenchyk
a95c69a0b3 deps(release): update slack api and form-data packages (#61584) 2025-07-30 22:32:48 +03:00
Case Nelson
1319841229 dev: add the ability to run native ddl as part of dataset definitions (#61343)
* dev: add the ability to run native ddl as part of dataset definitions

* Fixing tests

* Fix kondo

* Fix tests and kondo

* Fix clickhouse tests

* Fix another clickhouse test

* Fix bigquery test

* Fix bigquery test

* Trigger Build
2025-07-30 13:24:53 -06:00
Edward Paget
e0bacfea5e feat: update group mapping text for jwt behavior (#61273)
* fix: filter-out non-string attributes

We expected login_attributes to only be strings. When they are created
through SAML or JWT logins we don't actually enforce this, so this
filters out non-string attributes printing a warning message if they are
passed for these login types.

* feat: auto assign jwt users to groups by name

When group sync is turned on and there are no group mappings defined for
the jwt integration.

* fixup! remove tenant user group

* fixup! correct bad merge

* fixup! remove some tenant_ids in tests

* fixup! more test fixes

* feat: make jwt group attribute admin configurable

* feat: update group mapping text for jwt behavior
2025-07-30 19:17:41 +00:00
Rodrigo López Dato
987ed5d7da Typo (#61624) 2025-07-30 16:01:04 -03:00
Nicolò Pretto
431afb660b feat(new-embed): log an error when the parsing of a json attribute fails (#61617)
* feat(new-embed): log an error when the parsing of a json attribute fails

* Update enterprise/frontend/src/metabase-enterprise/embedding_iframe_sdk/webcomponents.ts

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

---------

Co-authored-by: Phoomparin Mano <poom@metabase.com>
2025-07-30 20:51:21 +02:00
Edward Paget
b11f0905f3 fix: allow scalar user-attributes (#61613)
* fix: allow scalar user-attributes

Only drop collections which cannot be converted to strings when
generating database queries.

* fixup! remove unused namespace

* fixup! use keep to retain false booleans
2025-07-30 18:42:56 +00:00
Phoomparin Mano
7eee4b5da1 docs(sdk): missing documentation for question components (#61616) 2025-07-30 18:27:12 +00:00
John Swanson
4bef26a524 Remove quotes around UUIDs in XLSX downloads (#61614)
I'm ignoring `styles` and `typed-styles` here just like the `Object`
implementation or the `String` implementation.
2025-07-30 12:31:31 -05:00
Phoomparin Mano
9edd0db967 Embed preview for simple embedding fails on production due to localhost checks (#61606) 2025-07-30 23:41:37 +07:00
Sébastien
f51780142f feat(sdk): download button is now in an always visible ... menu (#61556)
* Closes EMB-669: download button is now in an always visible ... menu

* renamed file and component

* Update Loki Snapshots

* fixed unit tests

* e2e

* e2e

* e2e

---------

Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-07-30 17:11:42 +02:00
Ryan Laurie
98ce261480 don't pass empty strings to question create API (#61467)
* don't pass empty strings to question create API

* add unit tests

* handle null

* even better
2025-07-30 15:10:21 +00:00
Phoomparin Mano
f7e1511dcd Update settings page and use Embedded Analytics JS as the public name (#61597) 2025-07-30 21:50:41 +07:00
Edward Paget
f1d46ecf36 feat: make jwt group attribute admin configurable (#61234)
* fix: filter-out non-string attributes

We expected login_attributes to only be strings. When they are created
through SAML or JWT logins we don't actually enforce this, so this
filters out non-string attributes printing a warning message if they are
passed for these login types.

* feat: auto assign jwt users to groups by name

When group sync is turned on and there are no group mappings defined for
the jwt integration.

* fixup! remove tenant user group

* fixup! correct bad merge

* fixup! remove some tenant_ids in tests

* fixup! more test fixes

* feat: make jwt group attribute admin configurable
2025-07-30 14:43:20 +00:00
Ngoc Khuat
f93123f2a2 Fix alert with goal archived even though goal is not met (#61586) 2025-07-30 13:37:53 +00:00
Edward Paget
45ee83044e chore: add enterprise card test 2025-07-30 08:37:43 -05:00
Oleksandr Yakushev
6a73a95940 [dev] Add devtools-to-flamegraph script (#61157) 2025-07-30 15:42:05 +03:00
Phoomparin Mano
40d897d7f1 Add the Beta badge to "New > Embed" menu (#61593) 2025-07-30 19:03:41 +07:00
Oleksandr Solovyov
89a7f3c1b6 update nimbus-jose-jwt (#61581) 2025-07-30 11:17:02 +00:00
Phoomparin Mano
eb671b92ab Check for simple embedding's enabled settings and token feature (#61590) 2025-07-30 17:51:01 +07:00
Rodrigo López Dato
aa0cdb546d Fix empty latest version (#61578) 2025-07-30 00:43:01 -04:00
Aleksandr Lesnenko
c43a1c5ca5 switch to prosemirror ast 2025-07-29 23:02:07 -03:00
Aleksandr Lesnenko
a7930e7395 better markdown serde 2025-07-29 22:16:50 -03:00
Nathan Voxland
8132b400d2 /api/dashboard/save should use the submitter's id as creator_id (#61524) 2025-07-29 17:33:38 -05:00
Dennis Schridde
8c80f88e30 Fix race condition of ee-extra release trigger (#61559)
The workflow in the `metabase-ee-extra` repository could run before the
container image tags were created by the workflow in the `metabase`
repository, causing the former to fail.  Fix by making the image push
an explicit dependency of the ee-extra trigger.
2025-07-29 23:46:31 +02:00
Nathan Voxland
c004ea2d46 Created prototype API for dev work (#61473) 2025-07-29 16:36:13 -05:00
Edward Paget
ad58a25fc6 feat: associate cards with reports in create 2025-07-29 16:30:49 -05:00
Luiz Arakaki
78adcf7380 Rename sandboxing row column security (#58369)
Rename sandboxing to row and column security
2025-07-29 17:15:37 -03:00
Edward Paget
7c5f3f11db feat: associate in_report cards w/ report_document 2025-07-29 15:04:47 -05:00
dk-gervais
7bc29f3f9a Update community-drivers.md (#61431)
Add the InterSystems IRIS Metabase driver to the list of Community Drivers
2025-07-29 15:59:32 -04:00
Edward Paget
d7cf38d3cf fix: simplify sandbox permissions management (#61542)
This works by just totally removing the permission grants created by
sandboxes. Instead we use the `gtapped-table` flag added by the
sandboxing middleware to add just the gtapped-table itself to set of
necessary table create-query permissions and exclude any joined tables
from being added to this set.

If those tables are included elsewhere in the query (not the part
created by the sandbox), they will be added to the set of tables to
check normally and the query will be blocked if the user doesn't have
query-builder perms.
2025-07-29 14:22:49 -05:00
Edward Paget
72bca32bcd fix: new child collections use parent's namespace (#60202)
Child collections are automatically created with the same namespace as
their parent collection. Since we enforce a validation that this must be
true it seems simpler for api clients to have this value set for them
rather than requiring them to supply the namespace attribute (though it
still remains optional to pass one.)
2025-07-29 14:02:29 -05:00
Edward Paget
14b2815113 feat: auto assign jwt users to groups by name (#61221)
* fix: filter-out non-string attributes

We expected login_attributes to only be strings. When they are created
through SAML or JWT logins we don't actually enforce this, so this
filters out non-string attributes printing a warning message if they are
passed for these login types.

* feat: auto assign jwt users to groups by name

When group sync is turned on and there are no group mappings defined for
the jwt integration.

* fixup! remove tenant user group

* fixup! correct bad merge

* fixup! remove some tenant_ids in tests

* fixup! more test fixes

* Update common.clj
2025-07-29 14:01:50 -05:00
Phoomparin Mano
9b0241aa11 Rename feature token name from embedding_iframe_sdk to embedding_simple (#61548) 2025-07-30 01:38:15 +07:00
Edward Paget
13a851f3c1 feat: add audit log events for groups (#60946)
As part of the tenanting project we want to emit audit events when users
join/leave tenant groups (or these groups are otherwise modified).
2025-07-29 13:01:45 -05:00
Jeff Bruemmer
9dcd19054e docs - custom smtp server (#61549)
* custom smtp server

* notes

* edits
2025-07-29 13:48:36 -04:00
Nicolò Pretto
0c64aaa4a7 custom elements api for new simple embedding (#60646)
* wip

* experiment of callback to see if it works on vue with .callback={}

* basic e2e test for dashboard

* more tests and cleanup

* remove my-app playground

* rm unused file

* use custom elements for the preview

* support for async and defer, defaulting to defer

* clean up custom elements code

* rename drills props

* Revert "experiment of callback to see if it works on vue with .callback={}"

This reverts commit 89a38dca47.

* fix theme not being restored from persisted settings

* fix: load script  for preview from instance url, make iframe loaded data
attribute work

* change the snippet to use new defer syntax

* support for exploration with question-id=new

* cleanup

* fix types

* Revert "fix types"

This reverts commit bbc8eb8b59.

* Revert "support for exploration with question-id=new"

This reverts commit 4c3f041629.

* reimplement support for exploration

* fix parameters conditional rendering

* fix linting issues

* fix embed code snippet

* fix(new-embed): allow multiple questions/dashboards on the same page

* test for multiple questions

* add note about theme

* feat(sdk): expose the title prop in StaticQuestion (#61001)

* attempot to make tests more stable

* fix types

* maybe fix tests?

* test for ci

* put back support for is-save-enabled

* H.getIframeBody -> H.getSimpleEmbedIframeContent as it should be less flaky

* restore logic

* fix exploration not working in test

* moved comment to the correct place

* potential fix for handleMessage, ignore messages from other iframes

* use question for exploration templates

* fix type errors

* skip flaky "persists default and hidden parameters"

* fix template: exploration in embed flow

* always enable embedding-simple on embed flow tests

* refactor the custom elements tests to use the generic helpers

* fix tests :fingercrossed:

* default title to true

* update helper to grab the first 37.65

* default drills to true

* we're now showing the title by default

---------

Co-authored-by: Phoomparin Mano <phoomparin@gmail.com>
2025-07-29 18:57:04 +02:00
Nicola Mometto
ef8bc2ea06 reassign sem to querying (#61551) 2025-07-29 16:41:08 +00:00
Jacob Joseph
915a78f13a Update upgrading-metabase.md (#61552)
note about running on JAR with higher version.
2025-07-29 15:40:10 +00:00
Ryan Laurie
7427caa8d0 Remove release/update channel selection (#61369)
* remove release/update channel selection

* 😁

* white space is dark space in dark mode

* obey the linter

* update comment
2025-07-29 07:54:32 -06:00
Phoomparin Mano
35bc7c8b9a Fix flaky tests for simple embedding due to toasts blocking the next button (#61541) 2025-07-29 20:39:46 +07:00
Nick Fitzpatrick
ff36018fb9 Add includeDashboardQuestions to the useAvailableData check (#61507)
* Add includeDashboardQuestions to the useAvailableData check

* fix spelling
2025-07-29 09:04:10 -03:00
Nicola Mometto
b7d5408300 move me and libor to metabot (#61536) 2025-07-29 13:00:00 +01:00
Sébastien
7bc79ed0a5 Added 'hide' button to SDK problem banner (#61532) 2025-07-29 12:34:49 +02:00
Phoomparin Mano
4e87da201c Auto-enable simple embedding in embed flow instead of react sdk (#61463)
Co-authored-by: Roman Abdulmanov <roman@metabase.com>
Co-authored-by: Sébastien <sebastien@metabase.com>
2025-07-29 16:44:33 +07:00
github-automation-metabase
ea826ef62b Bump net.thisptr/jackson-jq from 1.3.0 to 1.4.0 (#61483)
Inspect dependency changes here:

Co-authored-by: bryan <bryan.maass@gmail.com>
2025-07-29 08:23:27 +00:00
Cam Saul
1270cf7271 [Lib] Remove idents part 6 (#61511) 2025-07-28 18:37:54 -07:00
Cam Saul
fc23270381 [Release blocker fix] Correctly handle remapping inside joins (#61442)
* Do not add new extra empty stages when converting a join from legacy

* Update gitignore

* Simplified fix for #60444

* Fix QUE-1607

* Test fix 🔧

* Fix QUE-1621

* Additional tests.

* Test fix 🔧

* Remove dead code -- schemas for idents in legacy MBQL schema

* Test fix 🔧

* Fix QUE-1623

* Test fix 🔧

* Fix failing tests

* Test fixes 🔧

* Make sure join metadata goes in the right place

* Additional tests

* Make sure join metadata goes in the right place

* Less verbose logging

* Test fixes 🔧

* Some extra tests 🔧

* Another test fix 🔧

* Remove unused export

* Cleanup

* Code cleanup

* Update tests 🔧

* test fixes

* Improve/fix metadata calculation

* Test fixes 🔧

* Update tests

* Test fix 🔧

* Test fixes 🔧

* Test fix 🔧

* Test fixes 🔧

* PR feedback

* Test fix 🔧
2025-07-29 01:30:50 +00:00
Cam Saul
1d5a79395d Remove 'fix bad references' middleware (#61472) 2025-07-28 20:21:23 -04:00
Denis Berezin
cff5e706f9 Ditch overall sidebar for now (#61523)
* Remove list of cards sidebar

* Some type fixes

* Review fixes
2025-07-29 01:24:14 +03:00
Fraser
cc3ddf8359 Add content translation to multi-autocomplete (#61263) 2025-07-29 09:40:28 +12:00
Jeff Bruemmer
5b5c5e7298 docs - time grouping parameters for sql queries (#60951) 2025-07-28 17:20:42 -04:00
bryan
0b3df70817 force ref checkout for pull_request type trigger (#61514) 2025-07-28 12:27:36 -06:00
Jeff Bruemmer
5e7f3e9467 docs - metadata editing (#61501) 2025-07-28 14:04:32 -04:00
Edward Paget
ffb583c99e feat: separate jwt-set attributes from manual-set (#61458)
* allow tenant attributes CRUD (#60347)

wip merge user and tenant attributes

WIP use new api

Split Mapping Editor

types fixed

so much unit testing

handle null cases

update tests

update a couple more e2e tests

less silly test

make things nicer

invalidate user cache on tenant update

* feat: separate jwt-set attributes from manual-set

* fixup! typescript stuff

* feat: restore structrue-attributes merging

Co-Authored-by: Dan Sutton <dan@metabase.com>

* feat: use merged attributes in routing/sandbox/etc

Co-Authored-By: John Swanson <john.swanson@metabase.com>

* fixup! move group manager test to ee

* fixup! kondo

* fixup! modal spec

* fixup! cypress tests

* fixup! migration timestamp

* fixup! one more cherry pick oopsie

* fixup! sandboxing cypress helper fixes

* fixup! more cypress updates

* fixup! remove eslint directive

* fixup! remove 2-arity router-dbor-id->destination-db-id

All the places it was called with 2-arity were explicitly passing in
@api/current-user anyway

---------

Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
Co-authored-by: Dan Sutton <dan@metabase.com>
Co-authored-by: John Swanson <john.swanson@metabase.com>
2025-07-28 16:50:15 +00:00
Edward Paget
be8e6611c3 fix: handle headerless translations csv (#61025)
* fix: handle headerless translations csv

* fixup! PR feedback

Also fixes an issue with error line number reporting without headers

* feat: allow csv headers to be in any order

* fixup! error reporting test
2025-07-28 16:31:29 +00:00
Nick Fitzpatrick
f889695914 remove references to static questions 2025-07-28 13:28:00 -03:00
Edward Paget
f182885389 fix: run each snyk project individually (#61430)
* fix: remove categories on push

* fix: run each project individually

* fix: run jobs in parallel with pom caching

* fixup! dry it up

* Update snyk.yml
2025-07-28 11:04:40 -05:00
Edward Paget
3bb4d5e74d chore: add more query permission test scenarios (#61095)
* chore: test deeply nested cards with mixed perms

* chore: test custom expressions and aggregations

* chore: add more tests for blocks and joins

* fixup! whitespace

* fixup! remove confusing comments
2025-07-28 15:17:23 +00:00
Ryan Laurie
17bea4176a Update diagnostic info instructions (#61504) 2025-07-28 08:59:24 -06:00
Aleksandr Lesnenko
e22ab60e01 allow hide if no results setting in visualizer (#61471) 2025-07-28 11:53:25 -03:00
Oleksandr Solovyov
04c1d21645 welcome everyone (#61316) 2025-07-28 17:07:40 +03:00
Chris Truter
e446ba2c3d Allow "blank" search for fieldvalues (#61497) 2025-07-28 14:07:13 +00:00
Oleksandr Solovyov
93390d9f57 upgrade liquibase and postgres (#59774)
---------

Co-authored-by: Nathan Voxland <nathan@metabase.com>
2025-07-28 08:39:24 -05:00
Brad Anderson
29f56b541f UXW-35 Fixes #56249 in a way that still preserves the fix for #51611 (#61462) 2025-07-28 09:33:49 -04:00
Kamil Mielnik
d786ffbff8 SEM-527 Table picker item text overflows (#61444)
* Bring the effect back

* Add a comment
2025-07-28 16:25:08 +07:00
Roman Abdulmanov
58cfd55861 Updated team.json (#61488) 2025-07-28 09:58:19 +01:00
Phoomparin Mano
6625097d66 Update the embedding sdk admin settings to add simple embedding toggle (#61392)
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-28 10:24:44 +02:00
Braden Shepherdson
ef21542b10 [MBQL Lib] Use stubs for cards and metrics in lib cache keys (#61386)
Fixes #61253.

Here's the breakdown of the issue, since it's subtle:
- These objects can contain some vanilla JS objects which in embedding
  contexts can be `Object.preventExtensions()`'d.
  - Eg. the `:visualization-settings` on a card or metric.
- `lib.metadata.cache` uses these objects as part of the cache key.
- Those become the keys of a CLJS map, which uses `cljs.core/hash`
- JS objects and arrays have pointer equality (`identical?` or `===`)
  semantics.
- The default `cljs.core.IHash/-hash` uses `goog.getUid(obj)`.
- That subtly mutates objects, adding a non-`enumerable`
  `closure_uid_123456789` property with an arbitrary sequence number.
- That's adding a property, which is a violation if
  `Object.preventExtensions()` (or `Object.freeze()`) has been used.
    - That silently does nothing by default, but throws in strict mode.

This PR modifies the cache key logic (which already has special handling
for `:lib/metadata`) to replace `:lib/type :metadata/card` and
`:metadata/metric` maps with a stub like `[:metric/card 123]`.
2025-07-28 07:43:18 +00:00
github-automation-metabase
645b55cfaf Bump commons-codec/commons-codec from 1.18.0 to 1.19.0 (#61482)
Inspect dependency changes here: https://github.com/apache/commons-codec/compare/commons-codec-1.18.0-RC1...commons-codec-1.19.0-RC1
2025-07-28 07:13:25 +00:00
Aleksandr Lesnenko
db61438bd8 cleanup 2025-07-28 03:10:45 -03:00
Uladzimir Havenchyk
351fdc90cf chore: reduce usage of moment-timezone (#61388)
* drop unused redux functions

* drop time parsing in event cards

* replace moment types with dayjs

* use dayjs for tz guessing

* drop moment from a hook

* drop unused time functions
2025-07-28 06:02:59 +00:00
Fraser
05e78aae4a Use H helpers insteaed of commands cypress (#61403)
* Use H helpers insteaed of commands cypress
2025-07-28 09:11:50 +12:00
Fraser
b0b8348dad Remove flaky tag from content translation tests (#61439) 2025-07-28 09:11:36 +12:00
Cam Saul
831fb413cc [Lib] Misc metadata calculation and conversion bugfixes (#61437)
* Do not add new extra empty stages when converting a join from legacy

* Update gitignore

* Fix QUE-1607

* Test fix 🔧

* Fix QUE-1621

* Additional tests.

* Test fix 🔧

* Remove dead code -- schemas for idents in legacy MBQL schema

* Test fix 🔧

* Fix QUE-1623

* Test fix 🔧
2025-07-26 04:10:14 +00:00
bryan
aab42da74c remove unused dependency (#61374) 2025-07-25 21:38:12 +00:00
bryan
1dc85bcbae run known fixtures ahead of running tests (#61461) 2025-07-25 21:34:55 +00:00
Ryan Laurie
6191275795 more leave confirmation 2025-07-25 15:24:18 -06:00
Ryan Laurie
319cf701dc allow saving in personal collections and our analytics 2025-07-25 15:10:29 -06:00
Edward Paget
5e79cee71f fix: improve db drop down perf by prefiltering (#60652) 2025-07-25 15:48:09 -05:00
github-automation-metabase
23d194ca63 Bump io.github.camsaul/toucan2 from 1.0.565 to 1.0.566 (#59909)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: bryan <bryan.maass@gmail.com>
2025-07-25 20:40:19 +00:00
Edward Paget
1cc4b87479 fix: mysql failure in saml setting test (#61460) 2025-07-25 18:40:18 +00:00
Phoomparin Mano
61d8979597 Update CORS and SSO handler to allow simple embedding client header (#61416) 2025-07-26 01:09:23 +07:00
Brad Anderson
0995bf3526 Fixes issue where dropping images into reports doesn't work because the events are getting swallowed by react-dnd 2025-07-25 13:01:25 -04:00
Phoomparin Mano
206f7eaccb feat(sdk): expose the title prop in StaticQuestion (#61001) 2025-07-25 23:06:56 +07:00
Aleksandr Lesnenko
00d8e50082 fix lists 2025-07-25 11:39:47 -04:00
Sébastien
832e2b7ac5 Viz 1323 visualizer cant combine single series chart and breakout (#61216)
* Closes VIZ-1322 VIZ-1323 looser compatibility

* fixup

* fixup

* fixed tests

* removed commented out blocks

* cleanup

* fixed unit test

---------

Co-authored-by: Tyler Plude <tsplude@gmail.com>
2025-07-25 17:33:09 +02:00
Chris Truter
dc973f0cb8 Add test coverage for search indexing during deserialization (#61047)
The test gives a bit of false confidence, as it passed before we added the forced re-indexing at the end of the import.

We probably want a way to keep the transaction open until after the ingestor has processed the messages from the toucan hooks... but that sounds quite invasive and brittle to pull off.
2025-07-25 15:14:40 +00:00
Edward Paget
08f7daa02a fix: reject dictionary locales not defined by mb (#60955)
If a locale is not defined for metabase we should not allow
content-translation dictionaries to uploaded with it. Since these
locales can't be used anyway it results in a confusing user experience.
2025-07-25 15:04:23 +00:00
Nick Fitzpatrick
606416ba23 Fixing UX jank with Code Jank 2025-07-25 11:42:09 -03:00
Oisin Coveney
f2b8b44d48 Convert index.js/jsx to index.ts/tsx (#61373) 2025-07-25 14:30:19 +00:00
Phoomparin Mano
9d3ed0c9f2 Add defsetting and update embedding card in admin setting (#61292)
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-25 21:01:05 +07:00
Oisin Coveney
0d14cb4aac Revert "Convert DashboardGrid to a functional component (#61364)" (#61449)
This reverts commit 647058ec89.
2025-07-25 13:56:19 +00:00
John Swanson
86a55c97d9 fix startup more 2025-07-25 05:40:18 -07:00
John Swanson
850afa8366 fix startup
@nvoxland i *think* this was a stray and not necessary for your metabot
changes but we can add it back along with `dev/src/api/routes.clj` if
i'm wrong!
2025-07-25 05:26:58 -07:00
Nick Fitzpatrick
0f1eb823d3 adding column blocks and colmns 2025-07-25 09:05:25 -03:00
Oisin Coveney
647058ec89 Convert DashboardGrid to a functional component (#61364)
Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-07-25 14:21:03 +03:00
Oisin Coveney
f58709dc20 Change InteractiveQuestion stories to SdkQuestion (#61445) 2025-07-25 13:52:36 +03:00
Phoomparin Mano
457cde39db Show simple embedding legal disclaimer and auto-enable embedding (#61375)
Co-authored-by: Oisin Coveney <oisin@metabase.com>
2025-07-25 17:51:45 +07:00
github-automation-metabase
3b028ee825 Bump net.snowflake/snowflake-jdbc-thin from 3.24.2 to 3.25.1 (#60910)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
2025-07-25 09:14:46 +00:00
Nathan Voxland
64448e927d Added ability to ask metabot about the report you are on 2025-07-24 23:23:27 -05:00
Aleksandr Lesnenko
f2a3859e32 fix editing viz settings when multiple copied entries 2025-07-24 22:34:08 -04:00
Aleksandr Lesnenko
2c85824963 saved images should render as images 2025-07-24 20:36:42 -04:00
Aleksandr Lesnenko
27420b5cb9 fix excessive space 2025-07-24 20:33:37 -04:00
Aleksandr Lesnenko
c3e67fd73e can write 2025-07-24 20:14:06 -04:00
Aleksandr Lesnenko
18ab9af893 hack in_report card type to return just question 2025-07-24 18:18:36 -04:00
Ryan Laurie
d3469efb09 frontend readonly support 2025-07-24 15:58:12 -06:00
Brad Anderson
e00d09cc37 Adds ability to add images via markdown to reports 2025-07-24 17:00:47 -04:00
Ryan Laurie
ef602ae2d0 show and save reports in collections 2025-07-24 14:52:38 -06:00
Aleksandr Lesnenko
65c5af5155 refresh snapshot 2025-07-24 16:34:58 -04:00
Aleksandr Lesnenko
eb0e823d1e title click opens question 2025-07-24 16:28:17 -04:00
Fraser
c22ec1ebbd Remove waits from map e2e test (#61395) 2025-07-25 08:21:41 +12:00
Luis Paolini
d46d9d4dc9 Allow a width param for preview_png exporting (#61348)
* Allow a width param for exporting

* Fix linter
2025-07-24 17:20:25 -03:00
Aleksandr Lesnenko
c6eeb8e6ba drill-through 2025-07-24 16:06:52 -04:00
John Swanson
af496e167d check perms on snapshot read/write
to read a snapshot, you need:

- read perms on the collection its report is in, if it has a report
attached, OR

- to be the person who created the snapshot in the first place.

to write a snapshot, you need to be a superuser.
2025-07-24 12:16:36 -07:00
John Swanson
48199ff2f7 add reports to collection items
we'll need to update the frontend to request `report` models, and then
handle them correctly there (with a special icon and links). For now
this won't have any effect, since the FE is selecting specific models
and that doesn't include reports.
2025-07-24 12:16:36 -07:00
Brad Anderson
83ca395ccf Allows links to be pasted into reports 2025-07-24 15:08:45 -04:00
Ryan Laurie
bd83d0691b keyboard shortcut for saving 2025-07-24 13:02:05 -06:00
Jeff Bruemmer
08cd4c5d37 docs - user-generated content translation (#61102) 2025-07-24 18:48:15 +00:00
Tyler Plude
99a91de1b4 VIZ-1202 - Visualizer compatibility BE search filters (#60912)
* Populate search index col of non temporal dimension ids using clojure fn

* Add non_temporal_dim_ids filter param to search request

* fix kondo

* Add stub impl of new filter to in-place

* Add metadata provider cache

* Adding has-temporal-dim filter; fix tests

* fix lint

* Fix merge

* Hookup frontend to proper BE search filters; remove deprecated impl of has-temporal-dimensions

* Fix kondo

* Fix lingering refs to has-temporal-dimensions

* Fix lingering refs to has-temporal-dimensions

* fix test

* Fix test

* Remove FE compatibility code that was ported to BE; fix typing of partition helper

* Add helper for parsing non-temporal-dim-ids endpoint param; fix the conditional in FE

* remove debug let

* Add pr ref to comment

* Include dimension filter params in request only if cartesian

* remove specs that depended on checkDimensionCompatibilityForCartesianCharts

* PR feedback

* use existing dataset query transform

* Optimized 1 images, saved 76.0 KB (48.2% smaller)

---------

Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-07-24 11:38:54 -07:00
dpsutton
2fcd6ed374 handle strings rather than empty strings (#61426)
sqlserver returns columns with empty strings. not bad. just handle it
2025-07-24 13:38:35 -05:00
Ryan Laurie
5b2fa90fdb fix new report navigation 2025-07-24 12:19:43 -06:00
github-automation-metabase
680b24023c Bump com.taoensso/nippy from 3.5.0 to 3.6.0 (#59907)
Inspect dependency changes here: https://github.com/taoensso/nippy/blob/v3.6.0/CHANGELOG.md

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: bryan <bryan.maass@gmail.com>
2025-07-24 18:10:22 +00:00
Jakub Chodorowicz
67aeb818ab Feature/smoother upgrade flow for customers (#61007)
* Prg-81-implement-logic-for-opening-store-and-receiving-messages (#60702)

* Add new self hosted upsell flow path

* Add upsell flow hook

* Add company name to params passed to store

* Update url parameters to snake case

* Remove redundant ampersand

* Clean up useEffect dependencies

* Add store origin to token activation message

* Improve put token mock

* Snake case return_url param

* Update messages' types

* Add source check on event

* Use dynamic store value (#60865)

* Create selector for store url

* Use dynamic store value in use upsell flow

* Improve store url selector

* Create useStoreUrl hook and deprecate getStoreUrl selector

* Increase the timeout of toast messages (#60966)

* increase the timeout of toast messages

* Send notification even if reference to store window was lost

* Add metabase window name (#60964)

* Prg-91-migrate-upsell-components-to-support-ee-upsell-flow (#60850)

* Enhance upsell functionality by adding onClick support to UpsellBanner and integrating useUpsellFlow in admin settings

Fix function name

* Use match pattern in UpsellBanner

* Add Upsell baner with click stories and tests

* Add upsell flow to dev instances banner

* Integrate upsell flow into UpsellBanner components

* Fix unrelated tests

* Improve the test assertion

* Prg-95-migrate-upsellcard-to-the-new-upsell-flow (#60989)

* Add onClock to UpsellCard component

* Migrate UpsellCard components to use self hosted upsell flow

* Disable new flow in dev instances upsell (#61048)

* Allow overriding store-url in dev env (#60967)

* Fix upsell flow with undefined store variable (#61056)

* Show failure toast even if connection with store was lost

* Add store-url to e2e default db setup

* Allow undefined store-url value in use upsell flow

* Fix failing unit tests

* Prg 96 migrate upsellbigcard to the new upsell flow (#61063)

* Migrace BigCard to use onClick

* Migrate BigCard upsells

* Add onClick to UpsellPill (#61076)

* Prg-104-run-the-new-upsell-flow-only-for-self-hosted-mb-instances (#61122)

* Disable new upsell flow on hosted instances

* Fix wrong match on UpsellBigCard

* Use getIsHosted selector

add test

* Fix e2e test - selecting upsell button

* Fix extra toast triggered with new upsells

* Add upsell flow to embedding ugprade link, remove binary notice from EE self serve (#61207)

* Fix typos

* Use existing link styles
2025-07-24 20:09:14 +02:00
Cam Saul
f197cbb591 lib/order-by should ignore duplicates (QUE-1604) (#61402) 2025-07-24 10:47:35 -07:00
bryan
85e8bcbc3d add CLA-passing email and name for bump commit (#61277) 2025-07-24 11:37:16 -06:00
bryan
50d9b94ccb run only when the Type:Documentation label set (#61427) 2025-07-24 17:25:20 +00:00
Nick Fitzpatrick
436341ab76 Viz Settings for Static Questions 2025-07-24 14:11:43 -03:00
Phoomparin Mano
aa7ced174f feat(sdk): do not show "New Question" as fallback for new question (#61015) 2025-07-25 00:10:38 +07:00
bryan
7de1211bab mage -escherize-pr-summary (#61352) 2025-07-24 09:53:22 -07:00
Phoomparin Mano
fd5a433265 fix(sdk): hide the "back to previous results" button in questions (#61018) 2025-07-24 23:48:46 +07:00
John Swanson
aabc1d165f Enforce permissions on reports
Add collection_id to reports, optionally allow setting it in API
endpoints (POST and PUT), enforce perms as follows:

- POST and PUT require superuser

- GET endpoints require read perms on the container collection
2025-07-24 09:44:57 -07:00
Edward Paget
a4747ed263 Add snapshotted timestamp 2025-07-24 11:35:21 -05:00
Ryan Laurie
cb5f72cad4 prevent losing unsaved changes 2025-07-24 10:28:54 -06:00
Brad Anderson
6c0b2d81ad UXW-9 Adds smart links. Changes "insert chart" mechanism from "@" to "starting with /" so @'s can be used for aforementioned smart links. 2025-07-24 12:26:13 -04:00
Cam Saul
1bd2398307 Fix conversion of joins with :fields in last stage to legacy (QUE-1603) (#61401) 2025-07-24 09:08:59 -07:00
Edward Paget
e0f1ecee2d exclude cards from recent views 2025-07-24 10:11:43 -05:00
Edward Paget
6b8124421a Add in_report card type;
make sure snapshotted cards have it set, exclude it from the collection
view and entity picker.

update the report editor to use the returned card id from the snapshot endpoint
2025-07-24 09:50:37 -05:00
Nicolò Maria Mezzopera
2dc4715824 chore: Refactor sync wait times to use a constant for delay and adjus… (#61415)
* chore: Refactor sync wait times to use a constant for delay and adjust retry limits

* Update e2e/support/helpers/e2e-qa-databases-helpers.js
2025-07-24 14:38:32 +00:00
Edward Paget
e07751fe9e fix: flake dashboard card test (#60146) 2025-07-24 14:23:48 +00:00
Edward Paget
3cde309b3c fix: make test not parallel to avoid flake (#61327) 2025-07-24 09:05:00 -05:00
Kamil Mielnik
a1a437bd26 SEM-526 Filtering preview crashes when table is hidden (#61265)
* Fix crash

* Add test

* Update comment
2025-07-24 13:42:45 +00:00
Kamil Mielnik
59d8776683 SEM-362 Table picker should render anchor elements (#61272)
* Fix tags invalidation for bulk tables update

* Add MassTableVisibilityToggle

* Render mass toggle for schemas

* Add the button for dbs
- fix not-currently-selected branches in the tree not updating

* Fix types

* Align icon

* Align chevron icon

* Always show the toggle button for hidden tables

* Change color of hidden tables

* Only use ids of relevant tables

* Add tests

* Add test

* Take all visibility options into account

* Rename MassTableVisibilityToggle to BulkTableVisibilityToggle

* Fix color

* Render table picker items as anchors

* Remove measuring elements as elements have constant size

* Fix types and tests

* Add test
2025-07-24 20:06:33 +07:00
github-automation-metabase
f5e92dbce9 Bump org.apache.commons/commons-lang3 from 3.17.0 to 3.18.0 (#60901)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
2025-07-24 15:30:04 +03:00
Oisin Coveney
fea73a4f5c Rename InteractiveQuestion symbols to SdkQuestion (#61213) 2025-07-24 12:07:08 +00:00
Uladzimir Havenchyk
3a7474eadc Revert "drop typescript-plugin-css-modules with stylus dependency to unblock …" (#61391)
This reverts commit 8a4c87a136.
2025-07-24 10:56:11 +00:00
Timofey Kachalov
967745c312 Adjust API docs sort order respecting the kind (#61407) 2025-07-24 13:17:15 +04:00
Aleksandr Lesnenko
df462d07d5 ensure question selected 2025-07-23 22:29:19 -04:00
Aleksandr Lesnenko
4f908179ec there has to be something to save to show the save button 2025-07-23 22:27:01 -04:00
Aleksandr Lesnenko
9cbdac4de4 deselect question after embedding so you can type further 2025-07-23 22:19:12 -04:00
Cam Saul
0cf80c77f2 [Lib] Finish removing idents (#61310)
* [Lib] Finish removing idents

* Fix Kondo warnings

* cljfmt

* Another pass at fixing Kondo warnings

* Test fix 🔧

* Test fix 🔧

* Test fixes 🔧

* A few more fixes 🔧

* Another pass

* Test fix 🔧

* Test fixes 🔧

* Test fix 🔧

* Test fixes 🔧
2025-07-23 19:17:23 -07:00
Aleksandr Lesnenko
0b4b4dfced padding is too huge 2025-07-23 22:13:19 -04:00
Aleksandr Lesnenko
19f4980a7e fix-hack magical new lines 2025-07-23 22:10:10 -04:00
Aleksandr Lesnenko
38e9f21dfb debloat report page, fix used content sidebar 2025-07-23 21:51:46 -04:00
Aleksandr Lesnenko
2775a7e069 sidebar button 2025-07-23 21:33:24 -04:00
Aleksandr Lesnenko
d92773df06 use snapshots, fix a few bugs, change viz settings sidebar behavior 2025-07-23 21:16:01 -04:00
Gustavo Saiani
09e2ee40e7 Update links (#61356) 2025-07-23 20:21:06 -03:00
Ryan Laurie
023864e72f correct ci skip label check (#61370) 2025-07-23 16:52:43 -06:00
Fraser
994e2ff647 Translate boolean content (#61366) 2025-07-24 10:32:21 +12:00
Fraser
afabd18f56 Add CLAUDE.md and copilot-instructions.md (#61313)
* Add CLAUDE.md and copilot-instructions.md
2025-07-24 10:32:08 +12:00
Ryan Laurie
9c479154a5 versions frontend 2025-07-23 15:58:42 -06:00
Nathan Voxland
747781ee29 Renamed duplicate constraints in migrations 2025-07-23 16:44:53 -05:00
github-automation-metabase
a5e13bedd8 Bump org.postgresql/postgresql from 42.7.5 to 42.7.7 (#59518)
Inspect dependency changes here: https://github.com/pgjdbc/pgjdbc/blob/REL42.7.7/CHANGELOG.md

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
2025-07-23 21:23:40 +00:00
Nathan Voxland
31503487b3 Merge remote-tracking branch 'origin/feature/reports' into feature/reports 2025-07-23 16:09:37 -05:00
Nathan Voxland
9c7f08c2ae Added ?version argument to GET report-id 2025-07-23 16:09:24 -05:00
bryan
5085f8ee19 rewrite clj-kondo/ignore for consistency (#61372) 2025-07-23 14:59:39 -06:00
Nick Fitzpatrick
8693547be1 Static Quesiton Node 2025-07-23 17:57:43 -03:00
Phoomparin Mano
341e81611e Migrate the new embed flow's snippets to use custom elements (#61330) 2025-07-23 20:38:46 +00:00
Edward Paget
29786d318c Replace runs with snapshoting endpoints 2025-07-23 15:33:05 -05:00
github-automation-metabase
22ddd2cba8 Bump djblue/portal from 0.59.1 to 0.59.2 (#61246)
Inspect dependency changes here: https://github.com/djblue/portal/blob/0.59.2/CHANGELOG.md

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: bryan <bryan.maass@gmail.com>
2025-07-23 14:27:31 -06:00
bryan
3df17fd3a8 Add custom and default responses to openapi docs (#61339) 2025-07-23 13:39:29 -06:00
bryan
c3dbced191 [github actions] skip pngs optimize for merges (#61378) 2025-07-23 13:26:35 -06:00
dpsutton
8e836010fb Extra logging for temp storage (#61342)
Suspecting that instances OOM due to loading these into
memory. Increasing context and logging to help diagnose this:

When running tests:

```
clj -X:dev:test :only '["test/metabase/notification" "test/metabase/pulse"]'
...
DEBUG metabase.notification.payload.temp-storage - stored data in temp file {:length 57167}
[main] DEBUG metabase.notification.payload.temp-storage - stored data in temp file {:length 718167}
[main] INFO  metabase.notification.payload.temp-storage - reading temp storage file of size: 55.8 kb
[main] INFO  metabase.notification.payload.temp-storage - reading file with preamble: {:dashboard_tab_id nil, :card_id 198, :dashboard_id 77}
[main] INFO  metabase.notification.payload.temp-storage - reading temp storage file of size: 55.8 kb
[main] INFO  metabase.notification.payload.temp-storage - reading file with preamble: {:dashboard_tab_id nil, :card_id 198, :dashboard_id 77}
[main] INFO  metabase.notification.payload.temp-storage - reading temp storage file of size: 701.3 kb
[main] INFO  metabase.notification.payload.temp-storage - reading file with preamble: {:dashboard_tab_id nil, :card_id 199, :dashboard_id 77}
[main] INFO  metabase.notification.payload.temp-storage - reading temp storage file of size: 701.3 kb
[main] INFO  metabase.notification.payload.temp-storage - reading file with preamble: {:dashboard_tab_id nil, :card_id 199, :dashboard_id 77}
```

Adding an optional preamble that is just `pr-str`'d and logging a human
readable size of the file that is saved
2025-07-23 14:26:17 -05:00
Jeff Bruemmer
634c7942cd docs - join expressions (#61376) 2025-07-23 19:20:46 +00:00
Alex Yarosh
5cdf070465 Update impersonation.md (#61380) 2025-07-23 15:15:46 -04:00
Nathan Voxland
9307c56d7b Added versions and reports API 2025-07-23 12:12:01 -05:00
Cam Saul
f1c7740a45 add-dimension-projections middleware => Lib (#61349)
* add-dimension-projections middleware => Lib (#39877)

* Ban mt/with-column-remappings inside QP tests

* Update pivot QP code to not convert to legacy

* Rename middleware

* Use the remap metadata provider in sandboxing tests
2025-07-23 09:59:33 -07:00
github-automation-metabase
df80eb95b6 Bump commons-validator/commons-validator from 1.9.0 to 1.10.0 (#60899)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: bryan <bryan.maass@gmail.com>
2025-07-23 16:40:36 +00:00
github-automation-metabase
a525192b0b Bump org.apache.logging.log4j/log4j-jcl from 2.24.3 to 2.25.1 (#60905)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: bryan <bryan.maass@gmail.com>
2025-07-23 10:30:34 -06:00
Ryan Laurie
07f1e62fae correct ci skip label check (#61370) 2025-07-23 16:13:48 +00:00
Anton Kulyk
b614b303ea Fix sorting dashboard header filters (#61220) 2025-07-23 15:56:14 +01:00
Edward Paget
2583528cb3 Convert get run endpoints to stream 2025-07-23 09:53:21 -05:00
Edward Paget
33edd890a3 Working save and fetch of run data 2025-07-23 09:13:08 -05:00
Edward Paget
1e8dbe446b Towards working save of runs 2025-07-23 09:13:08 -05:00
Nicolò Pretto
739e461866 skip assigning milestones to embed sdk PRs, closes EMB-658 (#61361) 2025-07-23 15:43:53 +02:00
Nicolò Maria Mezzopera
cd987d88a7 feat: await for async setup function (#61365) 2025-07-23 14:11:05 +02:00
Uladzimir Havenchyk
8a4c87a136 drop typescript-plugin-css-modules with stylus dependency to unblock builds (#61362) 2025-07-23 10:36:38 +01:00
Nicolò Pretto
f3953111ce fix unknown prop handleAxis on SdkIframeEmbedSetup (#61335) 2025-07-23 07:55:13 +00:00
Kamil Mielnik
d1345439f9 Remove unused functions (#61320)
* Remove fetchRealDatabasesWithMetadata

* Remove fetchTables

* Remove useActionListQuery
2025-07-23 14:00:08 +07:00
Sébastien
73b8863eb6 Closes VIZ-703 formatting of time values is incorrect (#61195) 2025-07-23 05:28:07 +02:00
Aleksandr Lesnenko
783d3ceca4 update parameters UI (#60746)
* update parameter styles, keep only one variant

* review

* specs

* Update Loki Snapshots

* lint

* tweak ui

* Update Loki Snapshots

* review

* fix spec

---------

Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-07-23 00:58:37 +00:00
Ryan Laurie
ce0e349f21 picard_facepalm 2025-07-22 16:59:54 -06:00
bryan
6d31996556 add CLA-signed metabase automation user git config (#61350) 2025-07-22 22:54:46 +00:00
github-automation-metabase
f3f462d9cc Bump org.jsoup/jsoup from 1.20.1 to 1.21.1 (#60249)
Inspect dependency changes here: https://github.com/jhy/jsoup/blob/jsoup-1.21.1/CHANGES.md

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: bryan <bryan.maass@gmail.com>
2025-07-22 16:47:10 -06:00
Ryan Laurie
fc5a6469ba saving fixes 2025-07-22 16:42:51 -06:00
Aleksandr Lesnenko
8523bf0412 ui 2025-07-22 18:11:00 -04:00
Aleksandr Lesnenko
13d11d33cd used content 2025-07-22 18:04:05 -04:00
Aleksandr Lesnenko
bb15f10b44 select chart type 2025-07-22 17:59:07 -04:00
Aleksandr Lesnenko
f9241dd461 show viz settings sidebar for embedded questions (#61341)
* show viz settings sidebar for embedded questions

* some redux

* ensure sidebar open

* settings sidebar edits charts viz settings
2025-07-22 17:27:28 -04:00
Nathan Voxland
a4a135903b Added report crud operations 2025-07-22 16:25:19 -05:00
Brad Anderson
67d31cea38 UXW-20 Adds “Browse all” option to SearchResults and RecentsList dropdowns 2025-07-22 17:20:07 -04:00
Jeff Bruemmer
1f0b41a30b add upgrade guide for SDK (#61031) 2025-07-22 20:18:57 +00:00
Ryan Laurie
b7e77ac43c add reports API Frontend 2025-07-22 13:41:57 -06:00
Kyle Doherty
89fd0b5c2b text fix 2025-07-22 14:58:17 -04:00
Kyle Doherty
5339aaa1ca layout and styling tweaks 2025-07-22 14:58:17 -04:00
github-automation-metabase
1880b20c34 Bump com.amazonaws/aws-java-sdk-core from 1.12.785 to 1.12.788 (#61252)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
2025-07-22 13:41:26 -05:00
Edward Paget
809896ee0a fixup! names on the migrations 2025-07-22 13:26:56 -05:00
Edward Paget
aae3788116 fix: remove namespace test const 2025-07-22 13:07:55 -05:00
Edward Paget
d743daaf20 feat: add migration and models for reports (#61300)
* feat: add migration and models for reports

* chore: add test for pivot card query caching

* Change column name markdown_docuemnt -> document

Add a content_type column to the table

* feat: add report run table and fk on cards

* feat: report run api start

* feat: run report api skeleton fixes for migration issues

* fixup! make qp run work
2025-07-22 12:46:09 -05:00
Aleksandr Lesnenko
853d9b0cf0 collapse sidebar in the reports view 2025-07-22 13:42:52 -04:00
Aleksandr Lesnenko
4e88f438e9 reorganize question embed node files 2025-07-22 13:01:35 -04:00
Ryan Laurie
5b6d472c96 cleanup some llm garbage 2025-07-22 10:38:00 -06:00
Jeff Bruemmer
37cfdcfd3e docs - script to generate country codes table. (#61329)
* script to generate country codes

* link
2025-07-22 16:03:56 +00:00
Brad Anderson
a7ecc9e669 Closes VIZ-1311 - Slow loading dashcards with no average query duration shows 0 (#61035)
Tweaks slow-loading hover cards
2025-07-22 12:03:44 -04:00
Ryan Laurie
60373ead57 add markdown exports
# Conflicts:
#	enterprise/frontend/src/metabase-enterprise/reports/components/ReportPage.tsx
2025-07-22 10:01:30 -06:00
Ryan Laurie
a4a927799d Enable CI skipping on PRs (#61307)
* dont run tests on pr with ci skip

* static viz too

* label instead of title
2025-07-22 09:59:24 -06:00
Aleksandr Lesnenko
8e75cd74f4 Report editing (#61290)
* basic tiptap

* new menu item

* vibecoded embedding

* lint, prettier

* layout

* refactor vibecoded layout

* ui

* useless placeholder

* fix selection

* lint

* ui

* ui

* ux

* ui

* experimental, possibly revert: notebook editor
2025-07-22 11:52:14 -04:00
Ryan Laurie
fda455fabc Enable CI skipping on PRs (#61307)
* dont run tests on pr with ci skip

* static viz too

* label instead of title
2025-07-22 09:47:26 -06:00
Sébastien
5d5f73f403 Closes VIZ-46 number formatting for remapped columns (#61201) 2025-07-22 17:35:54 +02:00
Sloan Sparger
7304c050ab [Metabot] Ensure state is saved on streamed responses (#61282) 2025-07-22 09:58:20 -05:00
github-actions[bot]
e8dee796db Update translations 2025-07-22 (#61314)
* Update translation sources 2025-07-22

* Update translations

---------

Co-authored-by: github-actions <github-actions@github.com>
2025-07-22 14:55:23 +00:00
eliotmetabase
3e605c6d87 Update uberjar.yml to remove unused branches (#61306)
Remove branches that no longer exist from uberjar workflow to clean it up a bit
2025-07-22 09:00:23 -05:00
Brad Anderson
1fc73ccc47 Closes VIZ-1318 - Visualize in another way uses the Card Definition rather than the Dashboard Card (#61230)
Changes how the bug is fixed from trying to send parameters to using dataset fallbacks if a query fails
2025-07-22 09:29:14 -04:00
Ngoc Khuat
3441035d2d port the condition expression to master (#61045) 2025-07-22 09:57:12 +00:00
Oleksandr Solovyov
d530b9a45c hashp without stdout redirect (#61315) 2025-07-22 09:30:50 +00:00
github-automation-metabase
5be18b9afd Bump hiccup/hiccup from 1.0.5 to 2.0.0 (#59908)
Inspect dependency changes here: https://github.com/weavejester/hiccup/blob/2.0.0/CHANGELOG.md

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: bryan <bryan.maass@gmail.com>
2025-07-22 07:45:53 +00:00
Fraser
0a61f6688f Move Content Translation settings and tweak copy (#61039) 2025-07-22 14:27:21 +12:00
Tyler Plude
6421b4187e Add tsplude to metabot team (#61286) 2025-07-21 17:45:15 -07:00
Cam Saul
40ce015882 Overhaul add-implicit-joins, fix/consolidate metadata normalization and other issues (#61168)
* Overhaul add-implicit-joins middleware

* Restore the wacko metadata updating code

* Ok, joins ARE allowed to have :fields.

* Fix JS tests 🔧

* Fix QUE-1563

* Test fixes 🔧

* Fix 100 more broken things

* Test fixes

* Use same distinct-ref logic as lib

* More test fixes 🔧

* Make add-alias-info better at matching things

* Consolidate the legacy result metadata schemas

* cljfmt

* Use `:decode/normalize` in the REST API for boring things like metadata

* Another round of test fixes 🔧

* Restore kondo ignore

* Another round of test fixes 🔧

* cljfmt

* PR feedback 🔧
2025-07-21 13:54:28 -07:00
github-automation-metabase
b7d02f7d6c Bump commons-io/commons-io from 2.19.0 to 2.20.0 (#61245)
Inspect dependency changes here:

Co-authored-by: Metabase bot <metabase-bot@metabase.com>
2025-07-21 19:30:06 +00:00
Chris Truter
bf0624f700 Lint against incorrect time elapsed measurements (#61169) 2025-07-21 17:36:46 +00:00
Nicolò Maria Mezzopera
9f823bd747 chore: remove cy.wait in favour of waiting for element presence (#61226)
* chore: remove wait in favour of waiting for modal to disappear

* feat: wait for query to be completed to possibly avoid DB race condition

* feat: wait for the table name to be shown in the ui before clicking it

* chore: removed un-needed waits

* Update e2e/test/scenarios/admin/admin-reproductions.cy.spec.js

Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>

---------

Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
2025-07-21 17:26:39 +00:00
Aleksandr Lesnenko
f881594d61 fix timeline events merging logic (#61239) 2025-07-21 13:02:29 -04:00
Romeo Van Snick
8401e8715d Disable :case and :coalesce type-compatibility checks (#61279)
* Disable :case and :coalesce type-compatibility checks

* Skip test
2025-07-21 16:56:26 +00:00
Aleksandr Lesnenko
8252df95f2 actually tsx 2025-07-21 12:47:54 -04:00
Aleksandr Lesnenko
1cd6a43417 report route 2025-07-21 12:18:23 -04:00
Jakub Chodorowicz
1cd2a7dafe Fix flaky SettingsPage test (#61009)
* Fix flaky SettingsPage test

* Use role selector
2025-07-21 17:44:14 +02:00
Romeo Van Snick
cd77efaf80 Relocate expressions code (#61120)
* Move expression widget into subfolder

* Import expression components from top-level

* Move expression helpers to metabase/querying/expressions

* Fix fuzzing paths

* Fix comment

* Add missing exports from expressions

* Remove unused exports

* Sort exports

* Add helper to get supported clauses

* Rename complete to suggestions for consistency

* Move tokenAtPos to position module

* Move assertion helpers to utils

* Split up pratt/types

* Use token text instead of slicing source

* Remove superflouous from and to on token

* Remove superflouous from, to and len on token

* Remove content helper

* Remove superflous fields on Token

* Rename compiler to compile-expression

* Fix imports

* Fix exports

* Remove eslint directives

* Move FK_SYMBOL to formatting/constants

* Use () => undefined instead of jest.fn
2025-07-21 17:35:57 +02:00
Brad Anderson
e50e3ddad8 VIZ-1287 Adds pressed state for visualizer Settings button (#61101) 2025-07-21 11:25:40 -04:00
Alexander Polyankin
b6174a8a0c Make Booleans work without Category (#61202) 2025-07-21 15:10:24 +00:00
github-actions[bot]
4956974743 Update translations 2025-07-17 (#61144)
* Update translation sources 2025-07-17

* Update translations

---------

Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Jacob Joseph <likeshumidity@users.noreply.github.com>
2025-07-21 14:49:44 +00:00
Sébastien
2c2863cb9d Update team.json (#61254) 2025-07-21 16:32:54 +02:00
Kamil Mielnik
1e22b1971c SEM-505 The Preview button should be more noticeable and accessible (#61260)
* Move buttons into the sticky container, make preview button always present

* Update tests

* Make the preview button toggle the state
2025-07-21 21:19:45 +07:00
Rodrigo López Dato
0ff7a8887c Fix "Docker Hub" capitalization (#61268) 2025-07-21 11:03:48 -03:00
Kamil Mielnik
4e04711a2d Mass hide/unhide tables (#61206)
* Fix tags invalidation for bulk tables update

* Add MassTableVisibilityToggle

* Render mass toggle for schemas

* Add the button for dbs
- fix not-currently-selected branches in the tree not updating

* Fix types

* Align icon

* Align chevron icon

* Always show the toggle button for hidden tables

* Change color of hidden tables

* Only use ids of relevant tables

* Add tests

* Add test

* Take all visibility options into account

* Rename MassTableVisibilityToggle to BulkTableVisibilityToggle
2025-07-21 13:56:15 +00:00
Romeo Van Snick
f38a0f6769 Allow supression of case and coalesce arg typechecks (#61264)
* Allow supression of case and coalesce arg typechecks

* Add test for ignored type-check

* Configure *suppress-expression-type-check?* in tests

* Fix formatting
2025-07-21 15:44:39 +02:00
Oisin Coveney
7e1ab4e2c7 Make sure that user plugin dashcard menu has priority over default menu (#61262) 2025-07-21 15:56:02 +03:00
Oisin Coveney
13d4abff0b Fix dashboard loading state for empty dashboards (#61052) 2025-07-21 14:46:30 +03:00
Ngoc Khuat
f1f175e4e5 Reversion the migration to fix v_alerts from 56 to 55 (#61161) 2025-07-21 12:42:36 +02:00
Nicolò Pretto
f4ac64fd80 Hide sample database mentions in <DatabaseForm> in the embedding setup (#61067)
* refactor DatabaseForm to fix unwanted changes to the embedding setup

* text-secondary

* clean up types
2025-07-21 11:00:05 +02:00
Kamil Mielnik
ff7eb5f1f5 SEM-497 Filtering preview inputs get auto-focused (#61190)
* Add autoFocus prop to filter components

* Disable autoFocus in preview

* Update unit tests

* Add test
2025-07-21 14:23:18 +07:00
Fraser
b241401b2d Fix Cloud SMTP Connection Card styling (#61115) 2025-07-21 09:41:31 +12:00
William
fea9b59511 Allow field filters and time groupings to specify an alias (#61118)
As is, field filters and time groupings assume that they can just refer to the field normally.  In queries where aliases are
used/required, this doesn't work so well.  Letting users specify the alias to use in place of the normal field
reference handles this case.

---------

Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
2025-07-18 14:34:41 -05:00
Sloan Sparger
0374a8ac42 [Metabot] Improve loading experience logic (#61173)
* improve loading experience logic and fix bug where there are tool calls without messages causing messages to get cramed together with no space

* add a unit test
2025-07-18 14:03:46 -05:00
Aleksandr Lesnenko
d43c0a418b Fix visualizer cards crash due to inability to find the x-axis dimension column (#61180)
* fix visualizer cards crash

* reapply metabase#60892

* spec
2025-07-18 14:37:43 -04:00
Nick Fitzpatrick
d3435af399 Change styling for Home Help Component (#60180)
* Updating HomeHelpCard

* remove duplicated style
2025-07-18 15:02:22 -03:00
Alexander Polyankin
43ff1d6a13 Multiple values for native query parameters (#60984) 2025-07-18 17:45:33 +00:00
Nicolò Pretto
c4aca6545e fix(sdk): when starting from an entity id dashboard, use the numeric id (#61188)
Co-authored-by: Phoomparin Mano <phoomparin@gmail.com>
2025-07-18 22:18:52 +07:00
Uladzimir Havenchyk
f7288acbfe test: ensure popover contains delete permanently in trash (#61199) 2025-07-18 17:46:45 +03:00
Nicola Mometto
c57656fbfa Bigquery nested fields fix (#61193)
* scope by table-name

* add test
2025-07-18 15:09:44 +01:00
bryan
f24a7fdc18 crush every docs png in the repo (#61172) 2025-07-18 13:51:57 +00:00
Alberto Perdomo
22e6fd8d57 Update SDK NPM link in docs (#61192) 2025-07-18 15:17:13 +02:00
Nick Fitzpatrick
52d9ba6670 adjusting layout for <Tab.Tab> and <Button> components (#60992)
* adjusting layout for <Tab.Tab> and <Button> components

* update UserListElement
2025-07-18 09:55:36 -03:00
Uladzimir Havenchyk
0c2dddf2bc test: fix another flakiness in model re-mapping test (#61186) 2025-07-18 15:37:00 +03:00
Kamil Mielnik
aa691b0888 SEM-501 Add warning when multiple Entity Name field semantic types exist on the same table (#61148)
* Add warning

* Show prefixes

* Add test
2025-07-18 12:07:58 +02:00
Anton Kulyk
037cd61c9e Allow "focusing" a recently moved dashboard filter (#61085)
* Add `extraAction` prop to `undo` object

* Make `setEditingParameter` switch tab if needed

* Put a dashboard filter in the viewport

* Fix toast text appearance

* Hide "Show filter" button when moving to top nav

* Add e2e test

* Fix tests
2025-07-18 10:57:48 +01:00
Kamil Mielnik
5e08c9e9e1 SEM-390 Change copy of "Duration" to "Reset to defaults after" for log level customization (#61183)
* Update copy

* Update copy

* Bring back non-numeric prefix

* Reduce flickering (thanks @romeovs)

* Fix test
2025-07-18 16:42:34 +07:00
Oisin Coveney
2568336e90 Make ArchivedEntityBanner a context component (#60939) 2025-07-18 10:40:10 +03:00
Uladzimir Havenchyk
0ba623e4ba test: fix flakiness in model mapping test (#61146) 2025-07-18 10:39:14 +03:00
Vamsi Peri
4ff56367f9 Fix transparent background for SQL editor autocomplete suggestions (#61178)
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-17 21:43:47 -04:00
Tyler Plude
c1484f5f57 Sort currency options by name not code (#60794)
* fix currency sort order in settings dropdown

* Preserve priority currency order; apply sort helper to other currency select inputs

* currency.js -> currency.ts

* move sort to cljc; revert FE changes

* rm unnecessary comment
2025-07-17 18:15:46 -07:00
Aleksandr Lesnenko
59193a2267 sort parameters in subscription sidebar (#61119) 2025-07-17 20:28:23 -04:00
Sloan Sparger
fb99cfcdc6 [Metabot] Fix horizontal scrollbar when response contains code (#61174) 2025-07-17 18:57:26 -05:00
Aleksandr Lesnenko
cfb3d5ad2e improve getParameterMappingOptions (#61113) 2025-07-17 19:43:49 -04:00
Tyler Plude
9eb27dc5c9 VIZ-1281 - Fix include-current for dashboard parameters (#60890)
* Pass parameter format options to lib

* pr feedback
2025-07-17 15:51:13 -07:00
dpsutton
9753a8a64d Ensure postgres downloads don't OOM (#60807)
* Ensure postgres downloads don't OOM

Fixes https://github.com/metabase/metabase/issues/60733

For performance reasons we set autocommit to true. this has an
unfortunate consequence that the postgres driver does not honor batch
sizes. We go through a lot of trouble to hook the streaming results of a
query to the output stream of the download, but the postgres jdbc driver
will realize all rows in memory.

A fast way forward is to set autocommit to false only when
`write?` (previous condition) or when executing a postgres download, as
reported in https://github.com/metabase/metabase/issues/60733.

How to test:
this is difficult. In CI we use

```clojure
  :ci
  {:jvm-opts ["-Xmx12g"
              "-Xms12g"
```

So hitting a query that would deterministically OOM the instance
requires a lot more muscle than we realistically want to use.

I'm running the following tests locally:

```
  :small-ram
  {:jvm-opts ["-Xmx400m"
              "-Xms400m"
              "-Dci=TRUE"]}
```

```clojure
(defn- readable [bytes]
  (cond (nil? bytes)  "0 bytes"
        (zero? bytes) "0 bytes"
        :else
        (let [units ["b" "kb" "mb" "gb" "tb"]
              magnitude   1024.0]
          (loop [[unit & remaining] units
                current (double bytes)]
            (if (and (seq remaining) (> current magnitude))
              (recur remaining (/ current magnitude))
              (format "%.1f %s" current unit))))))

(defn- consume
  [^java.io.InputStream is]
  (let [arr (byte-array 8024)]
    (loop [c 0, gas 5000000]
      (let [r (java.io.InputStream/.read is arr 0 (alength arr))]
        (cond (zero? gas)
              (throw (ex-info "Ran out of gas" {}))
              (neg? r) c
              :else (recur (+ c r) (dec gas)))))))

(deftest large-csv-test
  (mt/test-driver :postgres
    (testing "Postgres can download csvs without holding the entire results in memory #(#60733)"
      (let [large-query "SELECT repeat('x', 2048) FROM generate_series(1, 1000000)"
            result (mt/user-real-request :crowberto :post 200 "dataset/csv"
                                         {:request-options {:as :stream}}
                                         {:query       (mt/native-query
                                                        {:query large-query})
                                          :format_rows true})
            size (consume result)]
        (is (> size 2000000000)
            (format "Only consumed %s but expected ~2gb" (readable size)))))))
```

and then

```
❯ time source pg.env && DRIVERS=postgres clojure -X:dev:test:small-ram :only metabase.driver.postgres-test/large-csv-test

Running QP tests against these drivers: #{:postgres}

LONG TEST in metabase.driver.postgres-test/large-csv-test
Test took 23.358 seconds seconds to run

Ran 1 tests in 32.825 seconds
2 assertions, 0 failures, 0 errors.
{:test 1, :pass 2, :fail 0, :error 0, :type :summary, :duration 32825.099875, :single-threaded 1}
Ran 0 tests in parallel, 1 single-threaded.
Finding and running tests took 40.7 s.
All tests passed.
Running after-run hooks...
```

Why not add these tests now?
We probably should write a full memory regression suite. This is a great
candidate for a first one. But it seems silly to run a new CI job with
just this one job. Push back if you think i'm wrong.

Another area of pushback:
I took the lazy way when determining if a driver should have autocommit
set to false or not: i hardcoded it.

```clojure
(and (-> options :download?) (= driver :postgres))
```

The alternative is some method of a new driver multimethod or
driver-supports?. The former feels a bit heavy-weight, the latter feels
not quite right since this is almost a non-support and all other jdbc
drivers do support it, presumably?

I'm quite open to pushback here and invite comments if you see a better way.

* Can't use an if for write?

You'd think you can use an if here but the previous code used a when and
is silent on write?. Lots of tests fail relating to datasets in test
setup and uploads. Don't want to debug that in this bug fix context so
leaving a todo

* remove old arity metadata. thanks eastwood!

* Don't set autoCommit for all postgres and descendant drivers

```clojure
(ns ^:mb/memory metabase.memory.csv-test
  (:require
   [clojure.test :refer :all]
   [metabase.test :as mt]
   [metabase.driver :as driver]))

(set! *warn-on-reflection* true)

(defn- readable [bytes]
  (cond (nil? bytes)  "0 bytes"
        (zero? bytes) "0 bytes"
        :else
        (let [units ["b" "kb" "mb" "gb" "tb"]
              magnitude   1024.0]
          (loop [[unit & remaining] units
                 current (double bytes)]
            (if (and (seq remaining) (> current magnitude))
              (recur remaining (/ current magnitude))
              (format "%.1f %s" current unit))))))

(defn- consume
  [^java.io.InputStream is]
  (let [arr (byte-array 8024)]
    (loop [c 0, gas 5000000]
      (let [r (java.io.InputStream/.read is arr 0 (alength arr))]
        (cond (zero? gas)
              (throw (ex-info "Ran out of gas" {}))
              (neg? r) c
              :else (recur (+ c r) (dec gas)))))))

(def driver->query
  {:sqlite "WITH RECURSIVE generate_series(value) AS (
  SELECT 1
  UNION ALL
  SELECT value + 1 FROM generate_series WHERE value + 1 <= 1000000
)
SELECT replace(hex(zeroblob(1024)), '00', 'xx') FROM generate_series;"
   :postgres "SELECT repeat('x', 2048) FROM generate_series(1, 1000000)"
   :clickhouse "SELECT repeat('x', 2048)
FROM system.numbers
LIMIT 1000000;"
   :redshift "WITH series AS (
  SELECT ROW_NUMBER() OVER () as i
  FROM stl_scan s1, stl_scan s2
  LIMIT 1000000
)
SELECT REPEAT('x', 2048) FROM series;"})

(deftest large-csv-test
  (mt/test-drivers #{:postgres :sqlite :clickhouse :redshift}
    (testing "Postgres can download csvs without holding the entire results in memory #(#60733)"
      (let [large-query (or (driver->query driver/*driver*)
                            (throw (ex-info "Driver doesn't implement big query"
                                            {:driver driver/*driver*
                                             :available (keys driver->query)})))
            result (mt/user-real-request :crowberto :post 200 "dataset/csv"
                                         {:request-options {:as :stream}}
                                         {:query       (mt/native-query
                                                        {:query large-query})
                                          :format_rows true})
            size (consume result)]
        (is (> size 2000000000)
            (format "Only consumed %s but expected ~2gb" (readable size)))))))

(comment
  (mt/set-test-drivers! #{:postgres})
  (mt/set-test-drivers! #{:sqlite})
  (mt/set-test-drivers! #{:clickhouse})
  (mt/set-test-drivers! #{:redshift})
  (mt/test-drivers #{:redshift}
    (mt/db))

  )

```

Verify this with

```
  :small-ram
  {:jvm-opts ["-Xmx400m"
              "-Xms400m"
              "-Dci=TRUE"]}
```

and then

```
;; driver.env:
;; local clickhouse
export MB_CLICKHOUSE_TEST_password="password"
export MB_CLICKHOUSE_TEST_username="default"

;; local postgres
export MB_POSTGRESQL_TEST_USER=dan

export MB_REDSHIFT_TEST_PASSWORD=<value>
export MB_REDSHIFT_TEST_USER=<value>
export MB_REDSHIFT_TEST_DB=<value>
export MB_REDSHIFT_TEST_HOST=<value>
```

and then running:

```
❯ source driver.env && DRIVERS=redshift clojure -X:dev:test:drivers:drivers-dev:ee:ee-dev:small-ram :only metabase.memory.csv-test/large-csv-test
...
Running tests in metabase.memory.csv-test/large-csv-test
Finding tests took 8.3 s.
Running 1 tests
Running before-run hooks...
Running QP tests against these drivers: #{:redshift}
..
LONG TEST in metabase.memory.csv-test/large-csv-test
Test took 188.320 seconds seconds to run

Ran 1 tests in 188.338 seconds
2 assertions, 0 failures, 0 errors.
{:test 1, :pass 2, :fail 0, :error 0, :type :summary, :duration 188337.678584, :single-threaded 1}
Ran 0 tests in parallel, 1 single-threaded.
Finding and running tests took 3.3 mins.
All tests passed.
Running after-run hooks...
```

redshift takes a while.

contrast with

```
❯ source driver.env && DRIVERS=clickhouse,postgres clojure -X:dev:test:drivers:drivers-dev:ee:ee-dev:small-ram :only metabase.memory.csv-test/large-csv-test
...
Running QP tests against these drivers: #{:postgres :clickhouse}
...
LONG TEST in metabase.memory.csv-test/large-csv-test
Test took 46.638 seconds seconds to run

Ran 1 tests in 46.655 seconds
4 assertions, 0 failures, 0 errors.
{:test 1, :pass 4, :fail 0, :error 0, :type :summary, :duration 46655.436333, :single-threaded 1}
Ran 0 tests in parallel, 1 single-threaded.
Finding and running tests took 56.5 s.
All tests passed.
Running after-run hooks...
```

both running locally happen in ~1 minute compared to 3 minutes for redshift

* Remove commented out old arity

this funciton used to have two arities for clarity. But it wasn't
another entrypoint, it was just trying to keep things a bit cleaner. But
the result is that at the point where we used the string sql query we
didn't have the `info` map in lexical scope. Fixing this across arities
would have pushed us into 7 positional args, so you might want to switch
to a map, but honestly, it's just the same function.
2025-07-17 17:06:12 -05:00
Cam Saul
ea6a639b63 [Lib] Remove idents part 4 (#61149)
* [Lib] Remove idents part 4

* Kondo
2025-07-17 14:38:30 -07:00
bryan
2454ab7188 Mage Token Git Precommit Scanner (#60729)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-17 12:41:22 -06:00
Uladzimir Havenchyk
517f98bf5c test: fix flakiness in visualizer test (#61104) 2025-07-17 20:19:24 +03:00
Kamil Mielnik
0e75b6bbac SEM-463 Responsive buttons (#60928)
* Add ResponsiveButton component

* Prevent focus state being cut off

* Make the buttons responsive in the table section

* Make the buttons responsive in field section

* Extract useResponsiveButtons

* Add comments

* Extract useResponsiveButtons in FieldSection

* Add aria-label to the button

* Add tests

* Test tooltips

* Fix indent
2025-07-17 17:17:44 +00:00
Timofey Kachalov
82bad2ee19 Fix positioning of the Mantine Modal in SDK (#60917) 2025-07-17 20:54:03 +04:00
Phoomparin Mano
87afb2783f Reduce flakiness in new iframe embed locale test (#60973) 2025-07-17 23:33:03 +07:00
Anton Kulyk
ca73c4406e Add dashboard_filter_moved analytics event (#61084)
* Add `dashboard_filter_moved` analytics event

* Update event
2025-07-17 17:17:49 +01:00
Kamil Mielnik
e0e25ed230 Fix SEM-499 (#61131) 2025-07-17 23:11:57 +07:00
Cam Saul
2505c039bf [Lib] remove 'idents' part 3 (#60875)
* [Lib] remove 'idents' part 1

* [Lib] remove idents part 2

* [Lib] remove idents part 3

* Update tests

* Remove ident-related tests for Cards

* Remove more ident tests

* Remove more ident-related tests

* Fix Kondo warnings
2025-07-17 08:10:14 -07:00
Jeff Bruemmer
f2ce68cd98 Update saml-google.md (#61137) 2025-07-17 10:58:59 -04:00
Sloan Sparger
dc5ed72564 [Metabot] Add new teammates to Team Metabot (#61143) 2025-07-17 09:53:08 -05:00
Anton Kulyk
58717801ec Add "Move filter" menu (#60784)
* Add "move filter" menu

* Add undo

* Handle single tab dashboards

* Update text color for checked items

* Fix collapsed menu appearance

* Add tests

* Fix error when a tab doesn't have any dashcards

* Fix "Top of page" option selected color

* Use "card.title" viz setting

* Truncate long card titles

* Update "Disconnect from cards" button appearance

* Fix type error

* Make the select searchable, touch up on appearance

* Fix e2e test

* Add `moveDashboardFilter` helper

* Fix e2e test name

* Remove subtitles

* Update icon color

* Update icon color
2025-07-17 15:49:22 +01:00
bryan
92d757b132 Mage jar-download custom dir fix (#61138) 2025-07-17 14:48:37 +00:00
Nicolò Pretto
ff702a180c skip sdk compat tests as they're failing (#61136)
* skip sdk compat tests as they're failing

* make the yml pass validation
2025-07-17 14:35:22 +00:00
Phoomparin Mano
878fc256b6 Do not update new iframe embed flow preview if the same resource is chosen (#61014) 2025-07-17 20:41:16 +07:00
Alexander Polyankin
edfb5fe39c Make temporal unit variables work like regular variables (#60995) 2025-07-17 09:32:36 -04:00
Kamil Mielnik
d626289c81 SEM-512 It would be great if all toasts in Table Metadata had an Undo (#60974)
* Add undos in FieldSection

* Add undos in FormattingSection

* Add undos in MetadataSection

* Add undos in FieldItem

* Organize TableVisibilityToggle

* Add undos in BehaviorSection

* Add undos in TableSection

* Add trim()

* Never pass 2nd argument in onChange callbacks from Select

* Add undos in DataSection

* Fix SEM-499

* Add undos in RemappingPicker

* Reduce duplication

* Simplify code

* Rename

* Prevent undo loops in FieldSection

* Remove redundant param

* Refactor toasts in FieldSection

* Prevent undo loops in FormattingSection

* Prevent undo loops in MetadataSection

* Prevent undo loops in BehaviorSection

* Prevent undo loops in DataSection

* Prevent undo loops in TableSection

* Prevent undo loops in FieldItem

* Prevent undo loops in TableVisibilityToggle

* Prevent undo loops in RemappingPicker

* Reuse useMetadataToasts

* Fix types

* Fix undoing semantic type

* Update unit tests

* Update NameDescriptionInput unit tests

* Simplify argument

* Update tests, fix viz formatting inputs not respecting prop updates

* Revert "Fix SEM-499"

This reverts commit bb9f098433.

* Add more tests

* Avoid casting

* Remove redundant cast
2025-07-17 12:30:33 +00:00
Chris Truter
0adf8b5d5b Refresh Search index after loading serialized entities (#61053) 2025-07-17 12:12:33 +00:00
Oisin Coveney
9a6113cff5 Rename files, components, and types to SdkQuestion (#60996) 2025-07-17 15:12:06 +03:00
Oisin Coveney
59c1d93c76 Convert dashboard sidebar components to use dashboard context (#60715) 2025-07-17 14:56:45 +03:00
Kamil Mielnik
ff989915fb Fix flaky test (#61126) 2025-07-17 18:50:07 +07:00
Kamil Mielnik
19e9ec0cd3 SEM-503 + SEM-504 + SEM-509 + SEM-510 Micro UI/UX improvements (#60970)
* SEM-503 Add blue border to selected field

* SEM-504 Border radius of table/field name and description boxes should match that of setting cards

* SEM-509 Improve microcopy for table and field editing instructions

* SEM-510 Field descriptions could use "paragraph" text style with greater line height
2025-07-17 14:12:36 +07:00
Cam Saul
f67919695d MBQL 5 normalization should automatically add options maps (#61081) 2025-07-16 17:56:11 -07:00
Cam Saul
466f7879da [Lib] remove 'idents' part 2 (#60874)
* [Lib] remove 'idents' part 1

* [Lib] remove idents part 2

* Remove ident-related tests for Cards

* Remove more ident-related tests

* Fix Kondo warnings
2025-07-16 17:55:35 -07:00
Alexander Polyankin
bdfae3d613 Boolean variables in native queries (#60991) 2025-07-16 19:41:56 -04:00
Sloan Sparger
424bb4d19e [Metabot] Add text for search tool when being called (#61099) 2025-07-16 16:54:21 -05:00
Riley Thompson
b75ef21b91 Enable DB routing for BigQuery (#60516)
* save

* revert redshift changes

* kondo

* add ci routing var

* redshift rough work

* cleanup bigquery changes

* remove bigquery specific redefs and bindings

* add separate var for dataset

* custom routing info per driver

* update changelog

* cljfmt

* fix fe lint

* use deferred-tru

* dissoc db_routing_info for tests

* fix other tests

* fix kondo and lint

* use yaml

* fix whitespace

* change log

* kondo and eastwood

* use markdown for routing info

* remove unneeded driver method

* cleanup

* fix tests

* fix remaining test

* add fe test

* add extra info in register-lazy-loaded-driver

* address pr comment

* improve doc string

* add text-secondary color to database info markdown

* update markdown

* alphabetical order

* move db routing info from db to session properties

* FE adjustments

* dont parse extra info

---------

Co-authored-by: Nick Fitzpatrick <nickfitz.582@gmail.com>
2025-07-16 17:20:26 -04:00
Tyler Plude
3f01f61624 VIZ-1048 - Visualizer Data Importer Improvements (#59139)
* poc

* timing logs

* Only render compatible datasets

* Build uberjar to be able to test in cloud with more data

* search index support for display

* search index support for exclude-display and has-temporal-dimensions

* fix weird filter vs index column bug

* fix temporal filter

* required ids search index filter

* fix build by removing :display from search render-terms

* adding h2 compatibility

* fixing alignment

* whitespace

* all clicks are add clicks now

* reverted labels change

* whitespace

* whitespace

* mutation -> query, load compatibles at startup

* using viz icons in dataset list

* remove exclude_display

* consolidate search endpoint

* rename display param to display_type

* allignment

* fix filter tests

* test fixes

* Closes VIZ-1185: revert "using viz icons in dataset list"

This reverts commit 7f4d177e977643f90250a5add2f946d6f35ad2a0.

* closes VIZ-1184 copy for "no results"

* closes VIZ-1183 spacing between input and results

* removed log statement

* fixed type

* fixed basics.cy.spec.ts

* fixed dashboard-questions.cy.spec.js

* fixed sharing-reproductions.cy.spec.js

* fixed snowplow-tracking.cy.spec.ts

* fixed funnels.cy.spec.ts

* fixed others

* fix import

* return new fields in results for in-place engine

* test fix

* test fix attempt

* rm backup file

* fixed more e2e tests

* fixup

* more stabilization of e2e tests

* tweak whitespace

* first attempt to fix failing postgres tests

* try a simpler approach

* closes VIZ-1227 search not triggered when no datasource is selected

* new attempt to parameterize the define-spec macro with app-db

* removing non-temporal-dimension-ids filter

* fix cljkondo

* fix test

* fixed e2e (snowplow)

* fixed e2e (funnels)

* fixed e2e (basics)

* better loading state, better typing

* reverted type change

* uncomment e2e cartesian; remove unused search param; fix bg color

* Fix query to resolve to false instead of nil

---------

Co-authored-by: Eliot Daigneault-Mestre <eliot@metabase.com>
Co-authored-by: Noah Moss <noahbmoss@gmail.com>
Co-authored-by: Sébastien <sebastien@metabase.com>
2025-07-16 14:08:03 -07:00
metamben
4927b35f0f Stop offering expressions and aggregation being edited as columns (#61033)
* Stop offering expressions and aggregation being edited as columns

Fixes #61010

* Add repro for metabase#61010

* Add test for custom columns too

* Update expected error message in e2e test

* Detect cycles in resolver too

* Revert "Detect cycles in resolver too"

* Add e2e test for referencing custom expressions that are just wrappers

---------

Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
2025-07-17 00:03:34 +03:00
Nemanja Glumac
481065bc8f Optimize writable QA DB snapshot creation process (#60898) 2025-07-16 20:47:37 +00:00
Braden Shepherdson
d10fafd538 [parameters] Use MBQL lib to query for field values from a card (#60510)
Fixes #44077. Fixes #35840.

Previously this used some custom legacy MBQL manipulation. It was
incorrect and led to a handful of bugs. Now it's a straightforward
edit of the query powered by MBQL lib.
2025-07-16 16:20:28 -04:00
Romeo Van Snick
b76a18112a Fix parameter target popover empty state (#60990)
* Add missing min-height to ParameterTargetList

* Add repro for metabase#60987

* Update list when clearing cache

* Remove minWidth

* Always disable virtualization in AccordionList

* Use Mantine Popover in DashCardCardParameterMapperButton

* Remove virtualization from AccordionList altogether

* Remove superflouous wrapper for Clause popover

* Add box sizing to dashcardmapper

* Remove withBorders prop

* Remove more unused instance properties from AccordionList

* Add repro for metabase#46767

* Add key to parameter mapping button

* Trap focus in parameter mapping popover

* Close toasts to avoid overlapping popovers

* Ignore search box in check

* Add missing tooltip

* Fix selector

* Fix selector

* Close popover when selecting value

* Revert "Remove superflouous wrapper for Clause popover"

This reverts commit 5a13c826f4.

* Use H.tooltip helper

* Use cy.trigger instead of realHover

* Update Loki Snapshots

---------

Co-authored-by: Metabase Automation <github-automation@metabase.com>
2025-07-16 20:43:28 +02:00
Jacob Joseph
b39cfa3b6a Update sql-parameters.md (#61096)
fixed missing double quotes
2025-07-16 18:29:41 +00:00
Riley Thompson
23eeb71330 Clear secret file memoization when DB details have changed (#60503)
* clear secret file memoization on db update

* add rsa env vars

* improve test

* add more narrow test

* improve test

* refactor snowflake private key test to create and drop user per test

* use accountadmin role

* try granting sysadmin

* try using accountadmin role

* use correct details

* throw exceptions for unimplemented methods

* clean up test code
2025-07-16 14:19:07 -04:00
Edward Paget
1e088b195a fix: don't recurse in check-block-permissions (#61078) 2025-07-16 13:09:14 -05:00
SabarigirisanSivakumarREO
5601b31019 Locale updates on LanguageStep submit (#60184) 2025-07-16 11:58:29 -06:00
SabarigirisanSivakumarREO
6c6e042e20 Update button focus styling in setup flow (#60175)
* Button focus has been updated

* fixed color usage & onlyIcon button
2025-07-16 11:58:04 -06:00
Riley Thompson
6f94207bdf Use different login and user names for sqlserver impersonation setup (#60743)
* use different login and user names for sqlserver impersonation setup

* Require role

* fix sqlserver test

* move feature supported def

* remove outdated test
2025-07-16 13:42:11 -04:00
Ryan Laurie
83178c42e9 Show Application Permission Saving Errors (#61038)
* show errors when saving permissions

* use new confirm modal
2025-07-16 17:16:34 +00:00
Ryan Laurie
366e28ab80 fix git log logic for release logs (#61012) 2025-07-16 11:04:23 -06:00
Ryan Laurie
e3a45d5996 Shard jest tests (#53638)
* shard jest tests

* dont fail fast

* remove coverage
2025-07-16 11:03:36 -06:00
Ryan Laurie
23ed37fcb3 run frontend test coverage nightly (#61077)
* run frontend test coverage nightly

* SPACE
2025-07-16 11:01:59 -06:00
Uladzimir Havenchyk
2768c95be3 test: fix flakiness in table resizing (#61064) 2025-07-16 19:30:50 +03:00
Phoomparin Mano
0b73abd44e Make new iframe embed flow's parameter placeholder text contextual (#61006) 2025-07-16 23:28:46 +07:00
Filipe Silva
1dd56e5f14 Postgres Replication to Cloud Storage (#59709)
* feat: harbormaster openapi client

* feat: pg replication backend

* feat: pg replication frontend

* ci: label for build docker job

* fix: update attached-dwh crufty tables on sync :update

Fix https://linear.app/metabase/issue/CLO-4223/mb-does-not-update-crufty-table-settings-on-config-change

* fixup: minor FE review items

* fixup: pg-replication -> database-replication

* fixup: use db driver feature in DatabaseReplicationSection

* fixup: jt link needs unique k

* fix: cache? not cache on setting
2025-07-16 11:09:01 -05:00
lbrdnk
bcd9ce522b Fix coercion overwrite (#61055)
* Fix coercion overwrite

* Adjust test
2025-07-16 17:14:17 +02:00
Uladzimir Havenchyk
87d57b5880 test: fix flakiness in dashcard resizing (#61066) 2025-07-16 18:14:04 +03:00
Nicolò Maria Mezzopera
8eec882c31 docs: add callout to driver build to the beginning of the guide (#61071) 2025-07-16 16:53:01 +02:00
Mahatthana (Kelvin) Nomsawadi
1bf726bddc feat(sdk): Create new dashboard question from EditableDashboard (#60920)
Co-authored-by: Phoomparin Mano <phoomparin@gmail.com>
2025-07-16 21:22:37 +07:00
Brad Anderson
75df8b0ce6 Removes blue slow-loading card border (#60998) 2025-07-16 09:37:10 -04:00
Rodrigo López Dato
788fd1922c Fix "Github" capitalization in all Markdown files (#61034) 2025-07-16 09:02:03 -04:00
Alberto Perdomo
cc23721d9c docs(sdk): add limitations around leaflet 1 (#61057)
Co-authored-by: Phoomparin Mano <poom@metabase.com>
2025-07-16 20:00:38 +07:00
Oisin Coveney
2ff890692e feat(sdk): Add withDownloads to the static question (#60976) 2025-07-16 15:46:01 +03:00
Abed Habli
8a6b842320 docs: leaf fields sync limit for MongoDB (#61011)
* adding the leaf fields limit

* updating
2025-07-16 10:00:47 +02:00
Nicolò Maria Mezzopera
c5118e2517 fix css issues in the Native Query Editor (#60929)
* feat: swap span for flex in Trigger component with chevron

* chore: use span in flex component

* feat: add small left padding to native editor action buttons

* chore: fix typo on data-testid file

* chore: force viewport to be big enough in cy test

* feat: force the test to small window and execute the drag vertically
2025-07-16 09:03:44 +02:00
Ngoc Khuat
bdc56af8e7 Simplify slack channel implementation (#60838) 2025-07-16 10:37:50 +07:00
Alexander Polyankin
e779e66621 Add missing query metadata (#61023) 2025-07-16 00:28:17 +00:00
Cam Saul
ad256b6e5c [Lib] remove 'idents' part 1 (#60873) 2025-07-16 00:04:03 +00:00
Kamil Mielnik
36b9569619 Fix flaky dashboard parameters test (#60972) 2025-07-15 19:49:45 -04:00
Tyler Plude
62d441fd36 VIZ-1151 - Fix currency setting precedence table static viz (#60808)
* Move global settings to beginning of merge

* Removing duplicate logic in favor of qp viz-settings-for-col
2025-07-15 13:31:43 -07:00
2567 changed files with 315771 additions and 186776 deletions

View File

@@ -68,6 +68,7 @@
:metabase/validate-logging {:level :warning}
:metabase/validate-mb-driver-tests {:level :warning}
:metabase/validate-mb-once {:level :warning}
:metabase/discourage-millis-duration {:level :warning}
:metabase/validate-deftest
{:level :warning
@@ -408,9 +409,10 @@
clojure.test.check.properties/for-all clojure.core/let
clojurewerkz.quartzite.jobs/defjob clojure.core/defn
instaparse.core/defparser clojure.core/def
metabase-enterprise.action-v2.test-util/with-test-tables! clojure.core/let
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-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
@@ -469,6 +471,7 @@ metabase-enterprise.content-translation.routes-test/with-new-secret-key!
metabase.test/with-temp-file clojure.core/let
metabase.test/with-user-in-groups clojure.core/let
metabase.upload.impl-test/with-upload-table! clojure.core/let
metabase.util/for-map clojure.core/for
metabase.util.files/with-open-path-to-resource clojure.core/let
metabase.util.malli.defn/defn schema.core/defn
metabase.util.malli.defn/defn- schema.core/defn
@@ -501,6 +504,7 @@ metabase-enterprise.content-translation.routes-test/with-new-secret-key!
clojure.core/ns hooks.clojure.core.ns/lint-ns
clojure.core/require hooks.clojure.core.require/lint-require
clojure.core/requiring-resolve hooks.clojure.core.require/lint-requiring-resolve
clojure.core/- hooks.metabase.util.timing/discourage-millis-duration
clojure.test/deftest hooks.clojure.test/deftest
clojure.test/is hooks.clojure.test/is
clojure.test/use-fixtures hooks.clojure.test/use-fixtures
@@ -539,6 +543,7 @@ metabase-enterprise.content-translation.routes-test/with-new-secret-key!
metabase.lib.schema.mbql-clause/define-tuple-mbql-clause hooks.metabase.lib.schema.mbql-clause/define-mbql-clause
metabase.lib.test-util.macros/$ids hooks.metabase.test.data/$ids
metabase.lib.test-util.macros/mbql-query hooks.metabase.test.data/mbql-query
metabase.lib.test-util.macros/mbql-5-query hooks.metabase.test.data/mbql-query
metabase.lib.test-util.macros/with-testing-against-standard-queries hooks.metabase.lib.test-util.macros/with-testing-against-standard-queries
metabase.model-persistence.api-test/with-persistence-setup! hooks.common/with-one-top-level-binding
metabase.model-persistence.api-test/with-setup! hooks.common/with-one-top-level-binding
@@ -739,6 +744,7 @@ metabase-enterprise.content-translation.routes-test/with-new-secret-key!
{:linters
{:metabase/validate-escaped-single-quotes-in-i18n {:level :warning}
:metabase/validate-string-or-str-args-to-i18n {:level :warning}
:metabase/discourage-millis-duration {:level :warning}
:discouraged-var
{clojure.core/with-redefs {:message "Don't use with-redefs outside of tests"}
clojure.core/eval {:message "Don't use eval outside of tests"}}}}
@@ -807,4 +813,9 @@ metabase-enterprise.content-translation.routes-test/with-new-secret-key!
general-qp-and-driver-test-namespaces
{:linters
{:metabase/disallow-hardcoded-driver-names-in-tests {:level :warning}}}}}
{:discouraged-var
{metabase.test/with-column-remappings {:message "Use metabase.lib.test-util/remap-metadata-provider instead of with-column-remappings in QP tests"}
metabase.test.util/with-column-remappings {:message "Use metabase.lib.test-util/remap-metadata-provider instead of with-column-remappings in QP tests"}}
:metabase/disallow-hardcoded-driver-names-in-tests
{:level :warning}}}}}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,16 @@
(ns hooks.metabase.util.timing
"Custom CLJ Kondo hooks for timing-related linting rules."
(:require [clj-kondo.hooks-api :as api]))
(defn discourage-millis-duration
"Discourage slow and unreliable duration calculations using System/currentTimeMillis "
[{:keys [node]}]
(let [sexpr (api/sexpr node)]
(when (and (list? sexpr) (= (first sexpr) '-) (>= (count sexpr) 2))
(let [first-arg (second sexpr)]
(when (= first-arg (list 'System/currentTimeMillis))
(api/reg-finding!
(assoc (meta node)
:message "Avoid System/currentTimeMillis for calculating durations. Use u/start-timer and u/since-ms for more reliability."
:type :metabase/discourage-millis-duration
:level :warning)))))))

View File

@@ -152,6 +152,7 @@
metabase.lib.join/with-join-alias [[:default]]
metabase.lib.join/with-join-conditions [[:default]]
metabase.lib.test-util.macros/$ids [[:inner 0]]
metabase.lib.test-util.macros/mbql-5-query [[:inner 0]]
metabase.lib.test-util.macros/mbql-query [[:inner 0]]
metabase.lib.util.match/match [[:inner 0]]
metabase.lib.util.match/match-one [[:inner 0]]
@@ -284,6 +285,7 @@
metabase.upload.impl-test/with-upload-table! [[:inner 0]]
metabase.upload.types/with-currency [[:default]]
metabase.upload.types/with-parens [[:default]]
metabase.util/for-map [[:block 1]]
metabase.util.async/cancelable-thread [[:block 0]]
metabase.util.date-2/with-time-zone-same-instant [[:default]]
metabase.util.encryption-test/with-secret-key [[:block 1]]

View File

@@ -1,6 +1,8 @@
/* eslint-disable import/no-commonjs */
/* eslint-disable no-undef */
const path = require("path");
// `postcss-modules` lints css modules class names, but it currently crashes
// eslint on vscode. If you use webstorm or want to run the lint for the cli, you
// can use this flag to enable it. This is set to true in CI
@@ -155,6 +157,7 @@ module.exports = {
"import/internal-regex": "^metabase/|^metabase-lib/",
"import/resolver": {
webpack: {
config: path.resolve(__dirname, "./rspack.main.config.js"),
typescript: true,
},
},
@@ -203,8 +206,9 @@ module.exports = {
"e2e/**/*",
"**/tests/*",
"release/**/*",
"webpack.config.js",
"rspack.config.js",
"rspack.main.config.js",
"rspack.embedding-sdk-bundle.config.js",
],
rules: {
"no-color-literals": "off",
@@ -221,8 +225,7 @@ module.exports = {
"e2e/**/*",
"**/tests/*",
"release/**/*",
"webpack.config.js",
"rspack.config.js",
"rspack.main.config.js",
],
rules: {
"i18next/no-literal-string": "off",
@@ -333,5 +336,11 @@ module.exports = {
"no-color-literals": "off",
},
},
{
files: ["frontend/build/**/*.js"],
rules: {
"import/no-commonjs": "off",
},
},
],
};

6
.github/CODEOWNERS vendored
View File

@@ -5,7 +5,7 @@ enterprise/frontend/src/embedding-sdk @metabase/embedding
frontend/src/metabase/embedding-sdk @metabase/embedding
frontend/src/metabase/public/containers/PublicOrEmbeddedQuestion @metabase/embedding
frontend/src/metabase/public/containers/PublicOrEmbeddedDashboard @metabase/embedding
frontend/src/metabase/ui @metabase/core-frontend-admin-webapp
frontend/src/metabase/ui @metabase/core-frontend-ux-west
# snowplow/* @metabase/data
src/metabase/analytics/prometheus.clj @metabase/cloud-ops
.github @metabase/devexp
@@ -95,8 +95,8 @@ test/metabase/driver/sql_jdbc/actions_test.clj @metabase/core-workflows
# enterprise/backend/src/metabase_enterprise/upload_management @metabase/core-backend-admin-webapp
# enterprise/backend/test/metabase_enterprise/upload_management @metabase/core-backend-admin-webapp
src/metabase/actions @metabase/core-backend-admin-webapp
test/metabase/actions @metabase/core-backend-admin-webapp
src/metabase/actions @metabase/core-backend-ux-west
test/metabase/actions @metabase/core-backend-ux-west
# src/metabase/activity_feed @metabase/core-backend-admin-webapp
# test/metabase/activity_feed @metabase/core-backend-admin-webapp

View File

@@ -63,7 +63,8 @@ body:
attributes:
label: Information about your Metabase installation
description: |
Copy and paste the JSON from `Admin -> Troubleshooting`.
For versions >= 56, copy and paste the Diagnostic info from `Admin -> Tools -> Help`.
For versions < 56, copy and paste the Diagnostic info from `Admin -> Troubleshooting`.
_This will be automatically formatted into code, so no need for backticks._
placeholder: |
{"browser-info": {

View File

@@ -1,4 +1,5 @@
name: Wait for localhost port to be ready
name: await-port
description: Wait for localhost port to be ready
inputs:
port:

View File

@@ -1,4 +1,5 @@
name: Test database driver
description: Test database driver
inputs:
junit-name:
required: true

View File

@@ -11,4 +11,7 @@ runs:
env:
GITHUB_TOKEN: ${{ inputs.github-token }}
shell: bash
run: bash ${{ github.action_path }}/upgrade-deps.sh
run: |
git config --global user.email "github-automation@metabase.com"
git config --global user.name "Metabase Automation"
bash ${{ github.action_path }}/upgrade-deps.sh

View File

@@ -59,6 +59,11 @@ for upgrade in $UPGRADES; do
# Commit the dependency update, and link to the diff
git add deps.edn modules
# Use an email and name that will pass the CLA check:
git config --global user.email "github-automation@metabase.com"
git config --global user.name "Metabase Automation"
git commit -m ${TITLE} -m ${BODY} --no-verify
git push -u origin $BRANCH_NAME

52
.github/copilot-instructions.md vendored Normal file
View File

@@ -0,0 +1,52 @@
# Metabase Developer Assistant Instructions
## Frontend Development
### Repository Structure
```
frontend/src/
├── metabase/ # Main application components and pages
├── metabase-lib/ # Query building and data modeling utilities
├── metabase-types/ # TypeScript type definitions
└── metabase/ui/ # Design system components
e2e/ # Cypress end-to-end tests
frontend/test/ # Jest unit tests
```
### Technology Stack
- **Framework**: React 18 with TypeScript
- **State**: Redux Toolkit
- **Styling**: CSS Modules (preferred) > Emotion styled-components
- **UI**: `metabase/ui` components built with Mantine v8
- **Build**: Rspack (primary), Webpack (legacy)
- **Testing**: Jest + React Testing Library, Cypress
### Coding Standards
#### Component Preferences
- Prefer `metabase/ui`components over `metabase/common/components`
- Use `.tsx` for components, `.ts` for utilities
#### Styling
ALWAYS prefer Mantine style props,then CSS modules. DO NOT suggest styled components, they are deprecated.
#### TypeScript Migration
When heavily editing `.js`/`.jsx` files, create a separate PR to convert to TypeScript first, then implement changes.
#### Enterprise Features
Enterprise functionality MUST use the plugin system. It is very important to not expose enterprise code in the OSS version.
#### Testing Requirements
All PRs should include tests. Prefer Unit tests over E2E tests.
#### Localization
All user-facing strings MUST be localized using the ttag library. Localized strings should be complete phrases, do not concatenate a few separately localized strings. You should add context to strings where the meaning of the string might not be obvious in isolation: e.g. "Home" might have different words in some languages depending on whether you're talking about a dwelling or the landing page for a website.

View File

@@ -29,9 +29,9 @@ frontend_configs: &frontend_configs
- ".eslintrc.js"
- "postcss.config.js"
- "rspack.config.js"
- "webpack.config.js"
- "webpack.embedding-sdk.config.js"
- "webpack.static-viz.config.js"
- "rspack.main.config.js"
- "rspack.embedding-sdk-bundle.config.js"
- "rspack.static-viz.config.js"
- ".nvmrc"
frontend_sources: &frontend_sources
@@ -132,6 +132,7 @@ e2e_embedding_sdk_compatibility:
- *default
- *frontend_embedding_sdk_ci
- *frontend_sources
- *backend_sources
- "e2e/embedding-sdk-host-apps/**"
- "e2e/runner/embedding-sdk/**"
- "e2e/test-host-app/**/*.cy.*.{js,ts}"

82
.github/team.json vendored
View File

@@ -8,22 +8,11 @@
"romeovs",
"bshepherdson",
"metamben",
"appleby",
"uladzimirdev",
"wzimrin",
"ericnormand",
"galdre"
]
},
{
"name": "Semantic Layer",
"label": ".Team/SemanticLayer",
"members": [
"kamilmielnik",
"lbrdnk",
"bronsa"
]
},
{
"name": "Drivers",
"label": ".Team/Drivers",
@@ -37,10 +26,10 @@
"label": ".Team/Embedding",
"members": [
"WiNloSt",
"oisincoveney",
"npretto",
"heypoom",
"sanex3339"
"sanex3339",
"lorem--ipsum"
]
},
{
@@ -50,35 +39,18 @@
"qnkhuat",
"piranha",
"crisptrutski",
"deniskaber",
"wotbrew",
"spalt08",
"stasgavrylov"
"stasgavrylov",
"uladzimirdev",
"kulyk",
"kamilmielnik"
]
},
{
"name": "Admin Webapp",
"label": ".Team/AdminWebapp",
"members": [
"npfitz",
"johnswanson",
"rafpaf",
"iethree",
"nvoxland",
"fraserdrops",
"edpaget"
]
},
{
"name": "DashViz",
"label": ".Team/DashViz",
"members": [
"alxnddr",
"kulyk",
"tsplude",
"lorem--ipsum",
"noahmoss",
"bpander"
"eliotmetabase"
]
},
{
@@ -93,20 +65,54 @@
"name": "Metabot",
"label": ".Team/Metabot",
"members": [
"appleby",
"noahmoss",
"retro",
"sloansparger",
"somtom"
"somtom",
"wotbrew",
"tsplude",
"lbrdnk",
"bronsa"
]
},
{
"name": "Product Growth",
"label": ".Team/ProductGrowth",
"members": ["nemanjaglumac", "chodorowicz"]
"members": [
"nemanjaglumac",
"chodorowicz",
"andsalves"
]
},
{
"name": "Cloud",
"label": "cloud",
"members": []
"members": [
"filipesilva"
]
},
{
"name": "DashViz",
"label": ".Team/DashViz",
"members": [
"eliotmetabase"
]
},
{
"name": "UX West",
"label": ".Team/UXWest",
"members": [
"eliotmetabase",
"npfitz",
"johnswanson",
"iethree",
"nvoxland",
"edpaget",
"deniskaber",
"alxnddr",
"bpander"
]
}
]
}

View File

@@ -1,21 +0,0 @@
name: Claude Assistant
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned, labeled]
pull_request_review:
types: [submitted]
jobs:
claude-response:
runs-on: ubuntu-latest
steps:
- run: git config --global --add safe.directory /__w/metabase/metabase
- uses: actions/checkout@v4
- uses: anthropics/claude-code-action@beta
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
github_token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -40,5 +40,5 @@ jobs:
uses: ./.github/actions/prepare-backend
with:
m2-cache-key: 'cljs'
- name: Run Cljs tests for shared/ code
- name: Run Cljs tests
run: yarn run test-cljs

26
.github/workflows/coverage.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
name: Test coverage
on:
schedule:
- cron: '40 1 * * *' # every day at 1:40
jobs:
fe-test-coverage:
runs-on: ubuntu-22.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Prepare front-end environment
uses: ./.github/actions/prepare-frontend
- name: Prepare back-end environment
uses: ./.github/actions/prepare-backend
with:
m2-cache-key: "cljs"
- name: Run frontend unit tests
run: yarn run test-unit --silent --coverage
- name: Upload coverage to codecov.io
uses: codecov/codecov-action@v4
with:
files: ./coverage/lcov.info
flags: front-end
token: ${{ secrets.CODECOV_TOKEN }}

View File

@@ -21,11 +21,17 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Fetch base branch
if: github.event_name == 'pull_request' && github.event.pull_request.base.ref != ''
run: |
# Fetch the base branch to ensure its history is available for diffing
git fetch origin ${{ github.event.pull_request.base.ref }}:${{ github.event.pull_request.base.ref }}
# Only run this if it's a pull request and the base ref exists
- name: Check if tier3 drivers should run
id: check_team_and_branch
run: |
IS_MASTER_OR_RELEASE="${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release-') }}"
HAS_TEAM_LABEL="${{ contains(github.event.pull_request.labels.*.name, '.Team/Drivers') || contains(github.event.pull_request.labels.*.name, '.Team/Querying') || contains(github.event.pull_request.labels.*.name, '.Team/SemanticLayer') }}"
HAS_TEAM_LABEL="${{ contains(github.event.pull_request.labels.*.name, '.Team/Drivers') || contains(github.event.pull_request.labels.*.name, '.Team/Querying') || contains(github.event.pull_request.labels.*.name, '.Team/SemanticLayer') || contains(github.event.pull_request.labels.*.name, '.Team/DevEx') }}"
echo "Is master or release: ${IS_MASTER_OR_RELEASE}"
@@ -37,8 +43,25 @@ jobs:
echo "skip=false" >> $GITHUB_OUTPUT
echo "A relevant team label is present. Tier 3 driver tests will run."
else
echo "skip=true" >> $GITHUB_OUTPUT
echo "Not labeled with required team and not merging into master/release. Tier 3 driver tests will be skipped."
echo "Checking for changes in relevant folders..."
CHANGED_FILES=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }})
# Initialize an empty array to store folders with changes
CHANGED_FOLDERS=()
for folder in "src/metabase/lib" "src/metabase/query_processor" "modules/drivers"; do
if echo "$CHANGED_FILES" | grep -q "$folder"; then
CHANGED_FOLDERS+=("$folder")
fi
done
if [[ ${#CHANGED_FOLDERS[@]} -gt 0 ]]; then
echo "skip=false" >> $GITHUB_OUTPUT
echo "Changes detected in the following folders: ${CHANGED_FOLDERS[*]}."
echo "Tier 3 driver tests will run."
else
echo "skip=true" >> $GITHUB_OUTPUT
echo "No relevant team label, not merging into master/release, and no changes in relevant folders. Tier 3 driver tests will be skipped."
fi
fi
shell: bash
be-tests-athena-ee:
@@ -50,9 +73,11 @@ jobs:
CI: 'true'
DRIVERS: athena
MB_ATHENA_TEST_REGION: us-east-1
MB_ATHENA_TEST_REGION_ROUTING: us-east-2
MB_ATHENA_TEST_ACCESS_KEY: ${{ secrets.MB_ATHENA_TEST_ACCESS_KEY }}
MB_ATHENA_TEST_SECRET_KEY: ${{ secrets.MB_ATHENA_TEST_SECRET_KEY }}
MB_ATHENA_TEST_S3_STAGING_DIR: ${{ secrets.MB_ATHENA_TEST_S3_STAGING_DIR }}
MB_ATHENA_TEST_S3_STAGING_DIR_ROUTING: ${{ secrets.MB_ATHENA_TEST_S3_STAGING_DIR_ROUTING }}
# These credentials are used to test the driver when the user does not have the athena:GetTableMetadata permission
MB_ATHENA_TEST_WITHOUT_GET_TABLE_METADATA_ACCESS_KEY: ${{ secrets.MB_ATHENA_TEST_WITHOUT_GET_TABLE_METADATA_ACCESS_KEY }}
MB_ATHENA_TEST_WITHOUT_GET_TABLE_METADATA_SECRET_KEY: ${{ secrets.MB_ATHENA_TEST_WITHOUT_GET_TABLE_METADATA_SECRET_KEY }}
@@ -90,6 +115,7 @@ jobs:
MB_BIGQUERY_TEST_ACCESS_TOKEN: ${{ secrets.MB_BIGQUERY_TEST_ACCESS_TOKEN }}
MB_BIGQUERY_TEST_REFRESH_TOKEN: ${{ secrets.MB_BIGQUERY_TEST_REFRESH_TOKEN }}
MB_BIGQUERY_CLOUD_SDK_TEST_SERVICE_ACCOUNT_JSON: ${{ secrets.MB_BIGQUERY_CLOUD_SDK_TEST_SERVICE_ACCOUNT_JSON }}
MB_BIGQUERY_CLOUD_SDK_TEST_SERVICE_ACCOUNT_JSON_ROUTING: ${{ secrets.MB_BIGQUERY_CLOUD_SDK_TEST_SERVICE_ACCOUNT_JSON_ROUTING }}
name: BigQuery
steps:
- uses: actions/checkout@v4
@@ -242,6 +268,7 @@ jobs:
MB_DATABRICKS_TEST_HTTP_PATH: ${{ secrets.MB_DATABRICKS_JDBC_TEST_HTTP_PATH }}
MB_DATABRICKS_TEST_TOKEN: ${{ secrets.MB_DATABRICKS_JDBC_TEST_TOKEN }}
MB_DATABRICKS_TEST_CATALOG: 'metabase_ci'
MB_DATABRICKS_TEST_CATALOG_ROUTING: 'metabase_routing_catalog'
MB_DATABRICKS_TEST_CLIENT_ID: ${{ secrets.MB_DATABRICKS_JDBC_TEST_CLIENT_ID }}
MB_DATABRICKS_TEST_OAUTH_SECRET: ${{ secrets.MB_DATABRICKS_JDBC_TEST_OAUTH_SECRET }}
name: Databricks
@@ -278,6 +305,7 @@ jobs:
MB_DATABRICKS_TEST_HTTP_PATH: ${{ secrets.MB_DATABRICKS_JDBC_TEST_HTTP_PATH }}
MB_DATABRICKS_TEST_TOKEN: ${{ secrets.MB_DATABRICKS_JDBC_TEST_TOKEN }}
MB_DATABRICKS_TEST_CATALOG: 'metabase_ci'
MB_DATABRICKS_TEST_CATALOG_ROUTING: 'metabase_routing_catalog'
MB_DATABRICKS_TEST_CLIENT_ID: ${{ secrets.MB_DATABRICKS_JDBC_TEST_CLIENT_ID }}
MB_DATABRICKS_TEST_OAUTH_SECRET: ${{ secrets.MB_DATABRICKS_JDBC_TEST_OAUTH_SECRET }}
name: Databricks (Multi-Catalog)
@@ -830,6 +858,7 @@ jobs:
DRIVERS: redshift
MB_REDSHIFT_TEST_USER: metabase_ci
MB_REDSHIFT_TEST_DB: testdb
MB_REDSHIFT_TEST_DB_ROUTING: dev
MB_REDSHIFT_TEST_HOST: ${{ secrets.MB_REDSHIFT_TEST_HOST }}
MB_REDSHIFT_TEST_PASSWORD: ${{ secrets.MB_REDSHIFT_TEST_PASSWORD }}
name: ${{ matrix.job.name }}
@@ -867,6 +896,10 @@ jobs:
MB_SNOWFLAKE_TEST_WAREHOUSE: ${{ secrets.MB_SNOWFLAKE_TEST_WAREHOUSE }}
MB_SNOWFLAKE_TEST_PK_USER: METABASE PK
MB_SNOWFLAKE_TEST_PK_PRIVATE_KEY: ${{ secrets.MB_SNOWFLAKE_TEST_PK_PRIVATE_KEY }}
MB_SNOWFLAKE_TEST_PK_PRIVATE_KEY_2: ${{ secrets.MB_SNOWFLAKE_TEST_PK_PRIVATE_KEY_2 }}
MB_SNOWFLAKE_TEST_PK_PUBLIC_KEY: ${{ secrets.MB_SNOWFLAKE_TEST_PK_PUBLIC_KEY }}
MB_SNOWFLAKE_TEST_PK_PUBLIC_KEY_2: ${{ secrets.MB_SNOWFLAKE_TEST_PK_PUBLIC_KEY_2 }}
# RSA Role testing:
MB_SNOWFLAKE_TEST_RSA_ROLE_TEST_DEFAULT_USER: RSA_ROLE_TEST_DEFAULT_USER
MB_SNOWFLAKE_TEST_RSA_ROLE_TEST_CUSTOM_USER: RSA_ROLE_TEST_CUSTOM_USER

View File

@@ -116,7 +116,7 @@ jobs:
CYPRESS_MB_PRO_CLOUD_TOKEN: ${{ secrets.MB_PRO_CLOUD_TOKEN }}
CYPRESS_MB_PRO_SELF_HOSTED_TOKEN: ${{ secrets.MB_PRO_SELF_HOSTED_TOKEN }}
CYPRESS_PULL_REQUEST_ID: ${{ github.event.pull_request.number || '' }}
CYPRESS_IS_EMBEDDING_SDK: true
CYPRESS_IS_EMBEDDING_SDK: "true"
COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title || github.event.head_commit.message || github.event.head.sha }}
TZ: US/Pacific # to make node match the instance tz
CYPRESS_CI: true

View File

@@ -215,7 +215,7 @@ jobs:
PR_NUMBER: ${{ github.event.pull_request.number || '' }}
HASH: ${{ github.event.pull_request.head.sha || github.sha }}-${{ github.run_attempt }}
CYPRESS_MB_ALL_FEATURES_TOKEN: ${{ secrets.MB_ALL_FEATURES_TOKEN }}
CYPRESS_IS_EMBEDDING_SDK: true
CYPRESS_IS_EMBEDDING_SDK: "true"
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 }}
@@ -325,13 +325,14 @@ jobs:
needs: [get-build-requirements, build]
strategy:
matrix:
test_suite: [
"vite-6-host-app-e2e",
"next-15-app-router-host-app-e2e",
"next-15-pages-router-host-app-e2e",
"angular-20-host-app-e2e",
]
environment: [ "production", "development" ]
test_suite:
[
"vite-6-host-app-e2e",
"next-15-app-router-host-app-e2e",
"next-15-pages-router-host-app-e2e",
"angular-20-host-app-e2e",
]
environment: ["production", "development"]
if: |
!cancelled() && needs.build.result == 'success'
runs-on: ubuntu-22.04
@@ -344,7 +345,7 @@ jobs:
PR_NUMBER: ${{ github.event.pull_request.number || '' }}
HASH: ${{ github.event.pull_request.head.sha || github.sha }}-${{ github.run_attempt }}
CYPRESS_MB_ALL_FEATURES_TOKEN: ${{ secrets.MB_ALL_FEATURES_TOKEN }}
CYPRESS_IS_EMBEDDING_SDK: true
CYPRESS_IS_EMBEDDING_SDK: "true"
TZ: US/Pacific # to make node match the instance tz
CYPRESS_CI: true
HOST_APP_ENVIRONMENT: ${{ matrix.environment }}

View File

@@ -57,7 +57,7 @@ jobs:
TZ: US/Pacific # to make node match the instance tz
CYPRESS_CI: true
CYPRESS_QA_DB_MONGO: ${{ inputs.name == 'mongo' }}
CYPRESS_IS_EMBEDDING_SDK: ${{ inputs.name == 'embedding-sdk' }}
CYPRESS_IS_EMBEDDING_SDK: "${{ inputs.name == 'embedding-sdk' }}"
steps:
- uses: actions/checkout@v4

View File

@@ -22,72 +22,6 @@ jobs:
chunks: 50
specs: ${{ inputs.specs }}
# if this is a test on a release branch, we need to check the build requirements
get-build-requirements:
if: |
!cancelled() &&
contains(github.ref, 'release-x')
runs-on: ubuntu-22.04
timeout-minutes: 10
outputs:
java_version: ${{ fromJson(steps.dependencies.outputs.result).java_version }}
node_version: ${{ fromJson(steps.dependencies.outputs.result).node_version }}
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: release
- name: Prepare build scripts
run: cd ${{ github.workspace }}/release && yarn && yarn build
- name: Get build dependencies
uses: actions/github-script@v7
id: dependencies
with:
script: | # js
const { getBuildRequirements, getVersionFromReleaseBranch } = require('${{ github.workspace }}/release/dist/index.cjs');
const version = getVersionFromReleaseBranch('${{ github.ref }}');
const requirements = getBuildRequirements(version);
return {
java_version: requirements.java,
node_version: requirements.node,
};
build:
needs: [get-build-requirements]
if: ${{ !cancelled() && !inputs.skip }}
runs-on: ubuntu-22.04
timeout-minutes: 15
strategy:
matrix:
edition: [oss, ee]
env:
MB_EDITION: ${{ matrix.edition }}
INTERACTIVE: false
# make sure that builds on release branches get licenses, because we use them for releases
SKIP_LICENSES: ${{ github.event_name == 'pull_request' }}
steps:
- uses: actions/checkout@v4
- name: Prepare front-end environment
uses: ./.github/actions/prepare-frontend
with:
node-version: "${{ needs.get-build-requirements.outputs.node_version }}"
- name: Prepare back-end environment
uses: ./.github/actions/prepare-backend
with:
m2-cache-key: uberjar
java-version: "${{ needs.get-build-requirements.outputs.java_version || 21 }}"
- name: Build uberjar with ./bin/build.sh
timeout-minutes: 10
run: ./bin/build.sh
shell: bash
- name: Prepare uberjar artifact
uses: ./.github/actions/prepare-uberjar-artifact
with:
name: metabase-${{ matrix.edition }}-${{ github.event.pull_request.head.sha || github.sha }}-uberjar
reset-e2e-test-comment:
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
@@ -124,9 +58,8 @@ jobs:
uses: ./.github/workflows/e2e-test.yml
needs:
- e2e-matrix-builder
- build
if: |
!cancelled() && needs.build.result == 'success'
!cancelled() && !inputs.skip
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.e2e-matrix-builder.outputs.matrix) }}
@@ -145,11 +78,10 @@ jobs:
name: Flaky e2e Tests
uses: ./.github/workflows/e2e-test.yml
needs:
- build
- e2e-matrix-builder
# skip flaky test run if only e2e specs changed as an optimization
if: |
!cancelled() && needs.build.result == 'success' && needs.e2e-matrix-builder.outputs.isDefaultSpecPattern == 'true'
!cancelled() && !inputs.skip && needs.e2e-matrix-builder.outputs.isDefaultSpecPattern == 'true'
secrets: inherit
with:
name: Flaky
@@ -181,11 +113,3 @@ jobs:
echo "E2E Tests failed"
exit 1
fi
pr-env:
needs: [build]
if: |
!cancelled() &&
contains(github.event.pull_request.labels.*.name, 'PR-Env')
uses: ./.github/workflows/pr-env.yml
secrets: inherit

View File

@@ -9,6 +9,16 @@ on:
skip-lint:
type: boolean
default: false
workflow_dispatch:
inputs:
skip:
description: "Skip main frontend jobs (type-check, unit tests, timezone tests)"
type: boolean
default: false
skip-lint:
description: "Skip linting jobs (prettier, eslint, css variables check)"
type: boolean
default: false
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}-frontend
@@ -63,8 +73,13 @@ jobs:
fe-tests-unit:
if: ${{ !inputs.skip }}
runs-on: ubuntu-22.04
timeout-minutes: 60
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
shard: [1, 2] # 2 shards for parallel execution
env:
SHARDS: 2 # should match matrix above
JEST_JUNIT_OUTPUT_DIR: ./target/junit
JEST_JUNIT_OUTPUT_NAME: test-report-frontend-unit.xml
steps:
@@ -75,22 +90,11 @@ jobs:
uses: ./.github/actions/prepare-backend
with:
m2-cache-key: "cljs"
- name: Run frontend unit tests and collect the code coverage information
if: github.ref_name == 'master'
run: yarn run test-unit --coverage --silent
- name: Run frontend unit tests
if: github.ref_name != 'master'
run: yarn run test-unit --silent
- name: Upload coverage to codecov.io
if: github.ref_name == 'master'
uses: codecov/codecov-action@v4
with:
files: ./coverage/lcov.info
flags: front-end
token: ${{ secrets.CODECOV_TOKEN }}
run: yarn run test-unit --silent --shard=${{ matrix.shard }}/${{ env.SHARDS }}
- name: Upload Test Results
uses: ./.github/actions/upload-test-results
if: always()
if: always() && github.event_name != 'workflow_dispatch'
with:
input-path: ./target/junit
output-name: frontend-unit

View File

@@ -7,10 +7,10 @@ on:
- "master"
- "release-**"
paths:
- "frontend/src/metabase-lib/expressions/**"
- "frontend/src/metabase/querying/expressions/**"
pull_request:
paths:
- "frontend/src/metabase-lib/expressions/**"
- "frontend/src/metabase/querying/expressions/**"
jobs:
fe-fuzz-lexifier:
@@ -24,7 +24,7 @@ jobs:
uses: ./.github/actions/prepare-backend
with:
m2-cache-key: "cljs"
- run: yarn test-unit frontend/src/metabase-lib/v1/expressions/pratt/fuzz.lexifier.unit.spec.ts
- run: yarn test-unit frontend/src/metabase/querying/expressions/pratt/fuzz.lexifier.unit.spec.ts
env:
MB_FUZZ: 1
name: Run fuzz testing on the lexifier
@@ -40,7 +40,7 @@ jobs:
uses: ./.github/actions/prepare-backend
with:
m2-cache-key: "cljs"
- run: yarn test-unit frontend/src/metabase-lib/v1/expressions/fuzz.compiler.unit.spec.ts
- run: yarn test-unit frontend/src/metabase/querying/expressions/fuzz.compiler.unit.spec.ts
env:
MB_FUZZ: 1
name: Run fuzz testing on the custom expression compiler
@@ -56,7 +56,7 @@ jobs:
uses: ./.github/actions/prepare-backend
with:
m2-cache-key: "cljs"
- run: yarn test-unit frontend/src/metabase-lib/v1/expressions/fuzz.string.unit.spec.ts
- run: yarn test-unit frontend/src/metabase/querying/expressions/fuzz.string.unit.spec.ts
env:
MB_FUZZ: 1
name: Run fuzz testing on the custom expression string quoter

View File

@@ -1,18 +1,19 @@
name: Auto-Optimize Docs PNG Images
on:
push:
paths:
- 'docs/**/*.png'
pull_request:
types:
- labeled
jobs:
optimize-images:
runs-on: ubuntu-latest
if: ${{ contains(github.event.pull_request.labels.*.name,'Type:Documentation') }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install pngcrush and bc
@@ -31,8 +32,8 @@ jobs:
if: steps.changed-files.outputs.any_changed == 'true'
id: optimize
run: |
echo "Optimizing PNG files with pngcrush..."
echo "Branch:" $(git_current_branch)
echo "Optimizing new PNG files with pngcrush..."
echo "Branch: $(git_current_branch)"
# Initialize tracking variables
total_files=0

View File

@@ -9,9 +9,13 @@ concurrency:
cancel-in-progress: true
jobs:
uberjar:
if: ${{ github.event.label.name == 'PR-Env' }}
uses: ./.github/workflows/uberjar.yml
secrets: inherit
pr-env:
needs: [uberjar]
if: ${{ github.event.label.name == 'PR-Env' }}
uses: ./.github/workflows/pr-env.yml
with:
wait_for_uberjar: true
secrets: inherit

View File

@@ -3,11 +3,6 @@ run-name: Building Dynamic PR Environment for ${{ github.ref_name }} by @${{ git
on:
workflow_call:
inputs:
wait_for_uberjar:
description: "Wait for uberjar build"
required: false
type: boolean
jobs:
build:
runs-on: ubuntu-latest
@@ -31,69 +26,10 @@ jobs:
uses: aws-actions/amazon-ecr-login@v2
with:
registries: "${{ secrets.PR_ENV_AWS_ACCOUNT_ID }}"
- name: Wait for uberjar
id: wait_for_uberjar
if: ${{ inputs.wait_for_uberjar == true }}
run: |
## Get workflow run id for uberjar build
curl -Ls --output e2e-tests.json \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/${{ github.repository }}/actions/workflows/run-tests.yml/runs?head_sha=${{ github.event.pull_request.head.sha || github.sha }}
ID=$(jq -r '.workflow_runs[0].id' e2e-tests.json)
echo "Run ID: ${ID}"
## Get workflow run id for uberjar build
while [ -z "$JOB_ID" ]; do
NEXT_URL="https://api.github.com/repos/${{ github.repository }}/actions/runs/${ID}/jobs?filter=latest"
# Search for build job
echo "Searching for build job..."
while [ -z "$JOB_ID" ] && [ -n "$NEXT_URL" ]; do
# Get one page of jobs
RESPONSE=$(curl -s -i \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"$NEXT_URL")
# Extract headers and body
HEADERS=$(echo "$RESPONSE" | sed -n '1,/^\r$/p')
BODY=$(echo "$RESPONSE" | sed '1,/^\r$/d')
LINK_HEADER=$(echo "$HEADERS" | grep -i '^link:' | sed 's/^link: //')
# Check for next page in Link header
if echo "$LINK_HEADER" | grep -q 'rel="next"'; then
NEXT_URL=$(echo "$LINK_HEADER" | sed -E 's/.*<([^>]+)>; rel="next".*/\1/')
else
NEXT_URL=""
fi
# Check for build job
JOB_ID=$(echo "$BODY" | jq -r '.jobs[] | select(.name | contains("build (ee)")) | .id')
done
done
echo "Job ID: ${JOB_ID}"
## Wait for uberjar build to complete
while [ true ]; do
curl -Ls --output uberjar.json \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/${{ github.repository }}/actions/jobs/${JOB_ID}
jq -r '.steps[] | select(.name == "Prepare uberjar artifact") | .status' uberjar.json | grep -q "completed" && break
echo "Waiting for uberjar build..."
sleep 10
done
echo "run_id=$(jq -r '.workflow_runs[0].id' e2e-tests.json)" >> $GITHUB_OUTPUT
- name: Retrieve uberjar artifact for ee
uses: actions/download-artifact@v4
with:
name: metabase-ee-${{ github.event.pull_request.head.sha || github.sha }}-uberjar
github-token: ${{ secrets.GITHUB_TOKEN }}
run-id: ${{ inputs.wait_for_uberjar && steps.wait_for_uberjar.outputs.run_id || github.run_id }}
- name: Move uberjar to bin/docker
run: |
jar xf target/uberjar/metabase.jar
@@ -107,7 +43,7 @@ jobs:
tags: ${{ secrets.PR_ENV_AWS_ACCOUNT_ID }}.dkr.ecr.us-east-1.amazonaws.com/metabase-enterprise:pr${{ github.event.number }}
push: true
deploy_pr:
needs: [ build ]
needs: [build]
runs-on: ubuntu-latest
name: PR Review ENV
permissions:
@@ -191,7 +127,7 @@ jobs:
kubectl apply -f ./metabase.yml
preview_links:
runs-on: ubuntu-latest
needs: [ deploy_pr ]
needs: [deploy_pr]
steps:
- uses: marocchino/sticky-pull-request-comment@v2
with:

View File

@@ -16,6 +16,7 @@ on:
- release-x.53.x
- release-x.54.x
- release-x.55.x
- release-x.56.x
- esbuild-main
concurrency:
@@ -393,10 +394,19 @@ jobs:
run: |
echo //registry.npmjs.org/:_authToken=${{ secrets.NPM_RELEASE_TOKEN }} > .npmrc
# 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]}}
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",
"release-x.56.x": "56-stable",
"esbuild-main": "56-esbuild"
}')[inputs.branch]}}
- name: Add `latest` tag to the latest release branch (`release-x.55.x`) deployment
if: ${{ inputs.branch == 'release-x.55.x' }}
if: ${{ inputs.branch == 'release-x.56.x' }}
working-directory: sdk
run: |
npm dist-tag add @metabase/embedding-sdk-react@${{ env.sdk_version }} latest

View File

@@ -7,9 +7,7 @@ on:
- release-x.*
tags:
- v*
- nightly-*
- latest-*
- beta-*
workflow_dispatch:
inputs:
version:

View File

@@ -34,18 +34,23 @@ jobs:
AWS_S3_DOWNLOADS_BUCKET: test_bucket
with:
script: | # js
const { getChangelog } = require('${{ github.workspace }}/release/dist/index.cjs');
const R = require('${{ github.workspace }}/release/dist/index.cjs');
const fs = require('fs');
const version = '${{ inputs.version }}';
const notes = await getChangelog({
const issues = await R.getMilestoneIssues({
version,
github,
owner: context.repo.owner,
repo: context.repo.repo,
});
const notes = R.getWebsiteChangelog({
version,
issues,
});
fs.writeFileSync(`release-notes-preview-${version}.md`, notes);
- name: Upload Release Notes
uses: actions/upload-artifact@v4

View File

@@ -12,8 +12,6 @@ on:
description: Tag name to apply to this release
type: choice
options:
- nightly
- beta
- latest
required: true
tag_rollout:
@@ -36,8 +34,6 @@ on:
tag_name:
type: string
# options:
# - nightly
# - beta
# - latest
# - none (skips everything)
required: true
@@ -270,7 +266,7 @@ jobs:
token: ${{ secrets.METABASE_AUTOMATION_USER_TOKEN }}
fetch-depth: 0 # we want all branches and tags
fetch-tags: true
- name: Add and push git tag for nightly/beta/latest
- name: Add and push git tag for latest
if: ${{ !inputs.dot-x-tag }}
run: | # sh
if [[ "${{ matrix.edition }}" == "ee" ]]; then

View File

@@ -17,8 +17,6 @@ on:
options:
- none
- latest
- beta
- nightly
required: true
default: 'none'
auto:
@@ -41,8 +39,6 @@ on:
# options:
# - none
# - latest
# - beta
# - nightly
required: true
default: 'none'
auto:
@@ -403,7 +399,9 @@ jobs:
});
trigger-ee-extra-pr:
needs: verify-s3-download
needs:
- containerize-ee
- verify-s3-download
runs-on: ubuntu-22.04
timeout-minutes: 10
steps:

View File

@@ -11,6 +11,7 @@ on:
jobs:
files-changed:
if: ${{ !contains(github.event.pull_request.labels.*.name,'ci skip') }}
name: Check which files changed
runs-on: ubuntu-22.04
timeout-minutes: 5
@@ -22,6 +23,7 @@ jobs:
backend_all: ${{ steps.changes.outputs.backend_all }}
frontend_all: ${{ steps.changes.outputs.frontend_all }}
frontend_sources: ${{ steps.changes.outputs.frontend_sources }}
documentation: ${{ steps.changes.outputs.documentation }}
steps:
- uses: actions/checkout@v4
- name: Test which files changed
@@ -35,6 +37,7 @@ jobs:
static-viz-files-changed:
name: Check whether static-viz files changed
if: ${{ !contains(github.event.pull_request.labels.*.name,'ci skip') }}
runs-on: ubuntu-22.04
timeout-minutes: 10
outputs:
@@ -64,6 +67,14 @@ jobs:
token: ${{ github.token }}
filters: .github/static-viz-sources.yaml
uberjar:
needs: [files-changed, static-viz-files-changed]
if: ${{ !cancelled() && !(needs.files-changed.outputs.documentation == 'true' && needs.files-changed.outputs.backend_all == 'false' && needs.files-changed.outputs.frontend_all == 'false' && needs.files-changed.outputs.e2e_all == 'false') }}
uses: ./.github/workflows/uberjar.yml
secrets: inherit
with:
source_changed: ${{ needs.files-changed.outputs.backend_all == 'true' || needs.files-changed.outputs.frontend_all == 'true' || needs.static-viz-files-changed.outputs.static_viz == 'true' }}
backend-tests:
if: ${{ !cancelled() }}
needs: [files-changed, static-viz-files-changed]
@@ -95,7 +106,8 @@ jobs:
skip-lint: ${{ needs.files-changed.outputs.frontend_all != 'true' && needs.files-changed.outputs.e2e_specs != 'true' }}
e2e-tests:
needs: files-changed
needs: [files-changed, uberjar]
if: always() && !cancelled()
uses: ./.github/workflows/e2e-tests.yml
secrets: inherit
with:
@@ -110,3 +122,11 @@ jobs:
needs: files-changed
uses: ./.github/workflows/embedding-sdk.yml
secrets: inherit
pr-env:
needs: [uberjar]
if: |
!cancelled() &&
contains(github.event.pull_request.labels.*.name, 'PR-Env')
uses: ./.github/workflows/pr-env.yml
secrets: inherit

View File

@@ -13,12 +13,11 @@ on:
schedule:
- cron: '0 5 * * *'
jobs:
monitor:
# don't run this workflow on a cron for forks
# Generate pom.xml files for all Maven projects
generate-poms:
if: ${{ github.event_name != 'schedule' || github.repository == 'metabase/metabase' }}
name: Generate Snyk report
name: Generate pom.xml files
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
@@ -26,26 +25,144 @@ jobs:
uses: ./.github/actions/prepare-backend
with:
m2-cache-key: 'snyk'
- uses: snyk/actions/setup@0.4.0
- name: Generate all pom.xml
run: .github/scripts/write-poms.sh
- name: Run snyk main project
- name: Upload pom files
uses: actions/upload-artifact@v4
with:
name: pom-files
path: |
pom.xml
modules/drivers/*/pom.xml
# Yarn/NPM projects that don't need pom files
frontend-projects:
if: ${{ github.event_name != 'schedule' || github.repository == 'metabase/metabase' }}
name: ${{ matrix.project.name }}
runs-on: ubuntu-22.04
strategy:
matrix:
project:
- name: Main Frontend (yarn)
file: yarn.lock
package-manager: yarn
category: main-frontend-yarn
- name: Embedding SDK Template
file: bin/embedding-sdk/templates/yarn.lock
package-manager: yarn
category: embedding-sdk-template
- name: E2E Angular 20 Host App
file: e2e/embedding-sdk-host-apps/angular-20-host-app/package-lock.json
package-manager: npm
category: e2e-angular-host
- name: E2E Next 15 App Router
file: e2e/embedding-sdk-host-apps/next-15-app-router-host-app/package-lock.json
package-manager: npm
category: e2e-next-app-router
- name: E2E Next 15 Pages Router
file: e2e/embedding-sdk-host-apps/next-15-pages-router-host-app/package-lock.json
package-manager: npm
category: e2e-next-pages-router
- name: E2E Vite 6 Host App
file: e2e/embedding-sdk-host-apps/vite-6-host-app/package-lock.json
package-manager: npm
category: e2e-vite-host
- name: Release Helper
file: release/yarn.lock
package-manager: yarn
category: release-helper
steps:
- uses: actions/checkout@v4
- uses: snyk/actions/setup@0.4.0
- name: Run snyk test
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
continue-on-error: true
run: snyk test --all-projects --exclude="modules" --sarif-file-output=snyk-main.sarif
- name: Upload result to GitHub Code Scanning
run: snyk test --org="metabase-AnD9iS4Wfu4eBYMsG2DZ5N" --remote-repo-url="https://github.com/metabase/metabase" --file=${{ matrix.project.file }} --package-manager=${{ matrix.project.package-manager }} --sarif-file-output=snyk-${{ matrix.project.category }}.sarif
- name: Upload results
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: snyk-main.sarif
category: main-project
- name: Run snyk drivers
sarif_file: snyk-${{ matrix.project.category }}.sarif
category: ${{ matrix.project.category }}
# Maven projects that need pom files
maven-projects:
needs: generate-poms
if: ${{ github.event_name != 'schedule' || github.repository == 'metabase/metabase' }}
name: ${{ matrix.project.name }}
runs-on: ubuntu-22.04
strategy:
matrix:
project:
- name: Main Backend (maven)
file: pom.xml
category: main-backend-maven
- name: Driver - Athena
file: modules/drivers/athena/pom.xml
category: driver-athena
- name: Driver - BigQuery Cloud SDK
file: modules/drivers/bigquery-cloud-sdk/pom.xml
category: driver-bigquery-cloud-sdk
- name: Driver - ClickHouse
file: modules/drivers/clickhouse/pom.xml
category: driver-clickhouse
- name: Driver - Databricks
file: modules/drivers/databricks/pom.xml
category: driver-databricks
- name: Driver - Druid
file: modules/drivers/druid/pom.xml
category: driver-druid
- name: Driver - Druid JDBC
file: modules/drivers/druid-jdbc/pom.xml
category: driver-druid-jdbc
- name: Driver - Hive-like
file: modules/drivers/hive-like/pom.xml
category: driver-hive-like
- name: Driver - MongoDB
file: modules/drivers/mongo/pom.xml
category: driver-mongo
- name: Driver - Oracle
file: modules/drivers/oracle/pom.xml
category: driver-oracle
- name: Driver - Presto JDBC
file: modules/drivers/presto-jdbc/pom.xml
category: driver-presto-jdbc
- name: Driver - Redshift
file: modules/drivers/redshift/pom.xml
category: driver-redshift
- name: Driver - Snowflake
file: modules/drivers/snowflake/pom.xml
category: driver-snowflake
- name: Driver - SparkSQL
file: modules/drivers/sparksql/pom.xml
category: driver-sparksql
- name: Driver - SQLite
file: modules/drivers/sqlite/pom.xml
category: driver-sqlite
- name: Driver - SQL Server
file: modules/drivers/sqlserver/pom.xml
category: driver-sqlserver
- name: Driver - Starburst
file: modules/drivers/starburst/pom.xml
category: driver-starburst
- name: Driver - Vertica
file: modules/drivers/vertica/pom.xml
category: driver-vertica
steps:
- uses: actions/checkout@v4
- uses: snyk/actions/setup@0.4.0
- name: Download pom files
uses: actions/download-artifact@v4
with:
name: pom-files
- name: Run snyk test
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
continue-on-error: true
run: cd modules && snyk test --all-projects --sarif-file-output=snyk-drivers.sarif
- name: Upload result to GitHub Code Scanning
run: snyk test --org="metabase-AnD9iS4Wfu4eBYMsG2DZ5N" --remote-repo-url="https://github.com/metabase/metabase" --file=${{ matrix.project.file }} --package-manager=maven --sarif-file-output=snyk-${{ matrix.project.category }}.sarif
- name: Upload results
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: modules/snyk-drivers.sarif
category: drivers
sarif_file: snyk-${{ matrix.project.category }}.sarif
category: ${{ matrix.project.category }}

View File

@@ -3,12 +3,15 @@ name: Build + Docker Uberjar
# This workflow builds an uberjar and pushes it to dockerhub for any branch, either on-demand,
# or automatically for the listed branches
concurrency:
group: uberjar-${{ github.ref }}
cancel-in-progress: false
on:
push:
branches:
- master
- metabot-v3-main
- feature-visualizer
- internal-tools
paths-ignore:
# config files
@@ -24,12 +27,95 @@ on:
inputs:
commit:
description: "Optional full-length commit SHA-1 hash"
workflow_call:
inputs:
source_changed:
description: "Whether source code has changed"
type: boolean
default: true
jobs:
check-existing-artifacts:
runs-on: ubuntu-22.04
timeout-minutes: 5
outputs:
ee_exists: ${{ steps.check-ee.outcome == 'success' }}
oss_exists: ${{ steps.check-oss.outcome == 'success' }}
should_build: ${{ steps.decide.outputs.should_build }}
steps:
- name: Try to download existing EE artifact
id: check-ee
continue-on-error: true
uses: actions/download-artifact@v4
with:
name: metabase-ee-${{ github.event.inputs.commit || github.event.pull_request.head.sha || github.sha }}-uberjar
- name: Try to download existing OSS artifact
id: check-oss
continue-on-error: true
uses: actions/download-artifact@v4
with:
name: metabase-oss-${{ github.event.inputs.commit || github.event.pull_request.head.sha || github.sha }}-uberjar
- name: Decide if build is needed
id: decide
run: |
SOURCE_CHANGED="${{ inputs.source_changed == true }}"
EE_EXISTS="${{ steps.check-ee.outcome == 'success' }}"
OSS_EXISTS="${{ steps.check-oss.outcome == 'success' }}"
echo "Source changed: $SOURCE_CHANGED"
echo "EE exists: $EE_EXISTS"
echo "OSS exists: $OSS_EXISTS"
# Build if source changed OR artifacts don't exist
if [[ "$SOURCE_CHANGED" == "true" ]] || [[ "$EE_EXISTS" == "false" ]] || [[ "$OSS_EXISTS" == "false" ]]; then
SHOULD_BUILD="true"
echo "Will build: source_changed=$SOURCE_CHANGED, ee_exists=$EE_EXISTS, oss_exists=$OSS_EXISTS"
else
SHOULD_BUILD="false"
echo "Skipping build: artifacts exist and no source changes"
fi
echo "should_build=$SHOULD_BUILD" >> $GITHUB_OUTPUT
# if this is on a release branch, we need to check the build requirements
get-build-requirements:
if: |
!cancelled() &&
contains(github.ref, 'release-x')
runs-on: ubuntu-22.04
timeout-minutes: 10
outputs:
java_version: ${{ fromJson(steps.dependencies.outputs.result).java_version }}
node_version: ${{ fromJson(steps.dependencies.outputs.result).node_version }}
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: release
- name: Prepare build scripts
run: cd ${{ github.workspace }}/release && yarn && yarn build
- name: Get build dependencies
uses: actions/github-script@v7
id: dependencies
with:
script: | # js
const { getBuildRequirements, getVersionFromReleaseBranch } = require('${{ github.workspace }}/release/dist/index.cjs');
const version = getVersionFromReleaseBranch('${{ github.ref }}');
const requirements = getBuildRequirements(version);
return {
java_version: requirements.java,
node_version: requirements.node,
};
get-container-info:
runs-on: ubuntu-22.04
timeout-minutes: 5
name: Get container info
# Skip if this is a PR without the build-docker-uberjar label
if: github.ref_name == 'master' || contains(github.event.pull_request.labels.*.name, 'build-docker-uberjar')
outputs:
editions: ${{ toJson(fromJson(steps.info.outputs.result).editions) }}
ee: ${{ toJson(fromJson(steps.info.outputs.result).ee) }}
@@ -72,17 +158,19 @@ jobs:
echo "${{ steps.info.outputs.result }}"
build:
needs: get-container-info
needs:
[check-existing-artifacts, get-build-requirements, get-container-info]
if: always() && !cancelled() && needs.check-existing-artifacts.outputs.should_build == 'true' && (needs.get-build-requirements.result == 'success' || needs.get-build-requirements.result == 'skipped')
name: Build MB ${{ matrix.edition }}
runs-on: ubuntu-22.04
timeout-minutes: 15
strategy:
matrix:
edition: ${{ fromJson(needs.get-container-info.outputs.editions) }}
edition: ${{ needs.get-container-info.result == 'success' && fromJson(needs.get-container-info.outputs.editions) || fromJson('["ee", "oss"]') }}
env:
MB_EDITION: ${{ matrix.edition }}
INTERACTIVE: false
SKIP_LICENSES: true # faster builds for dev
SKIP_LICENSES: ${{ github.event_name == 'pull_request' }} # faster builds for dev
steps:
- name: Check out the code
uses: actions/checkout@v4
@@ -90,26 +178,29 @@ jobs:
ref: ${{ github.event.inputs.commit }}
- name: Prepare front-end environment
uses: ./.github/actions/prepare-frontend
with:
node-version: "${{ needs.get-build-requirements.outputs.node_version || '22' }}"
- name: Prepare back-end environment
uses: ./.github/actions/prepare-backend
with:
m2-cache-key: uberjar
java-version: 21
java-version: "${{ needs.get-build-requirements.outputs.java_version || 21 }}"
- name: Build
run: ./bin/build.sh
- name: Prepare uberjar artifact
uses: ./.github/actions/prepare-uberjar-artifact
with:
name: metabase-${{ matrix.edition }}-${{ github.event.inputs.commit || github.sha }}-uberjar
name: metabase-${{ matrix.edition }}-${{ github.event.inputs.commit || github.event.pull_request.head.sha || github.sha }}-uberjar
check-jar-health:
runs-on: ubuntu-22.04
name: Is ${{ matrix.edition }} (java ${{ matrix.java-version }}) healthy?
needs: [build, get-container-info]
needs: [build, check-existing-artifacts, get-container-info]
if: always() && !cancelled() && (needs.build.result == 'success' || (needs.check-existing-artifacts.outputs.should_build == 'false' && needs.check-existing-artifacts.outputs.ee_exists == 'true' && needs.check-existing-artifacts.outputs.oss_exists == 'true'))
timeout-minutes: 10
strategy:
matrix:
edition: ${{ fromJson(needs.get-container-info.outputs.editions) }}
edition: ${{ needs.get-container-info.result == 'success' && fromJson(needs.get-container-info.outputs.editions) || fromJson('["ee", "oss"]') }}
java-version: [21]
steps:
- name: Prepare JRE (Java Run-time Environment)
@@ -122,7 +213,7 @@ jobs:
- uses: actions/download-artifact@v4
name: Retrieve uberjar artifact
with:
name: metabase-${{ matrix.edition }}-${{ github.event.inputs.commit || github.sha }}-uberjar
name: metabase-${{ matrix.edition }}-${{ github.event.inputs.commit || github.event.pull_request.head.sha || github.sha }}-uberjar
- name: Launch uberjar
run: >-
java --add-opens java.base/java.nio=ALL-UNNAMED -jar ./target/uberjar/metabase.jar &
@@ -130,14 +221,15 @@ jobs:
run: while ! curl 'http://localhost:3000/api/health' | grep '{"status":"ok"}'; do sleep 1; done
containerize:
needs: [check-jar-health, get-container-info]
needs: [check-jar-health, get-container-info, build]
if: needs.get-container-info.result == 'success' && needs.build.result == 'success'
strategy:
matrix:
edition: ${{ fromJson(needs.get-container-info.outputs.editions) }}
uses: ./.github/workflows/containerize-jar.yml
secrets: inherit
with:
artifact-name: metabase-${{ matrix.edition }}-${{ github.event.inputs.commit || github.sha }}-uberjar
artifact-name: metabase-${{ matrix.edition }}-${{ github.event.inputs.commit || github.event.pull_request.head.sha || github.sha }}-uberjar
commit: ${{ github.event.inputs.commit || github.sha }}
repo: ${{ fromJson(needs.get-container-info.outputs[matrix.edition]).repo }}
tag: ${{ fromJson(needs.get-container-info.outputs[matrix.edition]).tag }}

2
.gitignore vendored
View File

@@ -51,6 +51,7 @@ cypress.env.json
/lein-plugins/*/target
/local
/locales/metabase-*.pot
/logs
/modules/drivers/*/resources/namespaces.edn
/modules/drivers/*/target
/node_modules/
@@ -152,3 +153,4 @@ CLAUDE.local.md
.eslintcache
/logs
/.clojure-mcp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

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