From 37bd8a049a0bcc4f8c8392257f47a7df7cccb8c1 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Sun, 24 Nov 2024 00:42:33 +0200 Subject: [PATCH] Run tests on CI --- .github/workflows/images.yml | 27 +++++++++++++++++++++++++++ deps.edn | 14 +++++++++++--- src/flamebin/config.clj | 8 +++++--- src/flamebin/infra/metrics.clj | 17 +++++++++-------- test/flamebin/test_runner.clj | 8 ++++++++ 5 files changed, 60 insertions(+), 14 deletions(-) create mode 100644 test/flamebin/test_runner.clj diff --git a/.github/workflows/images.yml b/.github/workflows/images.yml index 73a6c19..4a590ab 100644 --- a/.github/workflows/images.yml +++ b/.github/workflows/images.yml @@ -13,6 +13,33 @@ env: # There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. jobs: + tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + java-version: '23' + + - uses: DeLaGuardo/setup-clojure@13.0 + with: + cli: latest + + - name: Cache Clojure dependencies + uses: actions/cache@v3 + with: + path: | + ~/.m2/repository + ~/.gitlibs + ~/.deps.clj + key: cljdeps-${{ hashFiles('deps.edn') }} + restore-keys: cljdeps- + + - name: Run tests + run: clojure -X:test + + build-and-push-image: runs-on: ubuntu-latest # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. diff --git a/deps.edn b/deps.edn index 3186aa3..c6eed26 100644 --- a/deps.edn +++ b/deps.edn @@ -20,11 +20,19 @@ com.grammarly/omniconf {:mvn/version "0.5.2"} com.taoensso/nippy {:mvn/version "3.4.2"} functionalbytes/mount-lite {:mvn/version "2.3.1"} - nrepl/nrepl {:mvn/version "1.3.0"}} + nrepl/nrepl {:mvn/version "1.3.0"} + + org.clj-commons/hickory {:mvn/version "0.7.5"} + nubank/matcher-combinators {:mvn/version "3.9.1"}} :aliases {:build {:deps {io.github.clojure/tools.build {:mvn/version "0.10.0"}} - :ns-default build}}} + :ns-default build} + + :test {:extra-deps {io.github.cognitect-labs/test-runner {:git/tag "v0.5.1" + :git/sha "dfb30dd"}} + :exec-fn flamebin.test-runner/test + :jvm-opts ["-Djdk.attach.allowAttachSelf"]}}} #_(find-dep metosin/reitit-core) -#_(deps functionalbytes/mount-lite "2.3.1") +#_(deps nubank/matcher-combinators {:mvn/version "3.9.1"}) diff --git a/src/flamebin/config.clj b/src/flamebin/config.clj index 79a9c9f..0c712c3 100644 --- a/src/flamebin/config.clj +++ b/src/flamebin/config.clj @@ -2,6 +2,7 @@ (:require [clojure.java.io :as io] [clojure.string :as str] [mount.lite :as mount] + [mount.extensions.autostart :as mount.auto] [omniconf.core :as cfg] [taoensso.timbre :as log] [taoensso.timbre.tools.logging])) @@ -79,13 +80,14 @@ :port {:type :number :required #(cfg/get :repl :enabled)}}}}) +(def ^:dynamic *silent* false) + (defn init-config [] (cfg/populate-from-env) - (cfg/verify)) + (cfg/verify :silent *silent*)) (mount/defstate config - :start (do (init-config) (fn config-getter [& path] (apply cfg/get path)))) - + :start (do (init-config) cfg/get)) #_(mount/start #'config) ;;;; Misc initialization diff --git a/src/flamebin/infra/metrics.clj b/src/flamebin/infra/metrics.clj index 40a1545..ee0d469 100644 --- a/src/flamebin/infra/metrics.clj +++ b/src/flamebin/infra/metrics.clj @@ -3,14 +3,15 @@ (:import (io.micrometer.core.instrument DistributionSummary Metrics Timer) (io.micrometer.prometheusmetrics PrometheusConfig PrometheusMeterRegistry))) -(mount/defstate registry - :start (let [reg (PrometheusMeterRegistry. PrometheusConfig/DEFAULT)] - (.bindTo (io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics.) reg) - (.bindTo (io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics.) reg) - (.bindTo (io.micrometer.core.instrument.binder.jvm.JvmGcMetrics.) reg) - (.bindTo (io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics.) reg) - (.add (Metrics/globalRegistry) reg) - reg)) +(defonce registry + (delay + (let [reg (PrometheusMeterRegistry. PrometheusConfig/DEFAULT)] + (.bindTo (io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics.) reg) + (.bindTo (io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics.) reg) + (.bindTo (io.micrometer.core.instrument.binder.jvm.JvmGcMetrics.) reg) + (.bindTo (io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics.) reg) + (.add (Metrics/globalRegistry) reg) + reg))) (defn scrape [] (.scrape @registry)) diff --git a/test/flamebin/test_runner.clj b/test/flamebin/test_runner.clj new file mode 100644 index 0000000..db2f7f6 --- /dev/null +++ b/test/flamebin/test_runner.clj @@ -0,0 +1,8 @@ +(ns flamebin.test-runner + (:require cognitect.test-runner.api + mount.lite)) + +(defn test [opts] + (cognitect.test-runner.api/test opts) + (mount.lite/stop) + (shutdown-agents))