mirror of
https://github.com/penpot/penpot.git
synced 2025-07-07 20:57:22 +02:00
Merge pull request #1792 from penpot/niwinz-minor-enhancements
Enhancements
This commit is contained in:
commit
aa2bb75f95
12 changed files with 64 additions and 19 deletions
|
@ -20,7 +20,7 @@
|
||||||
io.lettuce/lettuce-core {:mvn/version "6.1.6.RELEASE"}
|
io.lettuce/lettuce-core {:mvn/version "6.1.6.RELEASE"}
|
||||||
java-http-clj/java-http-clj {:mvn/version "0.4.3"}
|
java-http-clj/java-http-clj {:mvn/version "0.4.3"}
|
||||||
|
|
||||||
funcool/yetti {:git/tag "v9.0" :git/sha "e09e46c"
|
funcool/yetti {:git/tag "v9.1" :git/sha "63f35d9"
|
||||||
:git/url "https://github.com/funcool/yetti.git"
|
:git/url "https://github.com/funcool/yetti.git"
|
||||||
:exclusions [org.slf4j/slf4j-api]}
|
:exclusions [org.slf4j/slf4j-api]}
|
||||||
|
|
||||||
|
@ -42,6 +42,9 @@
|
||||||
|
|
||||||
io.sentry/sentry {:mvn/version "5.6.1"}
|
io.sentry/sentry {:mvn/version "5.6.1"}
|
||||||
|
|
||||||
|
dawran6/emoji {:mvn/version "0.1.5"}
|
||||||
|
markdown-clj/markdown-clj {:mvn/version "1.11.0"}
|
||||||
|
|
||||||
;; Pretty Print specs
|
;; Pretty Print specs
|
||||||
pretty-spec/pretty-spec {:mvn/version "0.1.4"}
|
pretty-spec/pretty-spec {:mvn/version "0.1.4"}
|
||||||
software.amazon.awssdk/s3 {:mvn/version "2.17.136"}}
|
software.amazon.awssdk/s3 {:mvn/version "2.17.136"}}
|
||||||
|
|
|
@ -8,6 +8,7 @@ rm -rf target;
|
||||||
mkdir -p target/classes;
|
mkdir -p target/classes;
|
||||||
mkdir -p target/dist;
|
mkdir -p target/dist;
|
||||||
echo "$CURRENT_VERSION" > target/classes/version.txt;
|
echo "$CURRENT_VERSION" > target/classes/version.txt;
|
||||||
|
cp ../CHANGES.md target/classes/changelog.md;
|
||||||
|
|
||||||
clojure -T:build jar;
|
clojure -T:build jar;
|
||||||
mv target/penpot.jar target/dist/penpot.jar
|
mv target/penpot.jar target/dist/penpot.jar
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
"Main api for send emails."
|
"Main api for send emails."
|
||||||
(:require
|
(:require
|
||||||
[app.common.logging :as l]
|
[app.common.logging :as l]
|
||||||
|
[app.common.pprint :as pp]
|
||||||
[app.common.spec :as us]
|
[app.common.spec :as us]
|
||||||
[app.config :as cf]
|
[app.config :as cf]
|
||||||
[app.db :as db]
|
[app.db :as db]
|
||||||
|
@ -165,19 +166,25 @@
|
||||||
(let [enabled? (or (contains? cf/flags :smtp)
|
(let [enabled? (or (contains? cf/flags :smtp)
|
||||||
(cf/get :smtp-enabled)
|
(cf/get :smtp-enabled)
|
||||||
(:enabled task))]
|
(:enabled task))]
|
||||||
(if enabled?
|
(when enabled?
|
||||||
(emails/send! cfg props)
|
(emails/send! cfg props))
|
||||||
|
|
||||||
|
(when (contains? cf/flags :log-emails)
|
||||||
(send-console! cfg props)))))
|
(send-console! cfg props)))))
|
||||||
|
|
||||||
(defn- send-console!
|
(defn- send-console!
|
||||||
[cfg email]
|
[_ email]
|
||||||
(let [baos (java.io.ByteArrayOutputStream.)
|
(let [body (:body email)
|
||||||
mesg (emails/smtp-message cfg email)]
|
out (with-out-str
|
||||||
(.writeTo mesg baos)
|
(println "email console dump:")
|
||||||
(let [out (with-out-str
|
(println "******** start email" (:id email) "**********")
|
||||||
(println "email console dump:")
|
(pp/pprint (dissoc email :body))
|
||||||
(println "******** start email" (:id email) "**********")
|
(if (string? body)
|
||||||
(println (.toString baos))
|
(println body)
|
||||||
(println "******** end email "(:id email) "**********"))]
|
(println (->> body
|
||||||
(l/info :email out))))
|
(filter #(= "text/plain" (:type %)))
|
||||||
|
(map :content)
|
||||||
|
first)))
|
||||||
|
(println "******** end email" (:id email) "**********"))]
|
||||||
|
(l/info ::l/raw out)))
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,7 @@
|
||||||
|
|
||||||
["/dbg" {:middleware [(:middleware session)]}
|
["/dbg" {:middleware [(:middleware session)]}
|
||||||
["" {:handler (:index debug)}]
|
["" {:handler (:index debug)}]
|
||||||
|
["/changelog" {:handler (:changelog debug)}]
|
||||||
["/error-by-id/:id" {:handler (:retrieve-error debug)}]
|
["/error-by-id/:id" {:handler (:retrieve-error debug)}]
|
||||||
["/error/:id" {:handler (:retrieve-error debug)}]
|
["/error/:id" {:handler (:retrieve-error debug)}]
|
||||||
["/error" {:handler (:retrieve-error-list debug)}]
|
["/error" {:handler (:retrieve-error-list debug)}]
|
||||||
|
|
|
@ -22,8 +22,11 @@
|
||||||
[clojure.spec.alpha :as s]
|
[clojure.spec.alpha :as s]
|
||||||
[cuerdas.core :as str]
|
[cuerdas.core :as str]
|
||||||
[datoteka.core :as fs]
|
[datoteka.core :as fs]
|
||||||
|
[emoji.core :as emj]
|
||||||
[fipp.edn :as fpp]
|
[fipp.edn :as fpp]
|
||||||
[integrant.core :as ig]
|
[integrant.core :as ig]
|
||||||
|
[markdown.core :as md]
|
||||||
|
[markdown.transformers :as mdt]
|
||||||
[promesa.core :as p]
|
[promesa.core :as p]
|
||||||
[promesa.exec :as px]
|
[promesa.exec :as px]
|
||||||
[yetti.request :as yrq]
|
[yetti.request :as yrq]
|
||||||
|
@ -213,6 +216,18 @@
|
||||||
(db/exec-one! conn ["select count(*) as count from server_prop;"])
|
(db/exec-one! conn ["select count(*) as count from server_prop;"])
|
||||||
(yrs/response 200 "OK")))
|
(yrs/response 200 "OK")))
|
||||||
|
|
||||||
|
(defn changelog
|
||||||
|
[_ _]
|
||||||
|
(letfn [(transform-emoji [text state]
|
||||||
|
[(emj/emojify text) state])
|
||||||
|
(md->html [text]
|
||||||
|
(md/md-to-html-string text :replacement-transformers (into [transform-emoji] mdt/transformer-vector)))]
|
||||||
|
(if-let [clog (io/resource "changelog.md")]
|
||||||
|
(yrs/response :status 200
|
||||||
|
:headers {"content-type" "text/html; charset=utf-8"}
|
||||||
|
:body (-> clog slurp md->html))
|
||||||
|
(yrs/response :status 404 :body "NOT FOUND"))))
|
||||||
|
|
||||||
(defn- wrap-async
|
(defn- wrap-async
|
||||||
[{:keys [executor] :as cfg} f]
|
[{:keys [executor] :as cfg} f]
|
||||||
(fn [request respond raise]
|
(fn [request respond raise]
|
||||||
|
@ -230,4 +245,5 @@
|
||||||
:retrieve-file-changes (wrap-async cfg retrieve-file-changes)
|
:retrieve-file-changes (wrap-async cfg retrieve-file-changes)
|
||||||
:retrieve-error (wrap-async cfg retrieve-error)
|
:retrieve-error (wrap-async cfg retrieve-error)
|
||||||
:retrieve-error-list (wrap-async cfg retrieve-error-list)
|
:retrieve-error-list (wrap-async cfg retrieve-error-list)
|
||||||
:file-data (wrap-async cfg file-data)})
|
:file-data (wrap-async cfg file-data)
|
||||||
|
:changelog (wrap-async cfg changelog)})
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
(:require
|
(:require
|
||||||
[app.common.data :as d]
|
[app.common.data :as d]
|
||||||
[app.common.exceptions :as ex]
|
[app.common.exceptions :as ex]
|
||||||
|
[app.common.logging :as l]
|
||||||
[app.common.spec :as us]
|
[app.common.spec :as us]
|
||||||
[app.common.uuid :as uuid]
|
[app.common.uuid :as uuid]
|
||||||
[app.config :as cf]
|
[app.config :as cf]
|
||||||
|
@ -412,6 +413,9 @@
|
||||||
{:iss :profile-identity
|
{:iss :profile-identity
|
||||||
:profile-id (:id profile)})]
|
:profile-id (:id profile)})]
|
||||||
|
|
||||||
|
(when (contains? cf/flags :log-invitation-tokens)
|
||||||
|
(l/trace :hint "invitation token" :token itoken))
|
||||||
|
|
||||||
(when (and member (not (eml/allow-send-emails? conn member)))
|
(when (and member (not (eml/allow-send-emails? conn member)))
|
||||||
(ex/raise :type :validation
|
(ex/raise :type :validation
|
||||||
:code :member-is-muted
|
:code :member-is-muted
|
||||||
|
|
|
@ -3,10 +3,10 @@ LABEL maintainer="Andrey Antukh <niwi@niwi.nz>"
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
ENV NODE_VERSION=v16.14.0 \
|
ENV NODE_VERSION=v16.14.2 \
|
||||||
CLOJURE_VERSION=1.11.0.1100 \
|
CLOJURE_VERSION=1.11.0.1100 \
|
||||||
CLJKONDO_VERSION=2022.03.09 \
|
CLJKONDO_VERSION=2022.03.09 \
|
||||||
BABASHKA_VERSION=0.7.8 \
|
BABASHKA_VERSION=0.8.0 \
|
||||||
LANG=en_US.UTF-8 \
|
LANG=en_US.UTF-8 \
|
||||||
LC_ALL=en_US.UTF-8
|
LC_ALL=en_US.UTF-8
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ PENPOT_REDIS_URI=redis://penpot-redis/0
|
||||||
# can be configured to store in AWS S3 or completely in de the database.
|
# can be configured to store in AWS S3 or completely in de the database.
|
||||||
# Storing in the database makes the backups more easy but will make access to
|
# Storing in the database makes the backups more easy but will make access to
|
||||||
# media less performant.
|
# media less performant.
|
||||||
ASSETS_STORAGE_BACKEND=assets-fs
|
PENPOT_ASSETS_STORAGE_BACKEND=assets-fs
|
||||||
PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets
|
PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets
|
||||||
|
|
||||||
# Telemetry. When enabled, a periodical process will send anonymous data about
|
# Telemetry. When enabled, a periodical process will send anonymous data about
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
window.penpotTranslations = JSON.parse({{& translations}});
|
window.penpotTranslations = JSON.parse({{& translations}});
|
||||||
window.penpotThemes = {{& themes}};
|
window.penpotThemes = {{& themes}};
|
||||||
window.penpotVersion = "%version%";
|
window.penpotVersion = "%version%";
|
||||||
|
window.penpotBuildDate = "%buildDate%";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{{# manifest}}
|
{{# manifest}}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
CURRENT_VERSION=$1;
|
CURRENT_VERSION=$1;
|
||||||
|
BUILD_DATE=$(date -R);
|
||||||
CURRENT_HASH=${CURRENT_HASH:-$(git rev-parse --short HEAD)};
|
CURRENT_HASH=${CURRENT_HASH:-$(git rev-parse --short HEAD)};
|
||||||
EXTRA_PARAMS=$SHADOWCLJS_EXTRA_PARAMS;
|
EXTRA_PARAMS=$SHADOWCLJS_EXTRA_PARAMS;
|
||||||
|
|
||||||
|
@ -14,4 +15,4 @@ npx gulp dist:clean || exit 1;
|
||||||
npx gulp dist:copy || exit 1;
|
npx gulp dist:copy || exit 1;
|
||||||
|
|
||||||
sed -i -re "s/\%version\%/$CURRENT_VERSION/g" ./target/dist/index.html;
|
sed -i -re "s/\%version\%/$CURRENT_VERSION/g" ./target/dist/index.html;
|
||||||
|
sed -i -re "s/\%buildDate\%/$BUILD_DATE/g" ./target/dist/index.html;
|
||||||
|
|
|
@ -68,6 +68,13 @@
|
||||||
(-> (obj/get global "penpotVersion")
|
(-> (obj/get global "penpotVersion")
|
||||||
(v/parse)))
|
(v/parse)))
|
||||||
|
|
||||||
|
(defn parse-build-date
|
||||||
|
[global]
|
||||||
|
(let [date (obj/get global "penpotBuildDate")]
|
||||||
|
(if (= date "%buildDate%")
|
||||||
|
"unknown"
|
||||||
|
date)))
|
||||||
|
|
||||||
;; --- Globar Config Vars
|
;; --- Globar Config Vars
|
||||||
|
|
||||||
(def default-theme "default")
|
(def default-theme "default")
|
||||||
|
@ -83,6 +90,7 @@
|
||||||
(def sentry-dsn (obj/get global "penpotSentryDsn"))
|
(def sentry-dsn (obj/get global "penpotSentryDsn"))
|
||||||
(def onboarding-form-id (obj/get global "penpotOnboardingQuestionsFormId"))
|
(def onboarding-form-id (obj/get global "penpotOnboardingQuestionsFormId"))
|
||||||
|
|
||||||
|
(def build-date (parse-build-date global))
|
||||||
(def flags (atom (parse-flags global)))
|
(def flags (atom (parse-flags global)))
|
||||||
(def version (atom (parse-version global)))
|
(def version (atom (parse-version global)))
|
||||||
(def target (atom (parse-target global)))
|
(def target (atom (parse-target global)))
|
||||||
|
|
|
@ -33,7 +33,10 @@
|
||||||
(log/set-level! :app :info)
|
(log/set-level! :app :info)
|
||||||
|
|
||||||
(when (= :browser @cf/target)
|
(when (= :browser @cf/target)
|
||||||
(log/info :message "Welcome to penpot" :version (:full @cf/version) :public-uri (str cf/public-uri)))
|
(log/info :message "Welcome to penpot"
|
||||||
|
:version (:full @cf/version)
|
||||||
|
:build-date cf/build-date
|
||||||
|
:public-uri (str cf/public-uri)))
|
||||||
|
|
||||||
(declare reinit)
|
(declare reinit)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue