# compare.sr.ht — build scaffolding (git.sr.ht / sourcehut-dolt style). # # Go binary + Go-template SSR live under cmd/ and web/. The CSS is built from # the shared sourcehut scss partials with sassc; the frontend diff bundle is # built once with esbuild and vendored into web/static/. Node is a build-time # dependency only. SERVICE=compare.sr.ht BIN=comparesrht PREFIX?=/usr/local BINDIR?=$(PREFIX)/bin SHAREDIR?=$(PREFIX)/share ASSETS?=/usr/share/sourcehut STATICDIR?=$(ASSETS)/$(SERVICE)/static SASSC?=sassc SASSC_INCLUDE=-I$(ASSETS)/scss all: build # Compile the service into ./comparesrht. build: go build -o $(BIN) ./cmd/$(BIN) test: go test ./... # CSS pipeline: sassc -> minify -> content-hashed filename. The running # service globs web/static/main.min.*.css at startup, so the hash in the name # is the cache-busting version. Requires the shared scss partials to be # installed at $(ASSETS)/scss (core.sr.ht `make install`, which installs both # base.scss and bootstrap/scss there) and scss/main.scss to exist (phase 2b). # Produces exactly ONE web/static/main.min..css (old ones and the # intermediate main.css are removed). css: mkdir -p web/static rm -f web/static/main.css web/static/main.min.*.css $(SASSC) $(SASSC_INCLUDE) scss/main.scss web/static/main.css minify -o web/static/main.min.css web/static/main.css mv web/static/main.min.css \ web/static/main.min.$$(sha256sum web/static/main.min.css | cut -c1-8).css rm -f web/static/main.css # Frontend diff/tree bundle: built once, output committed to web/static. The # filename carries a content hash (like the CSS) so a deploy busts the browser # cache — a stale bundle.js is otherwise served for up to max-age and can leave # the file tree rendering blank after an upgrade. Produces exactly ONE # web/static/bundle..js (old ones removed). bundle: mkdir -p web/static rm -f web/static/bundle.js web/static/bundle.*.js cd frontend && npm ci && \ npx esbuild src/app.ts --bundle --minify --format=esm \ --outfile=../web/static/bundle.js mv web/static/bundle.js \ web/static/bundle.$$(sha256sum web/static/bundle.js | cut -c1-8).js # Local development run. Requires a ./config.ini in the working directory (or # ../config.ini, /etc/sr.ht/config.ini): copy config.example.ini and fill in the # instance's shared [sr.ht]/[webhooks] keys, plus a [git.sr.ht] repos root and an # api-origin pointing at a real (or stubbed, see contrib/dev-stub) GraphQL API. # See the "Development" section of README.md for the full recipe. run-dev: build ./$(BIN) -b localhost:5090 install: build install -Dm755 $(BIN) $(DESTDIR)$(BINDIR)/$(BIN) mkdir -p $(DESTDIR)$(STATICDIR) install -Dm644 -t $(DESTDIR)$(STATICDIR) web/static/* .PHONY: all build test css bundle run-dev install