# Maintainer: bigbes # # Built by builds.sr.ht (.build.yml) and published to our own apk repo at # repo.bigb.es/alpine/v3.22/bigbes. The srht deployment installs it from there # instead of cloning and compiling this repo inside its Dockerfile. # # pkgver is READ FROM THE ENVIRONMENT, not sed-ed into this file. The `version` # task of .build.yml runs one `git describe` and exports PKGVER as whichever of # three shapes that produces: the tag (`0.2.0`), the tag plus commits since it # (`0.2.0_git7`, because Alpine's grammar rejects `v0.2.0-7-gabc1234` and `_git` # sorts after the release), or `0.0.` when there are no tags at # all — which is this repository today. Do not restate one of the three here as # if it were the rule; see docs/ci.md#version. # # Nothing rewrites a tracked file, and that is not a style choice: Go records # vcs.modified in every binary it builds inside a repository, it reads that flag # from `git status --porcelain`, and a CI task that patched this line would # therefore stamp "+dirty" into every packaged binary for the life of the apk. # Measured on go1.26.5; .gitignore covers the rest of what abuild writes into # the checkout. # # A local `abuild` has no PKGVER and builds 0.0.0, which is what a package built # by hand honestly is. pkgname=compare.sr.ht pkgver="${PKGVER:-0.0.0}" pkgrel=0 pkgdesc="Stateless diff/compare viewer for a sourcehut instance" url="https://sourcecraft.dev/bigbes/sr-ht-compare" arch="x86_64" license="MIT" # !check — the Go tests need a live git.sr.ht API, not available in the VM # !tracedeps — CGO_ENABLED=0, so there are no shared-object deps to trace options="!check !tracedeps" # No source= : CI builds the checkout it was handed, so abuild works in place # rather than fetching a tarball. builddir points at the repo root, which is the # directory holding this APKBUILD. source="" builddir="$startdir" build() { cd "$builddir" # abuild redirects GOCACHE into $tmpdir (wiped after packaging), and an # upstream typo makes GOMODCACHE follow GOCACHE's value rather than its # own. Re-pin both to the stable home locations here — after abuild's own # exports — so CI's cache_restore/cache_save tasks see them survive. export GOCACHE="$HOME/.cache/go-build" export GOMODCACHE="$HOME/go/pkg/mod" # CSS strictly before the binary: web/ go:embed-s static/, so a stylesheet # built afterwards would never make it into the binary. The shared scss # partials are assembled at ASSETS/scss by the `scss` task of .build.yml — # no apk ships them. # # The frontend bundle is NOT built here: web/static/bundle..js is # committed, and building it would want npm and a network. `make bundle` is # an upgrade step, run by hand. make css ASSETS=/usr/share/sourcehut # web/static/main.min..css is still COMMITTED in this revision, and # `make css` has just replaced it. These two lines are how the first CI run # reports whether the pipeline reproduces the committed bytes: a clean # `git status` here means the committed file can be dropped from the tree, # and anything else names the difference. See docs/ci.md#css. # # `|| true` because a diagnostic must never be the reason a build fails. git status --porcelain -- web/static || true sha256sum web/static/main.min.*.css || true # -modcacherw matters beyond convenience: without it the module cache is # extracted read-only, and the CI cache tarball made from it can't be # unpacked on the next build (mkdir into 0555 dirs fails). CGO_ENABLED=0 make build GOFLAGS="-trimpath -modcacherw" # `go build` succeeds perfectly well with an unstyled static/ — //go:embed # takes the directory, not the file — so a `make css` that produced nothing # would ship an unstyled service and fail nothing. This is the gate, and it # runs before anything is staged. make check-css } package() { cd "$builddir" # The Makefile honours DESTDIR; ASSETS must stay the real runtime path so # the binary's static-dir glob resolves after install. # # `install-files` and not `install`, because this function must not compile. # abuild runs package() in a FRESH abuild process under fakeroot, which # re-sources this file and never calls build() — so the GOCACHE/GOMODCACHE # pins above are gone here, $(BIN) is .PHONY and `install` depends on # `build`, and `make install` would therefore relink the binary from a cold # cache. The apk would then ship a second compilation that nothing in this # file has looked at. `install -Dm755` on a missing comparesrht is a fatal # error naming the file, so a package() reached without a build() says so. make install-files DESTDIR="$pkgdir" PREFIX=/usr ASSETS=/usr/share/sourcehut }