From 55fc72cd2ee55322a7da952ba63349e06bef0103 Mon Sep 17 00:00:00 2001 From: zam <mirco.zachmann@meissa.de> Date: Wed, 19 Mar 2025 15:59:46 +0100 Subject: [PATCH] [skip ci] Refactoring use c4k-common 10.0.0 --- package.json | 12 +-- project.clj | 10 +-- shadow-cljs.edn | 2 +- src/main/clj/dda/c4k_website/uberjar.clj | 5 +- src/main/cljc/dda/c4k_website/core.cljc | 96 +++++++--------------- src/main/cljc/dda/c4k_website/website.cljc | 72 ++++++++++------ 6 files changed, 93 insertions(+), 104 deletions(-) diff --git a/package.json b/package.json index 2ecbc27..9ab2fdd 100644 --- a/package.json +++ b/package.json @@ -23,11 +23,13 @@ "url": "https://gitlab.com/domaindrivenarchitecture/c4k-website/issues" }, "dependencies": { - "js-base64": "^3.7.2", - "js-yaml": "^4.0.0" + "js-base64": "^3.7.7", + "js-yaml": "^4.1.0" }, "devDependencies": { - "shadow-cljs": "^2.27.4", - "source-map-support": "^0.5.21" + "bufferutil": "^4.0.9", + "shadow-cljs": "^2.28.21", + "source-map-support": "^0.5.21", + "utf-8-validate": "^5.0.10" } -} \ No newline at end of file +} diff --git a/project.clj b/project.clj index 2fd67f3..cdbcba9 100644 --- a/project.clj +++ b/project.clj @@ -3,9 +3,9 @@ :url "https://domaindrivenarchitecture.org" :license {:name "Apache License, Version 2.0" :url "https://www.apache.org/licenses/LICENSE-2.0.html"} - :dependencies [[org.clojure/clojure "1.11.3"] - [org.clojure/tools.reader "1.4.2"] - [org.domaindrivenarchitecture/c4k-common-clj "6.2.3"] + :dependencies [[org.clojure/clojure "1.12.0"] + [org.clojure/tools.reader "1.5.2"] + [org.domaindrivenarchitecture/c4k-common-clj "10.0.0"] [hickory "0.7.1" :exclusions [viebel/codox-klipse-theme]]] :target-path "target/%s/" :source-paths ["src/main/cljc" @@ -23,9 +23,9 @@ :main dda.c4k-website.uberjar :uberjar-name "c4k-website-standalone.jar" :dependencies [[org.clojure/tools.cli "1.1.230"] - [ch.qos.logback/logback-classic "1.5.6" + [ch.qos.logback/logback-classic "1.5.18" :exclusions [com.sun.mail/javax.mail]] - [org.slf4j/jcl-over-slf4j "2.0.13"] + [org.slf4j/jcl-over-slf4j "2.0.17"] [com.github.clj-easy/graal-build-time "1.0.5"]]}} :release-tasks [["test"] ["vcs" "assert-committed"] diff --git a/shadow-cljs.edn b/shadow-cljs.edn index d91c3af..fc89d18 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -4,7 +4,7 @@ "src/test/cljc" "src/test/cljs" "src/test/resources"] - :dependencies [[org.domaindrivenarchitecture/c4k-common-cljs "6.2.3"] + :dependencies [[org.domaindrivenarchitecture/c4k-common-cljs "10.0.0"] [hickory "0.7.1"]] :builds {:frontend {:target :browser :modules {:main {:init-fn dda.c4k-website.browser/init}} diff --git a/src/main/clj/dda/c4k_website/uberjar.clj b/src/main/clj/dda/c4k_website/uberjar.clj index d1800e5..3053b90 100644 --- a/src/main/clj/dda/c4k_website/uberjar.clj +++ b/src/main/clj/dda/c4k_website/uberjar.clj @@ -6,10 +6,11 @@ (defn -main [& cmd-args] - (uberjar/main-common + (uberjar/main-cm "c4k-website" core/config? core/auth? core/config-defaults - core/k8s-objects + core/config-objects + core/auth-objects cmd-args)) diff --git a/src/main/cljc/dda/c4k_website/core.cljc b/src/main/cljc/dda/c4k_website/core.cljc index f9122a1..52b5176 100644 --- a/src/main/cljc/dda/c4k_website/core.cljc +++ b/src/main/cljc/dda/c4k_website/core.cljc @@ -3,21 +3,18 @@ [clojure.spec.alpha :as s] #?(:clj [orchestra.core :refer [defn-spec]] :cljs [orchestra.core :refer-macros [defn-spec]]) - [dda.c4k-common.yaml :as yaml] [dda.c4k-common.common :as cm] - [dda.c4k-common.predicate :as cp] [dda.c4k-common.monitoring :as mon] [dda.c4k-common.namespace :as ns] - [dda.c4k-common.ingress :as ing] - [dda.c4k-website.website :as web])) + [dda.c4k-common.predicate :as cp] + [dda.c4k-website.website :as web] + [dda.c4k-common.yaml :as yaml])) (s/def ::mon-cfg ::mon/mon-cfg) (s/def ::mon-auth ::mon/mon-auth) (s/def ::unique-name ::web/unique-name) (s/def ::issuer ::web/issuer) (s/def ::volume-size ::web/volume-size) -(s/def ::average-rate ::ing/average-rate) -(s/def ::burst-rate ::ing/burst-rate) (s/def ::authtoken ::web/authtoken) (s/def ::fqdns ::web/fqdns) @@ -60,17 +57,8 @@ (def auth? (s/keys :req-un [::websiteauths] :opt-un [::mon-auth])) -(def config-defaults {:issuer "staging"}) - - -(def website-config-defaults {:build-cpu-request "500m" - :build-cpu-limit "1700m" - :build-memory-request "256Mi" - :build-memory-limit "512Mi" - :volume-size "3" - :redirects [] - :average-rate 20 - :burst-rate 40}) +(def config-defaults {:namespace "web" + :issuer "staging"}) (defn-spec sort-config map? [unsorted-config config?] @@ -102,57 +90,33 @@ [auth auth?] (-> auth :websiteauths first)) -(defn-spec generate-ingress seq? - [config websiteconfig?] - (let [name (web/replace-dots-by-minus (:unique-name config)) - final-config (merge website-config-defaults - {:service-name name - :service-port 80 - :namespace name} - config)] - (ing/generate-simple-ingress final-config))) +(defn-spec config-objects cp/map-or-seq? + [config config?] + (let [resolved-config (merge config-defaults config)] + (map yaml/to-string + (filter + #(not (nil? %)) + (cm/concat-vec + (ns/generate resolved-config) + [(web/generate-content-pvc resolved-config) + (web/generate-nginx-deployment resolved-config) + (web/generate-nginx-configmap resolved-config) + (web/generate-nginx-service resolved-config) + (web/generate-content-pvc resolved-config) + (web/generate-hash-state-pvc resolved-config) + (web/generate-build-cron resolved-config) + (web/generate-build-configmap resolved-config)] + (web/generate-ingress resolved-config) + (when (:contains? resolved-config :mon-cfg) + (mon/generate-config))))))) -(defn-spec generate seq? - [config config? - auth auth?] - (loop [sorted-config (sort-config config) - sorted-auth (sort-auth auth) - result []] - - (if (and (empty? (sorted-config :websiteconfigs)) (empty? (sorted-auth :websiteauths))) - result - (recur (-> - sorted-config - (assoc-in [:websiteconfigs] (rest (sorted-config :websiteconfigs)))) - (-> - sorted-auth - (assoc-in [:websiteauths] (rest (sorted-auth :websiteauths)))) - (let [curr-flat-websiteconfig - (merge - website-config-defaults - (flatten-and-reduce-config sorted-config)) - name (web/replace-dots-by-minus (:unique-name curr-flat-websiteconfig))] - (cm/concat-vec - result - (ns/generate (merge {:namespace name} curr-flat-websiteconfig)) - [(web/generate-nginx-deployment curr-flat-websiteconfig) - (web/generate-nginx-configmap curr-flat-websiteconfig) - (web/generate-nginx-service curr-flat-websiteconfig) - (web/generate-content-pvc curr-flat-websiteconfig) - (web/generate-hash-state-pvc curr-flat-websiteconfig) - (web/generate-build-cron curr-flat-websiteconfig) - (web/generate-build-configmap curr-flat-websiteconfig) - (web/generate-build-secret (flatten-and-reduce-auth sorted-auth))] - (generate-ingress curr-flat-websiteconfig))))))) - -(defn-spec k8s-objects cp/map-or-seq? +(defn-spec auth-objects cp/map-or-seq? [config config? auth auth?] (cm/concat-vec (map yaml/to-string - (filter - #(not (nil? %)) - (cm/concat-vec - (generate config auth) - (when (:contains? config :mon-cfg) - (mon/generate (:mon-cfg config) (:mon-auth auth)))))))) + (filter #(not (nil? %)) + (cm/concat-vec + (ns/generate config auth) + (when (:contains? config :mon-cfg) + (mon/generate-auth (:mon-cfg config) (:mon-auth auth)))))))) diff --git a/src/main/cljc/dda/c4k_website/website.cljc b/src/main/cljc/dda/c4k_website/website.cljc index c1fbf12..537eba7 100644 --- a/src/main/cljc/dda/c4k_website/website.cljc +++ b/src/main/cljc/dda/c4k_website/website.cljc @@ -8,18 +8,19 @@ [dda.c4k-common.yaml :as yaml] [dda.c4k-common.common :as cm] [dda.c4k-common.base64 :as b64] - [dda.c4k-common.predicate :as pred])) + [dda.c4k-common.predicate :as cp] + [dda.c4k-common.ingress :as ing])) (defn fqdn-list? [input] - (every? true? (map pred/fqdn-string? input))) + (every? true? (map cp/fqdn-string? input))) (s/def ::unique-name string?) -(s/def ::issuer pred/letsencrypt-issuer?) -(s/def ::volume-size pred/integer-string?) -(s/def ::authtoken pred/bash-env-string?) -(s/def ::fqdns (s/coll-of pred/fqdn-string?)) -(s/def ::forgejo-host pred/fqdn-string?) +(s/def ::issuer cp/letsencrypt-issuer?) +(s/def ::volume-size cp/integer-string?) +(s/def ::authtoken cp/bash-env-string?) +(s/def ::fqdns (s/coll-of cp/fqdn-string?)) +(s/def ::forgejo-host cp/fqdn-string?) (s/def ::repo-name string?) (s/def ::branchname string?) (s/def ::repo-owner string?) @@ -29,6 +30,8 @@ (s/def ::build-memory-limit string?) (s/def ::redirect (s/tuple string? string?)) (s/def ::redirects (s/coll-of ::redirect)) +(s/def ::average-rate ::ing/average-rate) +(s/def ::burst-rate ::ing/burst-rate) (def websiteconfig? (s/keys :req-un [::unique-name ::fqdns @@ -44,15 +47,24 @@ ::volume-size ::redirects])) +(def website-config-defaults {:build-cpu-request "500m" + :build-cpu-limit "1700m" + :build-memory-request "256Mi" + :build-memory-limit "512Mi" + :volume-size "3" + :redirects [] + :average-rate 20 + :burst-rate 40}) + (def websiteauth? (s/keys :req-un [::unique-name ::authtoken])) (defn-spec replace-dots-by-minus string? - [fqdn pred/fqdn-string?] + [fqdn cp/fqdn-string?] (str/replace fqdn #"\." "-")) ; https://your.gitea.host/api/v1/repos/<owner>/<repo>/archive/<branch>.zip (defn-spec generate-gitrepourl string? - [host pred/fqdn-string? + [host cp/fqdn-string? owner string? repo string? branch string?] @@ -60,7 +72,7 @@ ; https://your.gitea.host/api/v1/repos/<owner>/<repo>/git/commits/HEAD (defn-spec generate-gitcommiturl string? - [host pred/fqdn-string? + [host cp/fqdn-string? owner string? repo string?] (str "https://" host "/api/v1/repos/" owner "/" repo "/git/" "commits/" "HEAD")) @@ -104,7 +116,7 @@ #"REDIRECTS" (generate-redirects config 2))))))) -(defn-spec generate-build-configmap pred/map-or-seq? +(defn-spec generate-build-configmap cp/map-or-seq? [config websiteconfig?] (let [{:keys [unique-name forgejo-host @@ -115,18 +127,18 @@ (-> (yaml/load-as-edn "website/build-configmap.yaml") (replace-all-matching-prefixes "NAME" name) - (cm/replace-all-matching-values-by-new-value "GITHOST" forgejo-host) - (cm/replace-all-matching-values-by-new-value "REPOURL" (generate-gitrepourl + (cm/replace-all-matching "GITHOST" forgejo-host) + (cm/replace-all-matching "REPOURL" (generate-gitrepourl forgejo-host repo-owner repo-name branchname)) - (cm/replace-all-matching-values-by-new-value "COMMITURL" (generate-gitcommiturl + (cm/replace-all-matching "COMMITURL" (generate-gitcommiturl forgejo-host repo-owner repo-name))))) -(defn-spec generate-build-secret pred/map-or-seq? +(defn-spec generate-build-secret cp/map-or-seq? [auth websiteauth?] (let [{:keys [unique-name authtoken]} auth @@ -134,7 +146,7 @@ (-> (yaml/load-as-edn "website/build-secret.yaml") (replace-all-matching-prefixes "NAME" name) - (cm/replace-all-matching-values-by-new-value "TOKEN" (b64/encode authtoken))))) + (cm/replace-all-matching "TOKEN" (b64/encode authtoken))))) (defn-spec generate-content-pvc map? @@ -144,7 +156,7 @@ (-> (yaml/load-as-edn "website/content-pvc.yaml") (replace-all-matching-prefixes "NAME" name) - (cm/replace-all-matching-values-by-new-value "WEBSITESTORAGESIZE" (str volume-size "Gi"))))) + (cm/replace-all-matching "WEBSITESTORAGESIZE" (str volume-size "Gi"))))) ; TODO: Non-Secret-Parts should be config map @@ -166,10 +178,10 @@ (yaml/load-as-edn "website/nginx-deployment.yaml") (assoc-in [:metadata :namespace] name) (replace-all-matching-prefixes "NAME" name) - (cm/replace-all-matching-values-by-new-value "BUILD_CPU_REQUEST" build-cpu-request) - (cm/replace-all-matching-values-by-new-value "BUILD_CPU_LIMIT" build-cpu-limit) - (cm/replace-all-matching-values-by-new-value "BUILD_MEMORY_REQUEST" build-memory-request) - (cm/replace-all-matching-values-by-new-value "BUILD_MEMORY_LIMIT" build-memory-limit)))) + (cm/replace-all-matching "BUILD_CPU_REQUEST" build-cpu-request) + (cm/replace-all-matching "BUILD_CPU_LIMIT" build-cpu-limit) + (cm/replace-all-matching "BUILD_MEMORY_REQUEST" build-memory-request) + (cm/replace-all-matching "BUILD_MEMORY_LIMIT" build-memory-limit)))) (defn-spec generate-build-cron map? @@ -180,10 +192,10 @@ (-> (yaml/load-as-edn "website/build-cron.yaml") (replace-all-matching-prefixes "NAME" name) - (cm/replace-all-matching-values-by-new-value "BUILD_CPU_REQUEST" build-cpu-request) - (cm/replace-all-matching-values-by-new-value "BUILD_CPU_LIMIT" build-cpu-limit) - (cm/replace-all-matching-values-by-new-value "BUILD_MEMORY_REQUEST" build-memory-request) - (cm/replace-all-matching-values-by-new-value "BUILD_MEMORY_LIMIT" build-memory-limit)))) + (cm/replace-all-matching "BUILD_CPU_REQUEST" build-cpu-request) + (cm/replace-all-matching "BUILD_CPU_LIMIT" build-cpu-limit) + (cm/replace-all-matching "BUILD_MEMORY_REQUEST" build-memory-request) + (cm/replace-all-matching "BUILD_MEMORY_LIMIT" build-memory-limit)))) (defn-spec generate-nginx-service map? @@ -195,6 +207,16 @@ (assoc-in [:metadata :namespace] name) (replace-all-matching-prefixes "NAME" name)))) +(defn-spec generate-ingress seq? + [config websiteconfig?] + (let [name (replace-dots-by-minus (:unique-name config)) + final-config (merge website-config-defaults + {:service-name name + :service-port 80 + :namespace name} + config)] + (ing/generate-simple-ingress final-config))) + #?(:cljs (defmethod yaml/load-resource :website [resource-name]