Skip to content
Snippets Groups Projects
  • Braden Shepherdson's avatar
    c062ab7f
    Enable source maps for CLJS in release builds (#38819) · c062ab7f
    Braden Shepherdson authored
    We do this for our JS and TS code. This change configures shadow-cljs to
    emit the source maps in release mode, and bumps the versions of
    shadow-cljs and the transitive dependency `source-maps-js` to enable
    webpack to consume these source maps correctly.
    
    (The output source maps have some quirks, and broke some consumers.
    Mainly that inlining of CLJS functions can result in empty namespaces,
    and while the file contents were correctly inlined,
    `sourceContents: ""` looks falsy in JS. Webpack would try to read the
    nonexistent source files and fail to build.)
    Enable source maps for CLJS in release builds (#38819)
    Braden Shepherdson authored
    We do this for our JS and TS code. This change configures shadow-cljs to
    emit the source maps in release mode, and bumps the versions of
    shadow-cljs and the transitive dependency `source-maps-js` to enable
    webpack to consume these source maps correctly.
    
    (The output source maps have some quirks, and broke some consumers.
    Mainly that inlining of CLJS functions can result in empty namespaces,
    and while the file contents were correctly inlined,
    `sourceContents: ""` looks falsy in JS. Webpack would try to read the
    nonexistent source files and fail to build.)
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
deps.edn 41.80 KiB
;; -*- comment-column: 80; -*-
{:deps
 ;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 ;; !!                                   PLEASE KEEP THESE ORGANIZED ALPHABETICALLY                                  !!
 ;; !!                                   AND ADD A COMMENT EXPLAINING THEIR PURPOSE                                  !!
 ;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 {amalloy/ring-buffer                       {:mvn/version "1.3.1"               ; fixed length queue implementation, used in log buffering
                                             :exclusions  [org.clojure/clojure
                                                           org.clojure/clojurescript]}
  amalloy/ring-gzip-middleware              {:mvn/version "0.1.4"}              ; Ring middleware to GZIP responses if client can handle it
  babashka/fs                               {:mvn/version "0.4.19"}             ; Portable filesystem operations
  bigml/histogram                           {:mvn/version "4.1.4"               ; Histogram data structure
                                             :exclusions  [junit/junit]}
  buddy/buddy-core                          {:mvn/version "1.11.423"            ; various cryptographic functions
                                             :exclusions  [commons-codec/commons-codec
                                                           org.bouncycastle/bcpkix-jdk15on
                                                           org.bouncycastle/bcprov-jdk15on
                                                           org.bouncycastle/bcpkix-jdk18on
                                                           org.bouncycastle/bcprov-jdk18on]}
  buddy/buddy-sign                          {:mvn/version "3.5.351"}            ; JSON Web Tokens; High-Level message signing library
  camel-snake-kebab/camel-snake-kebab       {:mvn/version "0.4.3"}              ; util functions for converting between camel, snake, and kebob case
  cheshire/cheshire                         {:mvn/version "5.12.0"}             ; fast JSON encoding (used by Ring JSON middleware)
  clj-bom/clj-bom                           {:mvn/version "0.1.2"}              ; handle BOMs in imported CSVs
  clj-commons/iapetos                       {:mvn/version "0.1.13"}             ; prometheus metrics
  clj-http/clj-http                         {:mvn/version "3.12.3"              ; HTTP client
                                             :exclusions  [commons-codec/commons-codec
                                                           commons-io/commons-io
                                                           slingshot/slingshot]}
  clojure.java-time/clojure.java-time       {:mvn/version "1.4.2"}              ; java.time utilities
  clojurewerkz/quartzite                    {:mvn/version "2.2.0"               ; scheduling library
                                             :exclusions  [c3p0/c3p0
                                                           org.quartz-scheduler/quartz]}
  colorize/colorize                         {:mvn/version "0.1.1"               ; string output with ANSI color codes (for logging)
                                             :exclusions  [org.clojure/clojure]}
  com.clearspring.analytics/stream          {:mvn/version "2.9.8"               ; Various sketching algorithms
                                             :exclusions  [it.unimi.dsi/fastutil
                                                           org.slf4j/slf4j-api]}
  com.draines/postal                        {:mvn/version "2.0.5"}              ; SMTP library
  com.github.seancorfield/honeysql          {:mvn/version "2.5.1103"}           ; Honey SQL 2. SQL generation from Clojure data maps
  com.github.seancorfield/next.jdbc         {:git/url "https://github.com/seancorfield/next-jdbc.git"
                                             :sha     "abd926cde3730087d3729dcea0ce0ab7ef1194f2"} ; for https://github.com/seancorfield/next-jdbc/issues/245; when this makes it to a release we can switch to that.
  com.github.steffan-westcott/clj-otel-api  {:mvn/version "0.2.4.1"}            ; Telemetry library
  com.github.vertical-blank/sql-formatter   {:mvn/version "2.0.4"}              ; Java SQL formatting library https://github.com/vertical-blank/sql-formatter
  com.google.guava/guava                    {:mvn/version "32.1.3-jre"}         ; dep for BigQuery, Spark, and GA. Require here rather than letting different dep versions stomp on each other — see comments on #9697
  com.fasterxml.jackson.core/jackson-databind
                                            {:mvn/version "2.16.0"}             ; JSON processor used by snowplow-java-tracker
  com.fasterxml.woodstox/woodstox-core      {:mvn/version "6.5.1"}              ; trans dep of commons-codec (pinned version due to CVE-2022-40151)
  com.h2database/h2                         {:mvn/version "2.1.214"}            ; embedded SQL database
  com.gfredericks/test.chuck                {:mvn/version "0.2.14"}             ; generating strings from regex
  com.snowplowanalytics/snowplow-java-tracker
                                            {:mvn/version "1.0.1"               ; Snowplow analytics
                                             :exclusions [com.fasterxml.jackson.core/jackson-databind]}
  com.taoensso/nippy                        {:mvn/version "3.3.0"}              ; Fast serialization (i.e., GZIP) library for Clojure
  com.vladsch.flexmark/flexmark             {:mvn/version "0.64.8"}             ; Markdown parsing
  com.vladsch.flexmark/flexmark-ext-autolink
                                            {:mvn/version "0.64.8"}             ; Flexmark extension for auto-linking bare URLs
  commons-fileupload/commons-fileupload     {:mvn/version "1.5"}                ; ring/ring-core 1.9.6 uses v1.4, but we want 1.5 due to a CVE. When we upgrade to the forthcoming ring/ring-core 1.10.0 we can remove this.
  commons-codec/commons-codec               {:mvn/version "1.16.0"}             ; Apache Commons -- useful codec util fns
  commons-io/commons-io                     {:mvn/version "2.15.1"}             ; Apache Commons -- useful IO util fns
  commons-net/commons-net                   {:mvn/version "3.10.0"}             ; Apache Commons -- useful network utils. Transitive dep of Snowplow, pinned due to CVE-2021-37533
  commons-validator/commons-validator       {:mvn/version "1.8.0"               ; Apache Commons -- useful validation util fns
                                             :exclusions  [commons-beanutils/commons-beanutils
                                                           commons-digester/commons-digester
                                                           commons-logging/commons-logging]}
  compojure/compojure                       {:mvn/version "1.7.0"               ; HTTP Routing library built on Ring
                                             :exclusions  [ring/ring-codec]}
  crypto-random/crypto-random               {:mvn/version "1.2.1"}              ; library for generating cryptographically secure random bytes and strings
  dk.ative/docjure                          {:mvn/version "1.19.0"              ; excel export
                                             :exclusions  [org.apache.poi/poi
                                                           org.apache.poi/poi-ooxml]}
  environ/environ                           {:mvn/version "1.2.0"}              ; env vars/Java properties abstraction
  hiccup/hiccup                             {:mvn/version "1.0.5"}              ; HTML templating
  inflections/inflections                   {:mvn/version "0.14.1"}             ; Clojure/Script library used for prularizing words
  info.sunng/ring-jetty9-adapter            {:mvn/version "0.22.3"}             ; Drop-in replacement for official Ring Jetty adapter. Supports Jetty 11 webserver.
  instaparse/instaparse                     {:mvn/version "1.4.12"}             ; Make your own parser
  clj-commons/clj-yaml                      {:mvn/version "1.0.27"}             ; Clojure wrapper for YAML library SnakeYAML
  io.github.camsaul/toucan2                 {:mvn/version "1.0.537"}
  io.github.eerohele/pp                     {:git/tag "2023-11-25.47"           ; super fast pretty-printing library
                                             :git/sha "d3210d3"
                                             :git/url "https://github.com/eerohele/pp"}
  ;; The 2.X line of Resilience4j requires Java 17, so we cannot upgrade this dependency until that is our minimum JVM version
  io.github.resilience4j/resilience4j-retry {:mvn/version "1.7.1"}              ; Support for retrying operations
  io.prometheus/simpleclient_hotspot        {:mvn/version "0.16.0"}             ; prometheus jvm collector
  io.prometheus/simpleclient_jetty          {:mvn/version "0.16.0"}             ; prometheus jetty collector
  javax.servlet/servlet-api                 {:mvn/version "2.5"}                ; used by ring's multipart-params (file upload)
  joda-time/joda-time                       {:mvn/version "2.12.5"}
  kixi/stats                                {:mvn/version "0.5.5"               ; Various statistic measures implemented as transducers
                                             :exclusions  [org.clojure/data.avl]}
  lambdaisland/uri                          {:mvn/version "1.19.155"}           ; Used by openai-clojure
  medley/medley                             {:mvn/version "1.4.0"}              ; lightweight lib of useful functions
  metabase/connection-pool                  {:mvn/version "1.2.0"}              ; simple wrapper around C3P0. JDBC connection pools
  metabase/saml20-clj                       {:mvn/version "2.2.4"               ; EE SAML integration.
                                             :exclusions [org.bouncycastle/bcpkix-jdk15on
                                                          org.bouncycastle/bcprov-jdk15on
                                                          org.bouncycastle/bcpkix-jdk18on
                                                          org.bouncycastle/bcprov-jdk18on]}
  metabase/throttle                         {:mvn/version "1.0.2"}              ; Tools for throttling access to API endpoints and other code pathways
  metosin/malli                             {:mvn/version "0.14.0"}             ; Data-driven Schemas for Clojure/Script and babashka
  nano-id/nano-id                           {:mvn/version "1.0.0"}              ; NanoID generator for generating entity_ids
  net.cgrand/macrovich                      {:mvn/version "0.2.2"}              ; utils for writing macros for both Clojure & ClojureScript
  net.clojars.wkok/openai-clojure           {:mvn/version "0.14.0"
                                             :exclusions  [lambdaisland/uri]}   ; OpenAI
  net.i2p.crypto/eddsa                      {:mvn/version "0.3.0"}              ; ED25519 key support (optional dependency for org.apache.sshd/sshd-core)
  net.redhogs.cronparser/cron-parser-core   {:mvn/version "3.5"                 ; describe Cron schedule in human-readable language
                                             :exclusions  [joda-time/joda-time  ; exclude joda time 2.3 which has outdated timezone information
                                                           org.slf4j/slf4j-api]}
  net.sf.cssbox/cssbox                      {:mvn/version "5.0.1"               ; HTML / CSS rendering
                                             :exclusions  [org.slf4j/slf4j-api
                                                           junit/junit]}
  net.thisptr/jackson-jq                    {:mvn/version "1.0.0-preview.20230409"} ; Java implementation of the JQ json query language
  org.apache.commons/commons-compress       {:mvn/version "1.25.0"}             ; compression utils
  org.apache.commons/commons-lang3          {:mvn/version "3.14.0"}             ; helper methods for working with java.lang stuff
  org.apache.logging.log4j/log4j-1.2-api    {:mvn/version "2.22.0"}             ; apache logging framework
  org.apache.logging.log4j/log4j-api        {:mvn/version "2.22.0"}             ; add compatibility with log4j 1.2
  org.apache.logging.log4j/log4j-core       {:mvn/version "2.22.0"}             ; apache logging framework
  org.apache.logging.log4j/log4j-jcl        {:mvn/version "2.22.0"}             ; allows the commons-logging API to work with log4j 2
  org.apache.logging.log4j/log4j-jul        {:mvn/version "2.22.0"}             ; java.util.logging (JUL) -> Log4j2 adapter
  org.apache.logging.log4j/log4j-slf4j2-impl
                                            {:mvn/version "2.22.0"}             ; allows the slf4j2 API to work with log4j 2
  org.apache.logging.log4j/log4j-layout-template-json
                                            {:mvn/version "2.22.0"}             ; allows the custom json logging format
  org.apache.poi/poi                        {:mvn/version "5.2.5"}              ; Work with Office documents (e.g. Excel spreadsheets) -- newer version than one specified by Docjure
  org.apache.poi/poi-ooxml                  {:mvn/version "5.2.5"
                                             :exclusions  [org.bouncycastle/bcpkix-jdk15on
                                                           org.bouncycastle/bcprov-jdk15on]}
  org.apache.sshd/sshd-core                 {:mvn/version "2.11.0"              ; ssh tunneling and test server
                                             :exclusions  [org.slf4j/slf4j-api
                                                           org.slf4j/jcl-over-slf4j]}
  org.apache.xmlgraphics/batik-all          {:mvn/version "1.17"}               ; SVG -> image
  org.bouncycastle/bcpkix-jdk18on           {:mvn/version "1.77"}               ; Bouncy Castle crypto library -- explicit version of BC specified to resolve illegal reflective access errors
  org.bouncycastle/bcprov-jdk18on           {:mvn/version "1.77"}
  org.clj-commons/hickory                   {:mvn/version "0.7.3"               ; Parse HTML into Clojure data structures
                                             :exclusions [org.jsoup/jsoup]}
  org.clojars.pntblnk/clj-ldap              {:mvn/version "0.0.17"}             ; LDAP client
  org.clojure/clojure                       {:mvn/version "1.11.1"}
  org.clojure/core.async                    {:mvn/version "1.6.681"
                                             :exclusions  [org.clojure/tools.reader]}
  org.clojure/core.logic                    {:mvn/version "1.0.1"}              ; optimized pattern matching library for Clojure
  org.clojure/core.match                    {:mvn/version "1.0.1"}
  org.clojure/core.memoize                  {:mvn/version "1.0.257"}            ; useful FIFO, LRU, etc. caching mechanisms
  org.clojure/data.csv                      {:mvn/version "1.0.1"}              ; CSV parsing / generation
  org.clojure/data.xml                      {:mvn/version "0.0.8"}              ; XML parsing / generation
  org.clojure/java.classpath                {:mvn/version "1.0.0"}              ; examine the Java classpath from Clojure programs
  org.clojure/java.jdbc                     {:mvn/version "0.7.12"}             ; basic JDBC access from Clojure
  org.clojure/java.jmx                      {:mvn/version "1.0.0"}              ; JMX bean library, for exporting diagnostic info
  org.clojure/math.combinatorics            {:mvn/version "0.2.0"}              ; combinatorics functions
  org.clojure/math.numeric-tower            {:mvn/version "0.0.5"}              ; math functions like `ceil`
  org.clojure/tools.cli                     {:mvn/version "1.0.219"}            ; command-line argument parsing
  org.clojure/tools.logging                 {:mvn/version "1.2.4"}              ; logging framework
  org.clojure/tools.macro                   {:mvn/version "0.1.5"}              ; local macros
  org.clojure/tools.namespace               {:mvn/version "1.4.4"}
  org.clojure/tools.reader                  {:mvn/version "1.3.7"}
  org.clojure/tools.trace                   {:mvn/version "0.7.11"}             ; function tracing
  org.eclipse.jetty/jetty-server            {:mvn/version "11.0.17"}            ; web server
  org.flatland/ordered                      {:mvn/version "1.15.11"}            ; ordered maps & sets
  org.graalvm.js/js                         {:mvn/version "22.3.5"}             ; JavaScript engine
  org.jsoup/jsoup                           {:mvn/version "1.17.2"}             ; required by hickory
  org.liquibase/liquibase-core              {:mvn/version "4.25.1"              ; migration management (Java lib)
                                             :exclusions  [ch.qos.logback/logback-classic]}
  ;; The 3.X line of development for mariadb-java-client only supports the jdbc:mariadb protocol, so use 2.X for now.
  org.mariadb.jdbc/mariadb-java-client      {:mvn/version "2.7.10"}             ; MySQL/MariaDB driver
  org.mindrot/jbcrypt                       {:mvn/version "0.4"}                ; Crypto library
  org.postgresql/postgresql                 {:mvn/version "42.7.1"}             ; Postgres driver
  org.quartz-scheduler/quartz               {:mvn/version "2.3.2"}              ; Quartz job scheduler, provided by quartzite but this is a newer version.
  org.slf4j/slf4j-api                       {:mvn/version "2.0.9"}              ; abstraction for logging frameworks -- allows end user to plug in desired logging framework at deployment time
  org.tcrawley/dynapath                     {:mvn/version "1.1.0"}              ; Dynamically add Jars (e.g. Oracle or Vertica) to classpath
  org.threeten/threeten-extra               {:mvn/version "1.7.2"}              ; extra Java 8 java.time classes like DayOfMonth and Quarter
  potemkin/potemkin                         {:mvn/version "0.4.7"               ; utility macros & fns
                                             :exclusions  [riddley/riddley]}
  pretty/pretty                             {:mvn/version "1.0.5"}              ; protocol for defining how custom types should be pretty printed
  prismatic/schema                          {:mvn/version "1.4.1"}              ; Data schema declaration and validation library
  redux/redux                               {:mvn/version "0.1.4"}              ; Utility functions for building and composing transducers
  riddley/riddley                           {:mvn/version "0.2.0"}              ; code walking lib -- used interally by Potemkin, manifold, etc.
  ring/ring-core                            {:mvn/version "1.10.0"}             ; web server (Jetty wrapper)
  ring/ring-json                            {:mvn/version "0.5.1"}              ; Ring middleware for reading/writing JSON automatically
  slingshot/slingshot                       {:mvn/version "0.12.2"}             ; enhanced throw/catch, used by other deps
  stencil/stencil                           {:mvn/version "0.5.0"}              ; Mustache templates for Clojure
  user-agent/user-agent                     {:mvn/version "0.1.1"}              ; User-Agent string parser, for Login History page & elsewhere
  weavejester/dependency                    {:mvn/version "0.2.1"}}             ; Dependency graphs and topological sorting


 ;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 ;; !!         PLEASE KEEP NEW DEPENDENCIES ABOVE ALPHABETICALLY ORGANIZED AND ADD COMMENTS EXPLAINING THEM.         !!
 ;; !!                            *PLEASE DO NOT* ADD NEW ONES TO THE BOTTOM OF THE LIST.                            !!
 ;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


 :paths
 ["src" "resources"]

 ;; These are needed for the Athena and Redshift drivers if you are developing against them locally. If those drivers'
 ;; dependencies are not included (i.e., if we don't have the `:drivers` profile), these repos are effectively
 ;; ignored.
 ;;
 ;; 1. Maven repos from subprojects do not get copied over -- see
 ;; https://ask.clojure.org/index.php/10726/deps-manifest-dependencies-respect-repos-dependent-project
 ;;
 ;; 2. You cannot include `:mvn/repos` inside of an alias -- see
 ;; https://ask.clojure.org/index.php/12367/support-mvn-repos-inside-an-alias -- if we could, this could go in the
 ;; `:drivers` alias instead.
 :mvn/repos
 {"athena"   {:url "https://s3.amazonaws.com/maven-athena"}
  "redshift" {:url "https://s3.amazonaws.com/redshift-maven-repository/release"}
  ;; for metabase/saml20-clj
  "opensaml" {:url "https://build.shibboleth.net/nexus/content/repositories/releases/"}}

 :aliases
 {
;;; Local Dev & test profiles
  ;; for local development: start a REPL with
  ;;
  ;;    clojure -A:dev (basic dev REPL that includes test namespaces)
  ;;    clojure -A:dev:drivers:drivers-dev (dev REPL w/ drivers + tests)
  ;;    clojure -A:dev:ee:ee-dev (dev REPL w/ EE code including tests)
  ;;
  ;; You can start a web server from this REPL with
  ;;
  ;;    (require 'dev)
  ;;    (dev/start!)
  :dev
  {:extra-deps
   {com.clojure-goes-fast/clj-async-profiler
                                 {:mvn/version "1.1.1"}                     ; Enables local profiling and heat map generation
    clj-http-fake/clj-http-fake  {:mvn/version "1.0.4"
                                  :exclusions  [slingshot/slingshot]}
    clj-kondo/clj-kondo          {:mvn/version "2023.12.15"}                ; this is not for RUNNING kondo, but so we can hack on custom hooks code from the REPL.
    cloverage/cloverage          {:mvn/version "1.2.4"}
    com.gfredericks/test.chuck   {:mvn/version "0.2.14"}                    ; generating strings from regexes (useful with malli)
    djblue/portal                {:mvn/version "0.51.0"}                    ; ui for inspecting values
    hashp/hashp                  {:mvn/version "0.2.2"}                     ; debugging/spying utility
    io.github.camsaul/humane-are {:mvn/version "1.0.2"}
    io.github.metabase/hawk      {:sha "59cba703e757bd94c0cc698dbf5338bf36276991"}
    jonase/eastwood              {:mvn/version "1.4.2"                      ; inspects namespaces and reports possible problems using tools.analyzer
                                  :exclusions
                                  [org.ow2.asm/asm-all]}
    lambdaisland/deep-diff2      {:mvn/version "2.10.211"}                  ; way better diffs
    methodical/methodical        {:mvn/version "0.15.1"}                    ; drop-in replacements for Clojure multimethods and adds several advanced features
    org.clojure/algo.generic     {:mvn/version "0.1.3"}
    peridot/peridot              {:git/url "https://github.com/piranha/peridot.git"
                                  :sha "999d0a02425c906c35bace749654dc095ecf3e6a"} ; mocking Ring requests; waiting for upstream release of commit 0fc7c01 (explicit charset)
    pjstadig/humane-test-output  {:mvn/version "0.11.0"}
    reifyhealth/specmonstah      {:mvn/version "2.1.0"
                                  :exclusions  [org.clojure/clojure
                                                org.clojure/clojurescript]} ; lets you write test fixtures that are clear, concise, and easy to maintain (clojure.spec)
    ring/ring-mock               {:mvn/version "0.4.0"}                     ; creating Ring request maps for testing purposes
    talltale/talltale            {:mvn/version "0.5.13"}}                   ; generates fake data, useful for prototyping or load testing

   :extra-paths ["dev/src" "local/src" "test" "test_resources"]
   :jvm-opts    ["-Dmb.run.mode=dev"
                 "-Dmb.field.filter.operators.enabled=true"
                 "-Dmb.test.env.setting=ABCDEFG"
                 "-Duser.timezone=UTC"
                 "-Dfile.encoding=UTF-8"
                 ;; Allow clojure goes fast tooling to work
                 "-Djdk.attach.allowAttachSelf"
                 "-Duser.language=en"
                 "-Duser.country=US"
                 ;; set the logging properties set in metabase.bootstrap. calling (dev) will load it but putting here to be sure
                 "-Dlog4j2.contextSelector=org.apache.logging.log4j.core.selector.BasicContextSelector"
                 "-Dclojure.tools.logging.factory=clojure.tools.logging.impl/log4j2-factory"
                 ;; If Clojure fails to start (e.g. because of a compilation error somewhere) print the error
                 ;; report/stacktrace to stderr rather than to a random EDN file in /tmp/
                 "-Dclojure.main.report=stderr"
                 ;; Exceptions that get thrown repeatedly are created without stacktraces as a performance
                 ;; optimization in newer Java versions. This makes debugging pretty hard when working on stuff
                 ;; locally -- prefer debuggability over performance for local dev work.
                 "-XX:-OmitStackTraceInFastThrow"
                 ;; prevent Java icon from randomly popping up in macOS dock
                 "-Djava.awt.headless=true"
                 ;; ignore options that aren't present in older versions of Java, like the one below:
                 "-XX:+IgnoreUnrecognizedVMOptions"
                 ;; include more details for debugging NPEs (Java 14+)
                 "-XX:+ShowCodeDetailsInExceptionMessages"]}

  ;; includes test code as source paths. Run tests with clojure -X:dev:test
  :test
  {:extra-paths ["test_config"]
   :exec-fn     metabase.test-runner/find-and-run-tests-cli
   :jvm-opts    ["-Dmb.run.mode=test"
                 "-Dmb.db.in.memory=true"
                 "-Dmb.jetty.join=false"
                 "-Dmb.field.filter.operators.enabled=true"
                 "-Dmb.api.key=test-api-key"
                 ;; Different port from normal `:dev` so you can run tests on a different server.
                 ;; TODO -- figure out how to do a random port like in the old project.clj?
                 "-Dmb.jetty.port=3001"]}

  ;; run the dev server with
  ;; clojure -M:run
  ;; clojure -M:run:drivers (include all drivers)
  ;; clojure -M:run:ee (include EE code)
  :run
  {:main-opts ["-m" "metabase.bootstrap"]
   :jvm-opts  ["-Dmb.run.mode=dev"
               "-Djava.awt.headless=true"]}                   ; prevent Java icon from randomly popping up in macOS dock

  ;; alias for CI-specific options.
  :ci
  {:jvm-opts ["-Xmx2g"
              ;; normally CircleCI sets `CI` as an env var, so this is mostly to replicate that locally. Hawk will not
              ;; print the progress bar in output when this is set. Progress bars aren't very CI friendly
              "-Dci=TRUE"]}

  ;; include EE source code.
  :ee
  {:extra-paths ["enterprise/backend/src"]}

  ;; Include EE tests.
  ;; for EE dev:   `clojure -X:dev:ee:ee-dev`
  ;; for EE tests: `clojure -X:dev:ee:ee-dev:test`
  :ee-dev
  {:extra-paths ["enterprise/backend/test"]}

  ;; these aliases exist for symmetry with the ee aliases. Empty for now.
  :oss
  {}

  :oss-dev
  {}

  ;; Generate BE documentation with
  ;; clojure -M:marginalia
  :marginalia
  {:extra-deps
   {com.github.tsmacdonald/marginalia {:mvn/version "0.9.2"}}
   :main-opts ["-m" "marginalia.main" "-n" "Metabase" "-d" "backend-docs" "-D"
               "The simplest, fastest way to get business intelligence and analytics to everyone in your company 😋"
               "dev" "src" "enterprise/backend/src"]}

  ;; Generate a single file's docs with
  ;;   clojure -M:marginalia/one src/metabase/some/namespace.clj
  ;; which creates `backend-docs/metabase.some.namespace.html`
  :marginalia/one
  {:extra-deps
   {com.github.tsmacdonald/marginalia {:mvn/version "0.9.2"}}
   :main-opts ["-m" "marginalia.main" "-m" "-n" "Metabase" "-d" "backend-docs" "-D"
               "The simplest, fastest way to get business intelligence and analytics to everyone in your company 😋"]}

  ;; Find outdated versions of dependencies. Run with `clojure -M:outdated`
  :outdated {;; Note that it is `:deps`, not `:extra-deps`
             :deps {com.github.liquidz/antq {:mvn/version "RELEASE"}}
             :main-opts ["-m" "antq.core"]}

  :cljs
  {:extra-paths ["test"]
   :extra-deps
   {binaryage/devtools                 {:mvn/version "1.0.7"}
    cider/cider-nrepl                  {:mvn/version "0.45.0"}
    cider/piggieback                   {:mvn/version "0.5.3"}
    cljs-bean/cljs-bean                {:mvn/version "1.9.0"}
    com.lambdaisland/glogi             {:mvn/version "1.3.169"}
    io.github.metabase/hawk            {:git/url "https://github.com/metabase/hawk"
                                        :git/sha "59cba703e757bd94c0cc698dbf5338bf36276991"}
    org.clojars.mmb90/cljs-cache       {:mvn/version "0.1.4"}
    refactor-nrepl/refactor-nrepl      {:mvn/version "3.9.1"}
    thheller/shadow-cljs               {:mvn/version "2.27.4"}}}

  ;; for local dev -- include the drivers locally with :dev:drivers
  :drivers
  {:extra-deps
   {metabase/driver-modules {:local/root "modules/drivers"}}}

  ;; for local dev: include drivers as well as their tests.
  ;;
  ;;    clojure -X:dev:drivers:drivers-dev:test
  ;;
  ;; or
  ;;
  ;;    clojure -X:dev:ee:ee-dev:drivers:drivers-dev:test (for EE)
  :drivers-dev
  {:extra-paths
   ["modules/drivers/athena/test"
    "modules/drivers/bigquery-cloud-sdk/test"
    "modules/drivers/druid/test"
    "modules/drivers/googleanalytics/test"
    "modules/drivers/mongo/test"
    "modules/drivers/oracle/test"
    "modules/drivers/presto-jdbc/test"
    "modules/drivers/redshift/test"
    "modules/drivers/snowflake/test"
    "modules/drivers/sparksql/test"
    "modules/drivers/sqlite/test"
    "modules/drivers/sqlserver/test"
    "modules/drivers/vertica/test"]}

;;; Linters

  ;; clojure -M:ee:drivers:check
  ;;
  ;; checks that all the namespaces we actually ship can be compiled, without any dependencies that we don't
  ;; ship (such as `:dev` dependencies). See #27009 for more context.
  :check
  {:extra-deps {athos/clj-check {:git/url "https://github.com/athos/clj-check.git"
                                 :sha     "518d5a1cbfcd7c952f548e6dbfcb9a4a5faf9062"}}
   :main-opts  ["-m" "clj-check.check"
                "src"
                "enterprise/backend/src"
                "modules/drivers/athena/src"
                "modules/drivers/bigquery-cloud-sdk/src"
                "modules/drivers/druid/src"
                "modules/drivers/googleanalytics/src"
                "modules/drivers/mongo/src"
                "modules/drivers/oracle/src"
                "modules/drivers/presto-jdbc/src"
                "modules/drivers/redshift/src"
                "modules/drivers/snowflake/src"
                "modules/drivers/sparksql/src"
                "modules/drivers/sqlite/src"
                "modules/drivers/sqlserver/src"
                "modules/drivers/vertica/src"]
   :jvm-opts   ["-Dclojure.main.report=stderr"]}

  ;; clojure -X:dev:ee:ee-dev:drivers:drivers-dev:test:eastwood
  :eastwood
  {:exec-fn   metabase.linters.eastwood/eastwood
   :exec-args {;; manually specify the source paths for the time being (exclude test paths) until we fix Eastwood
               ;; errors in the test paths (once PR #17193 is merged)
               :source-paths    ["src"
                                 "enterprise/backend/src"
                                 "modules/drivers/athena/src"
                                 "modules/drivers/bigquery-cloud-sdk/src"
                                 "modules/drivers/druid/src"
                                 "modules/drivers/googleanalytics/src"
                                 "modules/drivers/mongo/src"
                                 "modules/drivers/oracle/src"
                                 "modules/drivers/presto-jdbc/src"
                                 "modules/drivers/redshift/src"
                                 "modules/drivers/snowflake/src"
                                 "modules/drivers/sparksql/src"
                                 "modules/drivers/sqlite/src"
                                 "modules/drivers/sqlserver/src"
                                 "modules/drivers/vertica/src"]
               :exclude-linters [ ;; Turn this off temporarily until we finish removing
                                 ;; self-deprecated functions & macros
                                 :deprecations
                                 ;; this has a fit in libs that use Potemkin `import-vars` such
                                 ;; as `java-time`
                                 :implicit-dependencies
                                 ;; too many false positives for now
                                 :unused-ret-vals
                                 ;; Kondo lints this for us anyway, and this isn't as easy to configure.
                                 :wrong-arity]
               ;; Snowplow has a dynamic dependency on okhttp3.CookieJar that we
               ;; don't use but eastwood detects. This is discussed in Slack here
               ;; https://clojurians.slack.com/archives/C03S1KBA2/p1667925853699669
               ;; An issue has been filed here https://github.com/jonase/eastwood/issues/444
               ;; and a simple reproduction repo can be found here https://github.com/metabase/snowplow-eastwood-issue
               :exclude-namespaces [metabase.analytics.snowplow]}}

  ;; clojure -T:whitespace-linter
  :whitespace-linter
  {:deps       {com.github.camsaul/whitespace-linter {:sha "e35bc252ccf5cc74f7d543ef95ad8a3e5131f25b"}}
   :ns-default whitespace-linter
   :exec-fn    whitespace-linter/lint
   :exec-args  {:paths            ["./.dir-locals.el"
                                   "./deps.edn"
                                   "./package.json"
                                   "./shadow-cljs.edn"
                                   ".clj-kondo"
                                   ".github"
                                   "bin"
                                   "enterprise"
                                   "frontend"
                                   "resources"
                                   "src"
                                   "test"]
                :include-patterns ["\\.clj.?$"
                                   "\\.edn$"
                                   "\\.el$"
                                   "\\.html$"
                                   "\\.json$"
                                   "\\.jsx?$"
                                   "\\.sh$"
                                   "\\.yaml$"
                                   "\\.yml$"]
                :exclude-patterns [".clj-kondo/better-cond/.*"
                                   ".clj-kondo/com.github.seancorfield/.*"
                                   "resources/i18n/.*\\.edn$"
                                   "resources/frontend_client"
                                   "resources/frontend_shared"
                                   "resources/html-entities.edn"
                                   "frontend/src/cljs"
                                   "frontend/test/metabase/lib/urls\\.unit\\.spec\\.js$"
                                   "frontend/test/metabase/lib/formatting\\.unit\\.spec\\.js$"
                                   "src/metabase/shared/util/currency\\.cljc$"
                                   "#.+#$"
                                   "\\.transit\\.json$"]}}

  ;; clojure -X:dev:ee:ee-dev:test:cloverage
  :cloverage
  {:exec-fn   metabase.cloverage-runner/run-project
   :exec-args {:fail-threshold 69
               :codecov?       true
               ;; don't instrument logging forms, since they won't get executed as part of tests anyway
               ;; log calls expand to these
               :exclude-call
               [clojure.tools.logging/logf
                clojure.tools.logging/logp
                metabase.util.log/logf
                metabase.util.log/logp]

               :src-ns-path
               ["src" "enterprise/backend/src"]

               :test-ns-path
               ["test" "enterprise/backend/test"]

               :ns-regex
               ["^metabase\\..*" "^metabase-enterprise\\..*"]

               ;; don't instrument Postgres/MySQL driver namespaces, because we don't current run tests for them
               ;; as part of recording test coverage, which means they can give us false positives.
               ;;
               ;; regex literals aren't allowed in EDN. We parse them in `./test/cloverage.clj`
               :ns-exclude-regex
               ["metabase\\.driver\\.mysql.*"
                "metabase\\.driver\\.postgres.*"]}
   ;; different port from `:test` so you can run it at the same time as `:test`.
   :jvm-opts ["-Dmb.jetty.port=3002"
              ;; default heap size is 1GB, we were getting OOM on CI so we need to bump this
              "-Xmx4g"]}

  ;; clj -T:cljfmt fix '{:paths ["src/metabase/events/view_log.clj"]}'
  :cljfmt
  {:deps       {io.github.weavejester/cljfmt {:git/tag "0.11.2", :git/sha "fb26b22f569724b05c93eb2502592dfc2de898c3"}}
   :ns-default cljfmt.tool}

;;; building Uberjar, build and release scripts

  :build
  {:extra-paths
   ["bin/build/resources"
    "bin/build/src"]

   :extra-deps
   {com.bhauman/spell-spec            {:mvn/version "0.1.2"}                    ; used to find misspellings in YAML files
    com.github.seancorfield/depstar   {:mvn/version "2.1.303"}
    expound/expound                   {:mvn/version "0.9.0"}                    ; better output of spec validation errors
    io.github.borkdude/grasp          {:mvn/version "0.1.4"}
    io.github.clojure/tools.build     {:mvn/version "0.9.6"}
    org.clojure/data.xml              {:mvn/version "0.2.0-alpha8"}
    org.clojure/tools.deps.alpha      {:mvn/version "0.15.1254"}
    org.fedorahosted.tennera/jgettext {:mvn/version "0.15.1"}}

   :jvm-opts
   ["-Dclojure.main.report=stderr"
    "-XX:-OmitStackTraceInFastThrow"
    "-XX:+IgnoreUnrecognizedVMOptions"
    "-XX:+ShowCodeDetailsInExceptionMessages"]}

  ;; Build everything:
  ;;
  ;;    clojure -X:drivers:build:build/all
  ;;    clojure -X:drivers:build:build/all :edition :ee
  ;;
  ;; Run just a specific build step:
  ;;
  ;;    clojure -X:drivers:build:build/all :steps '[:version]'
  ;;
  ;; the various steps available are:
  ;;
  ;;    :version :translations :frontend :licenses :drivers :uberjar
  :build/all
  {:exec-fn build/build-cli}

  ;; build just the uberjar (without i18n, drivers, etc.)
  ;;
  ;; clojure -X:build:build/uberjar
  ;; clojure -X:build:build/uberjar :edition :ee
  :build/uberjar
  {:exec-fn build.uberjar/uberjar}

  ;; List dependencies without a license. Not really 100% sure why this needs `:dev`
  ;;
  ;; clojure -X:build:build/list-without-license
  :build/list-without-license
  {:exec-fn build/list-without-license}

  ;; Build a single driver.
  ;;
  ;;   clojure -X:build:drivers:build/driver :driver :sqlserver :edition :oss
  :build/driver
  {:exec-fn build-driver/build-driver}

  ;; Build all of the drivers.
  ;;
  ;;    clojure -X:build:drivers:build/drivers
  ;;    clojure -X:build:drivers:build/drivers :edition :ee
  :build/drivers
  {:exec-fn build-drivers/build-drivers}

  ;; Verify that a driver JAR looks correct.
  ;;
  ;;    clojure -X:build:build/verify-driver :driver :mongo
  :build/verify-driver
  {:exec-fn verify-driver/verify-driver}

  ;; Build i18n artifacts.
  ;;
  ;;    clojure -X:build:build/i18n
  :build/i18n
  {:exec-fn i18n.create-artifacts/create-all-artifacts!}

  ;; extra paths and deps for working on build scripts, or running the tests.
  :build-dev
  {:extra-paths ["bin/build/test"]

   :extra-deps
   {org.clojure/data.json {:mvn/version "2.4.0"}}}

  ;;; Run tests for the build scripts:
  ;;;
  ;;; clj -X:dev:drivers:build:build-dev:build-test
  :build-test
  {:exec-fn   mb.hawk.core/find-and-run-tests-cli
   :exec-args {:only ["bin/build/test"]}}


;;; Other misc convenience aliases

  ;; Profile Metabase start time with clojure -M:profile
  :profile
  {:main-opts ["-m" "metabase.core" "profile"]
   :jvm-opts  ["-XX:+CITime" ; print time spent in JIT compiler
               "-Xlog:gc"]}

  ;; get the H2 shell with clojure -X:dev:h2
  :h2
  {:extra-paths ["dev/src"]
   :exec-fn     dev.h2-shell/shell
   :java-opts   ["-Dfile.encoding=UTF-8"]}

  :generate-automagic-dashboards-pot
  {:main-opts ["-m" "metabase.automagic-dashboards.dashboard-templates"]}

  ;; Start a Network REPL (nrepl) that you can connect your editor to.
  ;;
  ;; clojure -M:dev:nrepl (etc.)
  :nrepl
  {:extra-deps {nrepl/nrepl {:mvn/version "1.1.0"}}
   :main-opts  ["-m" "nrepl.cmdline" "-p" "50605"]}

  ;; - start a Socket REPL on port 50505 that you can connect your editor to:
  :socket {:jvm-opts ["-Dclojure.server.repl={:address,\"0.0.0.0\",:port,50505,:accept,clojure.core.server/repl}"]}

  ;; Liquibase CLI:
  ;;
  ;;    clojure -M:liquibase <command>
  ;;
  ;; e.g.
  ;;
  ;;    clojure -M:liquibase dbDoc target/liquibase
  :liquibase
  {:extra-deps  {ch.qos.logback/logback-classic {:mvn/version "1.4.11"}}
   :extra-paths ["dev/src"]
   :main-opts   ["-m" "dev.liquibase"]}

  ;; the following aliases are convenience for running tests against certain parts of the codebase.
  ;;
  ;;   clj -X:dev:ee:ee-dev:test:test/mbql

  ;; run tests against MLv2. Very fast since this is almost all ^:parallel
  :test/mlv2
  {:exec-args {:only ["test/metabase/lib"]}}

  ;; test the Query Processor
  ;;
  ;;    clj -X:dev:ee:ee-dev:test:test/qp
  :test/qp
  {:exec-args {:only ["test/metadata/driver"
                      "test/metabase/query_processor"
                      "test/metabase/query_processor_test"
                      metabase-enterprise.advanced-permissions.models.permissions.block-permissions-test
                      metabase-enterprise.sandbox.query-processor.middleware.row-level-restrictions-test]}}

  ;; test all MBQL related stuff: MLv2, the legacy shared `metabase.mbql` code, and the QP
  ;;
  ;;    clj -X:dev:ee:ee-dev:test:test/mbql
  :test/mbql
  {:exec-args {:only ["test/mbql"
                      "test/metabase/lib"
                      "test/metadata/driver"
                      "test/metabase/query_processor"
                      "test/metabase/query_processor_test"
                      metabase-enterprise.advanced-permissions.models.permissions.block-permissions-test
                      metabase-enterprise.sandbox.query-processor.middleware.row-level-restrictions-test]}}}}



  ;; TODO -- consider creating an alias that includes the `./bin` build-drivers & release code as well so we can work
  ;; on them all from a single REPL process.