Skip to content
Snippets Groups Projects
deps.edn 42.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • Cam Saul's avatar
    Cam Saul committed
    ;; -*- 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
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :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.5.20"}             ; 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
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :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
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :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)
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :exclusions  [org.clojure/clojure]}
    
      com.clearspring.analytics/stream          {:mvn/version "2.9.8"               ; Various sketching algorithms
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :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.6.1126"}           ; Honey SQL 2. SQL generation from Clojure data maps
    
      com.github.seancorfield/next.jdbc         {:mvn/version "1.3.925" }           ; Talk to JDBC DBs
    
      com.github.steffan-westcott/clj-otel-api  {:mvn/version "0.2.6"}              ; 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 "33.1.0-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.17.0"}             ; JSON processor used by snowplow-java-tracker
      com.fasterxml.woodstox/woodstox-core      {:mvn/version "6.6.1"}              ; trans dep of commons-codec
    
      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
    
                                                {: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.1"}             ; 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
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :exclusions  [commons-beanutils/commons-beanutils
                                                               commons-digester/commons-digester
                                                               commons-logging/commons-logging]}
    
      compojure/compojure                       {:mvn/version "1.7.1"               ; HTTP Routing library built on Ring
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :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
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :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
    
      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.538"}
      io.github.eerohele/pp                     {:git/tag "2024-01-04.60"           ; super fast pretty-printing library
                                                 :git/sha "a428751"
    
                                                 :git/url "https://github.com/eerohele/pp"}
    
    Tim Macdonald's avatar
    Tim Macdonald committed
      io.github.metabase/macaw                  {:mvn/version "0.1.24"}             ; Parse native SQL queries
    
      ;; 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" #_ "must be 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
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :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
    
    bryan's avatar
    bryan committed
      metabase/saml20-clj                       {:mvn/version "2.2.7.170"
                                                 :exclusions [                      ; EE SAML integration TODO: bump version when we release the library
                                                              org.bouncycastle/bcpkix-jdk15on
    
                                                              org.bouncycastle/bcprov-jdk15on
                                                              org.bouncycastle/bcpkix-jdk18on
                                                              org.bouncycastle/bcprov-jdk18on]}
    
    Cam Saul's avatar
    Cam Saul committed
      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.1.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.16.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
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :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.20240207"} ; Java implementation of the JQ json query language
      org.apache.commons/commons-compress       {:mvn/version "1.26.1"}             ; 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.23.1"}             ; apache logging framework
      org.apache.logging.log4j/log4j-api        {:mvn/version "2.23.1"}             ; add compatibility with log4j 1.2
      org.apache.logging.log4j/log4j-core       {:mvn/version "2.23.1"}             ; apache logging framework
      org.apache.logging.log4j/log4j-jcl        {:mvn/version "2.23.1"}             ; allows the commons-logging API to work with log4j 2
      org.apache.logging.log4j/log4j-jul        {:mvn/version "2.23.1"}             ; java.util.logging (JUL) -> Log4j2 adapter
    
      org.apache.logging.log4j/log4j-slf4j2-impl
    
                                                {:mvn/version "2.23.1"}             ; allows the slf4j2 API to work with log4j 2
    
      org.apache.logging.log4j/log4j-layout-template-json
    
                                                {:mvn/version "2.23.1"}             ; 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"
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :exclusions  [org.bouncycastle/bcpkix-jdk15on
                                                               org.bouncycastle/bcprov-jdk15on]}
    
      org.apache.sshd/sshd-core                 {:mvn/version "2.12.1"              ; 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.4"               ; Parse HTML into Clojure data structures
    
      org.clojars.pntblnk/clj-ldap              {:mvn/version "0.0.17"}             ; LDAP client
    
      org.clojure/clojure                       {:mvn/version "1.11.2"}
    
      org.clojure/core.async                    {:mvn/version "1.6.681"
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :exclusions  [org.clojure/tools.reader]}
    
      org.clojure/core.logic                    {:mvn/version "1.1.0"}              ; optimized pattern matching library for Clojure
      org.clojure/core.match                    {:mvn/version "1.1.0"}
      org.clojure/core.memoize                  {:mvn/version "1.1.266"}            ; useful FIFO, LRU, etc. caching mechanisms
      org.clojure/data.csv                      {:mvn/version "1.1.0"}              ; CSV parsing / generation
    
      org.clojure/data.xml                      {:mvn/version "0.0.8"}              ; XML parsing / generation
    
      org.clojure/java.classpath                {:mvn/version "1.1.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.1.0"}              ; JMX bean library, for exporting diagnostic info
      org.clojure/math.combinatorics            {:mvn/version "0.3.0"}              ; combinatorics functions
      org.clojure/math.numeric-tower            {:mvn/version "0.1.0"}              ; math functions like `ceil`
      org.clojure/tools.cli                     {:mvn/version "1.1.230"}            ; command-line argument parsing
      org.clojure/tools.logging                 {:mvn/version "1.3.0"}              ; logging framework
      org.clojure/tools.macro                   {:mvn/version "0.2.0"}              ; local macros
      org.clojure/tools.namespace               {:mvn/version "1.5.0"}
      org.clojure/tools.reader                  {:mvn/version "1.4.1"}
      org.clojure/tools.trace                   {:mvn/version "0.8.0"}              ; function tracing
      ;; v. 12 of jetty-server triggers "a org/eclipse/jetty/io/EofException has been compiled by a more recent version of
      ;; the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions
      ;; up to 55.0"
      org.eclipse.jetty/jetty-server            {:mvn/version "11.0.20" #_"must be 11"} ; web server
    
      org.eclipse.jetty.websocket/websocket-jetty-server {:mvn/version "11.0.20"}   ; ring-jetty-adapter needs that
    
      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.26.0"              ; migration management (Java lib)
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :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.3"}             ; 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.12"}             ; abstraction for logging frameworks -- allows end user to plug in desired logging framework at deployment time
    
    Cam Saul's avatar
    Cam Saul committed
      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
    
    Cam Saul's avatar
    Cam Saul committed
                                                 :exclusions  [riddley/riddley]}
      pretty/pretty                             {:mvn/version "1.0.5"}              ; protocol for defining how custom types should be pretty printed
      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.12.0"}             ; HTTP abstraction
      ring/ring-jetty-adapter                   {:mvn/version "1.12.0"              ; Jetty adapter
    
                                                 :exclusions [org.eclipse.jetty/jetty-server
                                                              org.eclipse.jetty.websocket/websocket-jetty-server]}
    
      ring/ring-json                            {:mvn/version "0.5.1"}              ; Ring middleware for reading/writing JSON automatically
    
    Cam Saul's avatar
    Cam Saul committed
      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
    
    
    Cam Saul's avatar
    Cam Saul committed
     ;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     ;; !!         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
    
    Cam Saul's avatar
    Cam Saul committed
     ;; 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/"}}
    
    Cam Saul's avatar
    Cam Saul committed
    
    
    Cam Saul's avatar
    Cam Saul committed
     :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.2.0"}                     ; Enables local profiling and heat map generation
    
        com.clojure-goes-fast/clj-memory-meter
                                     {:mvn/version "0.3.0"}                     ; Enables easy memory measurement
    
        clj-http-fake/clj-http-fake  {:mvn/version "1.0.4"
    
                                      :exclusions  [slingshot/slingshot]}
    
        clj-kondo/clj-kondo          {:mvn/version "2024.03.13"}                ; 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.52.2"}                    ; 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      {:git/url "https://github.com/metabase/hawk"
                                      :git/sha "490c9b04fbf5861dbd47c0c5281dad2d113bd285"}
    
        jonase/eastwood              {:mvn/version "1.4.2"                      ; inspects namespaces and reports possible problems using tools.analyzer
    
                                      :exclusions
                                      [org.ow2.asm/asm-all]}
    
        criterium/criterium          {:mvn/version "0.4.6"}                     ; benchmarking library
    
        lambdaisland/deep-diff2      {:mvn/version "2.11.216"}                  ; way better diffs
    
    Cam Saul's avatar
    Cam Saul committed
        methodical/methodical        {:mvn/version "0.15.1"}                    ; drop-in replacements for Clojure multimethods and adds several advanced features
    
        org.clojure/algo.generic     {:mvn/version "1.0.0"}
    
        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.14"}}                   ; generates fake data, useful for prototyping or load testing
    
       :extra-paths ["dev/src" "local/src" "test" "test_resources"]
    
    Cam Saul's avatar
    Cam Saul committed
       :jvm-opts    ["-Dmb.run.mode=dev"
                     "-Dmb.field.filter.operators.enabled=true"
                     "-Dmb.test.env.setting=ABCDEFG"
                     "-Duser.timezone=UTC"
    
                     "-Dfile.encoding=UTF-8"
    
    Cam Saul's avatar
    Cam Saul committed
                     "-Duser.language=en"
    
                     "-Duser.country=US"
    
                     ;; Allow clojure goes fast tooling to work
                     "-Djdk.attach.allowAttachSelf"
                     ;; This will suppress the warning about dynamically loaded agents (like clj-memory-meter)
                     "-XX:+EnableDynamicAgentLoading"
    
    dpsutton's avatar
    dpsutton committed
                     ;; 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"
    
    Cam Saul's avatar
    Cam Saul committed
                     ;; 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"]}
    
    Cam Saul's avatar
    Cam Saul committed
    
      ;; 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
    
    Cam Saul's avatar
    Cam Saul committed
       :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"]
    
                   "-Djava.awt.headless=true"]}                   ; prevent Java icon from randomly popping up in macOS dock
    
    Cam Saul's avatar
    Cam Saul committed
    
      ;; 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
    
    Cam Saul's avatar
    Cam Saul committed
                  "-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`
    
    Cam Saul's avatar
    Cam Saul committed
      :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 😋"
    
      ;; 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" "--skip=github-action"]}
    
       {binaryage/devtools                 {:mvn/version "1.0.7"}
    
        cider/cider-nrepl                  {:mvn/version "0.47.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 "490c9b04fbf5861dbd47c0c5281dad2d113bd285"}
    
        org.clojars.mmb90/cljs-cache       {:mvn/version "0.1.4"}
    
        refactor-nrepl/refactor-nrepl      {:mvn/version "3.10.0"}
        thheller/shadow-cljs               {:mvn/version "2.27.5"}}}
    
    Cam Saul's avatar
    Cam Saul committed
      ;; 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
    
    Cam Saul's avatar
    Cam Saul committed
       ["modules/drivers/athena/test"
    
        "modules/drivers/bigquery-cloud-sdk/test"
    
    Cam Saul's avatar
    Cam Saul committed
        "modules/drivers/druid/test"
    
    Cam Saul's avatar
    Cam Saul committed
        "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.
    
    Cam Saul's avatar
    Cam Saul committed
      :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/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
    
    Cam Saul's avatar
    Cam Saul committed
      :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"
    
    Cam Saul's avatar
    Cam Saul committed
                                     "modules/drivers/athena/src"
    
                                     "modules/drivers/bigquery-cloud-sdk/src"
    
    Cam Saul's avatar
    Cam Saul committed
                                     "modules/drivers/druid/src"
    
    Cam Saul's avatar
    Cam Saul committed
                                     "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
    
    Cam Saul's avatar
    Cam Saul committed
                                     :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]}}
    
    Cam Saul's avatar
    Cam Saul committed
      ;; clojure -T:whitespace-linter
      :whitespace-linter
    
      {:deps       {com.github.camsaul/whitespace-linter {:sha "e35bc252ccf5cc74f7d543ef95ad8a3e5131f25b"}}
    
    Cam Saul's avatar
    Cam Saul committed
       :ns-default whitespace-linter
    
       :exec-fn    whitespace-linter/lint
    
    Cam Saul's avatar
    Cam Saul committed
       :exec-args  {:paths            ["./.dir-locals.el"
                                       "./deps.edn"
                                       "./package.json"
                                       "./shadow-cljs.edn"
    
    Cam Saul's avatar
    Cam Saul committed
                                       ".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$"
    
    Cam Saul's avatar
    Cam Saul committed
                                       "resources/frontend_client"
                                       "resources/frontend_shared"
    
                                       "resources/html-entities.edn"
    
                                       "resources/openapi/.*"
    
    Cam Saul's avatar
    Cam Saul committed
                                       "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$"]}}
    
    Cam Saul's avatar
    Cam Saul committed
      ;; clojure -X:dev:ee:ee-dev:test:cloverage
      :cloverage
    
      {:exec-fn   metabase.cloverage-runner/run-project
    
    Cam Saul's avatar
    Cam Saul committed
       :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]
    
    Cam Saul's avatar
    Cam Saul committed
    
                   :test-ns-path
    
    Cam Saul's avatar
    Cam Saul committed
    
                   :ns-regex
    
    Cam Saul's avatar
    Cam Saul committed
                   ["^metabase\\..*" "^metabase-enterprise\\..*"]
    
    Cam Saul's avatar
    Cam Saul committed
    
                   ;; 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
    
    Cam Saul's avatar
    Cam Saul committed
                   ["metabase\\.driver\\.mysql.*"
                    "metabase\\.driver\\.postgres.*"]}
    
    Cam Saul's avatar
    Cam Saul committed
       ;; 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
    
      {: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.10.0"}
    
        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.5.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"]}}
    
    
    Cam Saul's avatar
    Cam Saul committed
    
    ;;; 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"]}
    
    Tim Macdonald's avatar
    Tim Macdonald committed
      ;; get the H2 shell with clojure -X:dev:h2
    
    Cam Saul's avatar
    Cam Saul committed
      :h2
    
      {:extra-paths ["dev/src"]
       :exec-fn     dev.h2-shell/shell
       :java-opts   ["-Dfile.encoding=UTF-8"]}
    
    Cam Saul's avatar
    Cam Saul committed
    
      :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.1"}}
    
       :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.5.3"}}
    
       :extra-paths ["dev/src"]
    
    Cam Saul's avatar
    Cam Saul committed
       :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
    
    Cam Saul's avatar
    Cam Saul committed
      :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
    
    Cam Saul's avatar
    Cam Saul committed
                          metabase-enterprise.sandbox.query-processor.middleware.row-level-restrictions-test]}}
    
    
      ;; test all MBQL related stuff: MLv2, the legacy shared `metabase.legacy-mbql` code, and the QP
    
      ;;
      ;;    clj -X:dev:ee:ee-dev:test:test/mbql
    
    Cam Saul's avatar
    Cam Saul committed
      :test/mbql
    
    Cam Saul's avatar
    Cam Saul committed
                          "test/metabase/lib"
                          "test/metadata/driver"
                          "test/metabase/query_processor"
                          "test/metabase/query_processor_test"
    
                          metabase-enterprise.advanced-permissions.models.permissions.block-permissions-test
    
    Cam Saul's avatar
    Cam Saul committed
                          metabase-enterprise.sandbox.query-processor.middleware.row-level-restrictions-test]}}}}
    
    
    
    Cam Saul's avatar
    Cam Saul committed
      ;; 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.