From 1ffa956251aad3579ab1d3a1813e1f42cda7e011 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 20 Jan 2026 12:13:42 +0100 Subject: [PATCH] :sparkles: Include timestamp on version tag --- frontend/resources/templates/index.mustache | 7 ++- .../resources/templates/rasterizer.mustache | 3 +- frontend/resources/templates/render.mustache | 4 +- frontend/scripts/_helpers.js | 57 +++++++++---------- frontend/scripts/build | 20 +++---- frontend/scripts/build-storybook | 14 ++--- frontend/src/app/config.cljs | 12 ++-- frontend/src/app/util/i18n.cljs | 2 +- render-wasm/_build_env | 4 +- 9 files changed, 62 insertions(+), 61 deletions(-) diff --git a/frontend/resources/templates/index.mustache b/frontend/resources/templates/index.mustache index f6636c9e9e..d6437a8969 100644 --- a/frontend/resources/templates/index.mustache +++ b/frontend/resources/templates/index.mustache @@ -17,17 +17,18 @@ - + {{#isDebug}} - + {{/isDebug}} - + diff --git a/frontend/resources/templates/rasterizer.mustache b/frontend/resources/templates/rasterizer.mustache index 56e2adaf7a..90a7f1dfdc 100644 --- a/frontend/resources/templates/rasterizer.mustache +++ b/frontend/resources/templates/rasterizer.mustache @@ -3,10 +3,11 @@ Penpot - Rasterizer - + diff --git a/frontend/resources/templates/render.mustache b/frontend/resources/templates/render.mustache index cf938583ec..4de213f9ad 100644 --- a/frontend/resources/templates/render.mustache +++ b/frontend/resources/templates/render.mustache @@ -4,10 +4,12 @@ Penpot - Render - + + diff --git a/frontend/scripts/_helpers.js b/frontend/scripts/_helpers.js index 1065327d83..c1c018c74c 100644 --- a/frontend/scripts/_helpers.js +++ b/frontend/scripts/_helpers.js @@ -27,9 +27,11 @@ export function startWorker() { }); } -export const isDebug = process.env.NODE_ENV !== "production"; -export const CURRENT_VERSION = process.env.CURRENT_VERSION || "develop"; -export const BUILD_DATE = process.env.BUILD_DATE || "" + new Date(); +export const IS_DEBUG = process.env.NODE_ENV !== "production"; +export const BUILD_DATE = process.env.BUILD_DATE || (new Date().toString()) ; +export const BUILD_TS = process.env.BUILD_TS || Date.now(); +export const VERSION = process.env.VERSION || "develop"; +export const VERSION_TAG = process.env.VERSION_TAG || VERSION; async function findFiles(basePath, predicate, options = {}) { predicate = @@ -193,25 +195,25 @@ async function generateManifest() { render_main: "./js/render.js", rasterizer_main: "./js/rasterizer.js", - config: "./js/config.js?version=" + CURRENT_VERSION, - polyfills: "./js/polyfills.js?version=" + CURRENT_VERSION, - libs: "./js/libs.js?version=" + CURRENT_VERSION, - worker_main: "./js/worker/main.js?version=" + CURRENT_VERSION, - default_translations: "./js/translation.en.js?version=" + CURRENT_VERSION, + config: "./js/config.js?version=" + VERSION_TAG, + polyfills: "./js/polyfills.js?version=" + VERSION_TAG, + libs: "./js/libs.js?version=" + VERSION_TAG, + worker_main: "./js/worker/main.js?version=" + VERSION_TAG, + default_translations: "./js/translation.en.js?version=" + VERSION_TAG, importmap: JSON.stringify({ "imports": { - "./js/shared.js": "./js/shared.js?version=" + CURRENT_VERSION, - "./js/main.js": "./js/main.js?version=" + CURRENT_VERSION, - "./js/render.js": "./js/render.js?version=" + CURRENT_VERSION, - "./js/render-wasm.js": "./js/render-wasm.js?version=" + CURRENT_VERSION, - "./js/rasterizer.js": "./js/rasterizer.js?version=" + CURRENT_VERSION, - "./js/main-dashboard.js": "./js/main-dashboard.js?version=" + CURRENT_VERSION, - "./js/main-auth.js": "./js/main-auth.js?version=" + CURRENT_VERSION, - "./js/main-viewer.js": "./js/main-viewer.js?version=" + CURRENT_VERSION, - "./js/main-settings.js": "./js/main-settings.js?version=" + CURRENT_VERSION, - "./js/main-workspace.js": "./js/main-workspace.js?version=" + CURRENT_VERSION, - "./js/util-highlight.js": "./js/util-highlight.js?version=" + CURRENT_VERSION + "./js/shared.js": "./js/shared.js?version=" + VERSION_TAG, + "./js/main.js": "./js/main.js?version=" + VERSION_TAG, + "./js/render.js": "./js/render.js?version=" + VERSION_TAG, + "./js/render-wasm.js": "./js/render-wasm.js?version=" + VERSION_TAG, + "./js/rasterizer.js": "./js/rasterizer.js?version=" + VERSION_TAG, + "./js/main-dashboard.js": "./js/main-dashboard.js?version=" + VERSION_TAG, + "./js/main-auth.js": "./js/main-auth.js?version=" + VERSION_TAG, + "./js/main-viewer.js": "./js/main-viewer.js?version=" + VERSION_TAG, + "./js/main-settings.js": "./js/main-settings.js?version=" + VERSION_TAG, + "./js/main-workspace.js": "./js/main-workspace.js?version=" + VERSION_TAG, + "./js/util-highlight.js": "./js/util-highlight.js?version=" + VERSION_TAG } }) }; @@ -222,11 +224,12 @@ async function generateManifest() { async function renderTemplate(path, context = {}, partials = {}) { const content = await fs.readFile(path, { encoding: "utf-8" }); - const ts = Math.floor(new Date()); - context = Object.assign({}, context, { - ts: ts, - isDebug, + isDebug: IS_DEBUG, + version: VERSION, + version_tag: VERSION_TAG, + build_date: BUILD_DATE, + build_ts: BUILD_TS, }); return mustache.render(content, context, partials); @@ -390,7 +393,6 @@ async function generateSvgSprites() { } async function generateTemplates() { - const isDebug = process.env.NODE_ENV !== "production"; await fs.mkdir("./resources/public/", { recursive: true }); const manifest = await generateManifest(); @@ -415,10 +417,7 @@ async function generateTemplates() { }; const context = { - manifest: manifest, - version: CURRENT_VERSION, - build_date: BUILD_DATE, - isDebug, + manifest: manifest }; content = await renderTemplate( @@ -487,7 +486,7 @@ export async function compileStyles() { await fs.mkdir("./resources/public/css", { recursive: true }); await fs.writeFile("./resources/public/css/main.css", result); - if (isDebug) { + if (IS_DEBUG) { let debugCSS = await compileSassDebug(worker); await fs.writeFile("./resources/public/css/debug.css", debugCSS); } diff --git a/frontend/scripts/build b/frontend/scripts/build index 613bb29fd2..eb0d2dd221 100755 --- a/frontend/scripts/build +++ b/frontend/scripts/build @@ -2,26 +2,26 @@ # NOTE: this script should be called from the parent directory to # properly work. +set -ex + export INCLUDE_STORYBOOK=${BUILD_STORYBOOK:-no}; export INCLUDE_WASM=${BUILD_WASM:-yes}; -export CURRENT_VERSION=$1; -export BUILD_DATE=$(date -R); -export CURRENT_HASH=${CURRENT_HASH:-$(git rev-parse --short HEAD)}; export EXTRA_PARAMS=$SHADOWCLJS_EXTRA_PARAMS; -export TS=$(date +%s); + +export BUILD_DATE=$(date -R); +export BUILD_TS=$(date +%s); + +export VERSION=${1:-develop}; +export VERSION_TAG="${VERSION}-${BUILD_TS}"; # Some cljs reacts on this environment variable for define more # performant code on macros (example: rumext) export NODE_ENV=production; -echo "Current path:" -echo $PATH - -set -ex corepack enable; corepack install; -yarn install || exit 1; +yarn install; rm -rf target/dist; rm -rf resources/public; @@ -37,7 +37,7 @@ yarn run build:app:main $EXTRA_PARAMS; yarn run build:app:libs; yarn run build:app:assets; -sed -i "s/\.\/render.js/.\/render.js?version=$CURRENT_VERSION/g" resources/public/js/worker/main*.js +sed -i "s/\.\/render.js/.\/render.js?version=$VERSION_TAG/g" resources/public/js/worker/main*.js rsync -avr resources/public/ target/dist/ diff --git a/frontend/scripts/build-storybook b/frontend/scripts/build-storybook index 8588fd7866..1b4a0ab791 100755 --- a/frontend/scripts/build-storybook +++ b/frontend/scripts/build-storybook @@ -2,18 +2,16 @@ # NOTE: this script should be called from the parent directory to # properly work. -export CURRENT_VERSION=$1; +set -ex + +export BUILD_TS=$(date +%s); export BUILD_DATE=$(date -R); -export CURRENT_HASH=${CURRENT_HASH:-$(git rev-parse --short HEAD)}; -export TS=$(date +%s); + +export VERSION=${1:-develop}; +export VERSION_TAG="${VERSION}-${BUILD_TS}"; export NODE_ENV=production; -echo "Current path:" -echo $PATH - -set -ex - corepack enable; corepack install || exit 1; yarn install || exit 1; diff --git a/frontend/src/app/config.cljs b/frontend/src/app/config.cljs index 9e71ac802e..a1e6a6afda 100644 --- a/frontend/src/app/config.cljs +++ b/frontend/src/app/config.cljs @@ -95,6 +95,7 @@ (def browser (parse-browser)) (def platform (parse-platform)) +(def version-tag (obj/get global "penpotVersionTag")) (def terms-of-service-uri (obj/get global "penpotTermsOfServiceURI")) (def privacy-policy-uri (obj/get global "penpotPrivacyPolicyURI")) (def flex-help-uri (obj/get global "penpotGridHelpURI" "https://help.penpot.app/user-guide/flexible-layouts/")) @@ -190,9 +191,8 @@ (defn resolve-href [resource] - (let [version (get version :full) - href (-> public-uri - (u/ensure-path-slash) - (u/join resource) - (get :path))] - (str href "?version=" version))) + (let [href (-> public-uri + (u/ensure-path-slash) + (u/join resource) + (get :path))] + (str href "?version=" version-tag))) diff --git a/frontend/src/app/util/i18n.cljs b/frontend/src/app/util/i18n.cljs index 61826a798e..9eab6a6018 100644 --- a/frontend/src/app/util/i18n.cljs +++ b/frontend/src/app/util/i18n.cljs @@ -114,7 +114,7 @@ (defn- load [locale] - (let [path (str "./translation." locale ".js?version=" (:full cf/version))] + (let [path (str "./translation." locale ".js?version=" cf/version-tag)] (->> (mod/import path) (p/fmap (fn [result] (unchecked-get result "default"))) (p/fnly (fn [data cause] diff --git a/render-wasm/_build_env b/render-wasm/_build_env index d18526caa1..f8e0faf598 100644 --- a/render-wasm/_build_env +++ b/render-wasm/_build_env @@ -1,6 +1,6 @@ #!/usr/bin/env bash -export CURRENT_VERSION=${CURRENT_VERSION:-develop}; +export VERSION_TAG=${VERSION:-develop}; if [ "$NODE_ENV" = "production" ]; then export BUILD_MODE="release"; @@ -81,7 +81,7 @@ function copy_artifacts { cp target/wasm32-unknown-emscripten/$BUILD_MODE/render_wasm.js $DEST/$BUILD_NAME.js; cp target/wasm32-unknown-emscripten/$BUILD_MODE/render_wasm.wasm $DEST/$BUILD_NAME.wasm; - sed -i "s/render_wasm.wasm/$BUILD_NAME.wasm?version=$CURRENT_VERSION/g" $DEST/$BUILD_NAME.js; + sed -i "s/render_wasm.wasm/$BUILD_NAME.wasm?version=$VERSION_TAG/g" $DEST/$BUILD_NAME.js; yarn esbuild target/wasm32-unknown-emscripten/$BUILD_MODE/render_wasm.js \ --log-level=error \