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;