From 37bc14f3baff44b34e639b4924af4d0d401f4085 Mon Sep 17 00:00:00 2001 From: Roman Priesol Date: Mon, 7 Sep 2026 23:54:24 +0200 Subject: [PATCH] Show the deployed commit as a hover tooltip on the topbar brand ASSET_VERSION only proves *a* deploy happened recently, not *which* commit -- not enough to answer "did my push actually deploy, or am I looking at a stale browser cache" (today's actual answer: neither -- deploy was current, a GeoJSON cache predating a code change was just never invalidated, since it only checks the source .gpx's mtime). The CI deploy job now writes REVISION (short SHA) before dropping .git; app.rb reads it at boot, falling back to "dev" locally/in CI's own check job where the file never exists. --- .gitea/workflows/ci.yml | 8 ++++++++ .gitignore | 4 ++++ app.rb | 16 +++++++++++++++- views/index.erb | 2 +- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 56fd675..d28e3ec 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -54,6 +54,14 @@ jobs: fetch --depth 1 origin "${{ gitea.sha }}" git checkout -q FETCH_HEAD + # Read by app.rb at boot and shown (as a hover tooltip on the topbar + # brand) so it's possible to tell which commit is actually live + # without digging through `tea actions runs list` — written here, + # before .git gets dropped below, since that's otherwise the only + # place the commit is recorded. + - name: Write REVISION + run: git rev-parse --short HEAD > REVISION + # Clears out everything in the target except data/ (uploaded GPX # files, offline.pmtiles) and copies the fresh checkout over, dropping # .git afterwards. Dotfiles like .env (deployment secrets) are left diff --git a/.gitignore b/.gitignore index 597e36c..fe3e277 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,7 @@ # Deployment secrets (SESSION_SECRET, Gitea OAuth2 client id/secret) — lives # only on the server, see docs/deployment.adoc .env + +# Written by the CI deploy job with the commit it deployed — never +# committed itself, see app.rb's REVISION +/REVISION diff --git a/app.rb b/app.rb index 7bd129b..37677eb 100644 --- a/app.rb +++ b/app.rb @@ -39,6 +39,20 @@ module Maptool # the container) is enough — it doesn't need to survive restarts. ASSET_VERSION = Time.now.to_i + # Written by the CI deploy job (.gitea/workflows/ci.yml) right before it + # drops .git from the deployed copy, so this is the only way to tell + # which commit is actually live short of asking the deploy job itself — + # handy for exactly the kind of "did my push actually deploy, or am I + # looking at a stale browser cache" confusion ASSET_VERSION above can't + # answer by itself (that only proves *a* deploy happened recently, not + # *which* one). Absent outside a real deploy (local dev, CI's own + # `check` job), hence the fallback. + REVISION = begin + File.read(File.join(__dir__, "REVISION")).strip + rescue Errno::ENOENT + "dev" + end + # Overridable so the test suite can point this at a throwaway directory # instead of the real data/ — nothing else needs to set this. DATA_DIR = ENV.fetch("MAPTOOL_DATA_DIR") { File.join(__dir__, "data") } @@ -151,7 +165,7 @@ module Maptool end get "/" do - erb :index, locals: { logged_in: logged_in?, user: session[:user] } + erb :index, locals: { logged_in: logged_in?, user: session[:user], revision: REVISION } end get "/api/health" do diff --git a/views/index.erb b/views/index.erb index b44fc25..43cfb35 100644 --- a/views/index.erb +++ b/views/index.erb @@ -1,6 +1,6 @@
- MapTool + MapTool
<% if logged_in %> <%= user %>