diff --git a/backend/src/app/config.clj b/backend/src/app/config.clj
index 78159a6d7..41d1da236 100644
--- a/backend/src/app/config.clj
+++ b/backend/src/app/config.clj
@@ -11,6 +11,7 @@
"A configuration management."
(:require
[app.common.spec :as us]
+ [app.common.version :as v]
[app.util.time :as dt]
[clojure.spec.alpha :as s]
[cuerdas.core :as str]
@@ -197,6 +198,9 @@
(def default-deletion-delay
(dt/duration {:hours 48}))
+(def version
+ (delay (v/parse "%version%")))
+
(defn smtp
[cfg]
{:host (:smtp-host cfg "localhost")
diff --git a/backend/src/app/main.clj b/backend/src/app/main.clj
index a782b9118..431d3f266 100644
--- a/backend/src/app/main.clj
+++ b/backend/src/app/main.clj
@@ -9,6 +9,8 @@
(ns app.main
(:require
+ [app.config :as cfg]
+ [clojure.tools.logging :as log]
[mount.core :as mount]))
(defn- enable-asserts
@@ -26,15 +28,13 @@
(defn run
[_params]
- (require 'app.config
- 'app.srepl.server
+ (require 'app.srepl.server
'app.migrations
'app.worker
'app.media
'app.http)
- (mount/start))
-
-
+ (mount/start)
+ (log/infof "Welcome to penpot! Version: '%s'." (:full @cfg/version)))
(defn -main
[& _args]
diff --git a/common/app/common/version.cljc b/common/app/common/version.cljc
new file mode 100644
index 000000000..5edb35d09
--- /dev/null
+++ b/common/app/common/version.cljc
@@ -0,0 +1,18 @@
+(ns app.common.version
+ "A version parsing helper."
+ (:require
+ [app.common.data :as d]
+ [cuerdas.core :as str]))
+
+(defn parse
+ [version]
+ (if (= version "%version%")
+ {:full "develop"
+ :base "develop"
+ :build 0
+ :commit nil}
+ (let [[base build commit] (str/split version #"-" 3)]
+ {:full version
+ :base base
+ :build (d/parse-integer build)
+ :commit commit})))
diff --git a/frontend/resources/templates/index.mustache b/frontend/resources/templates/index.mustache
index 801633eb1..7011dce99 100644
--- a/frontend/resources/templates/index.mustache
+++ b/frontend/resources/templates/index.mustache
@@ -6,21 +6,27 @@
PENPOT - The Open-Source prototyping tool
+
-
-
- {{>../public/images/sprites/symbol/svg/sprite.symbol.svg}}
-
-
+
{{# manifest}}
+ {{/manifest}}
+
+
+
+ {{>../public/images/sprites/symbol/svg/sprite.symbol.svg}}
+
+
+ {{# manifest}}
{{/manifest}}
diff --git a/frontend/src/app/config.cljs b/frontend/src/app/config.cljs
index bff44964c..0d0626995 100644
--- a/frontend/src/app/config.cljs
+++ b/frontend/src/app/config.cljs
@@ -10,15 +10,19 @@
(ns app.config
(:require
[clojure.spec.alpha :as s]
+ [app.common.data :as d]
[app.common.spec :as us]
+ [app.common.version :as v]
[app.util.object :as obj]
[app.util.dom :as dom]
[cuerdas.core :as str]))
+;; --- Auxiliar Functions
+
(s/def ::platform #{:windows :linux :macos :other})
(s/def ::browser #{:chrome :mozilla :safari :edge :other})
-(defn parse-browser
+(defn- parse-browser
[]
(let [user-agent (-> (dom/get-user-agent) str/lower)
check-chrome? (fn [] (str/includes? user-agent "chrom"))
@@ -32,7 +36,7 @@
(check-safari?) :safari
:else :other)))
-(defn parse-platform
+(defn- parse-platform
[]
(let [user-agent (-> (dom/get-user-agent) str/lower)
check-windows? (fn [] (str/includes? user-agent "windows"))
@@ -44,6 +48,10 @@
(check-macos?) :macos
:else :other)))
+;; --- Globar Config Vars
+
+(def default-theme "default")
+
(this-as global
(def default-language "en")
(def demo-warning (obj/get global "appDemoWarning" false))
@@ -53,10 +61,18 @@
(def worker-uri (obj/get global "appWorkerURI" "/js/worker.js"))
(def public-uri (or (obj/get global "appPublicURI")
(.-origin ^js js/location)))
- (def media-uri (str public-uri "/media"))
- (def default-theme "default")
- (def browser (parse-browser))
- (def platform (parse-platform)))
+ (def version (v/parse (obj/get global "appVersion"))))
+
+
+(def media-uri (str public-uri "/media"))
+(def browser (parse-browser))
+(def platform (parse-platform))
+
+(js/console.log
+ (str/format "Welcome to pentpot! Version: '%s'" (:full version)))
+
+;; --- Helper Functions
+
(defn ^boolean check-browser? [candidate]
(us/verify ::browser candidate)
diff --git a/manage.sh b/manage.sh
index 0bae480bc..b628f8328 100755
--- a/manage.sh
+++ b/manage.sh
@@ -6,7 +6,7 @@ export DEVENV_IMGNAME="$ORGANIZATION/devenv";
export DEVENV_PNAME="penpotdev";
export CURRENT_USER_ID=$(id -u);
-export CURRENT_GIT_TAG=$(git describe --tags);
+export CURRENT_VERSION=$(git describe --tags);
export CURRENT_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD);
function build-devenv {
@@ -95,12 +95,11 @@ function build-bundle {
mv ./backend/target/dist ./bundle/backend
mv ./exporter/target ./bundle/exporter
- local name="penpot-$CURRENT_GIT_TAG";
+ local name="penpot-$CURRENT_VERSION";
+ echo $CURRENT_VERSION > ./bundle/version.txt
- echo $CURRENT_GIT_TAG > ./bundle/frontend/version.txt
- echo $CURRENT_GIT_TAG > ./bundle/backend/main/version.txt
- echo $CURRENT_GIT_TAG > ./bundle/exporter/version.txt
- echo $CURRENT_GIT_TAG > ./bundle/version.txt
+ sed -i -re "s/\%version\%/$CURRENT_VERSION/g" ./bundle/frontend/index.html;
+ sed -i -re "s/\%version\%/$CURRENT_VERSION/g" ./bundle/backend/main/app/config.clj;
local generate_tar=${PENPOT_BUILD_GENERATE_TAR:-"true"};
@@ -124,12 +123,12 @@ function build-image {
pushd ./docker/images;
local docker_image="$ORGANIZATION/$image";
- docker build -t $docker_image:$CURRENT_GIT_TAG -f Dockerfile.$image .;
+ docker build -t $docker_image:$CURRENT_VERSION -f Dockerfile.$image .;
popd;
}
function build-images {
- local bundle_file="penpot-$CURRENT_GIT_TAG.tar.xz";
+ local bundle_file="penpot-$CURRENT_VERSION.tar.xz";
if [ ! -f $bundle_file ]; then
echo "File '$bundle_file' does not exists.";
@@ -153,9 +152,9 @@ function build-images {
function publish-snapshot {
set -x
- docker tag $ORGANIZATION/frontend:$CURRENT_GIT_TAG $ORGANIZATION/frontend:$CURRENT_GIT_BRANCH
- docker tag $ORGANIZATION/backend:$CURRENT_GIT_TAG $ORGANIZATION/backend:$CURRENT_GIT_BRANCH
- docker tag $ORGANIZATION/exporter:$CURRENT_GIT_TAG $ORGANIZATION/exporter:$CURRENT_GIT_BRANCH
+ docker tag $ORGANIZATION/frontend:$CURRENT_VERSION $ORGANIZATION/frontend:$CURRENT_GIT_BRANCH
+ docker tag $ORGANIZATION/backend:$CURRENT_VERSION $ORGANIZATION/backend:$CURRENT_GIT_BRANCH
+ docker tag $ORGANIZATION/exporter:$CURRENT_VERSION $ORGANIZATION/exporter:$CURRENT_GIT_BRANCH
docker push $ORGANIZATION/frontend:$CURRENT_GIT_BRANCH;
docker push $ORGANIZATION/backend:$CURRENT_GIT_BRANCH;