Author SHA1 Message Date
austin cc985f81d3 Update dependency lucide-react to v1.40.0
renovate/artifacts Artifact file update failure
build-and-publish / build (pull_request) Failing after 2m23s
2026-09-03 17:25:55 +00:00
austin 1b276c962b Merge pull request 'A pull request must not touch :latest' (#12) from ci/pr-image-tag into main 2026-07-27 09:58:25 -05:00
austin e9e7671644 A pull request must not touch :latest
This runner builds on the host's Docker daemon — the same daemon the live
container runs on — so retagging :latest IS a deployment. Watchtower compares
the running container's image against :latest, sees they differ, and recreates
the container from whatever was just built locally. Gating only the push was
never enough; the build itself was the deploy.

The worse failure is quieter. Reassigning :latest leaves the running
container's old image untagged, and once that image is pruned Watchtower can no
longer read it to compare against:

  Failed to retrieve container image info: No such image: sha256:…
  Unable to update container: no available image info.

bennett-portfolio hit exactly that. It sat on a four-day-old build, failing to
update 720 times in twenty-four hours, reporting healthy the whole time, and had
to be recreated by hand. This repo has the same workflow and the same exposure —
it simply has not been unlucky yet.

A PR now builds pr-<number>, which nothing watches. Trivy scans whatever was
built either way, so a bad Dockerfile or a new CVE still blocks the merge, and
the push step is unchanged — still main-only.
2026-07-27 09:53:24 -05:00
austin a816a5dabd Merge pull request 'Update bennett platform to v0.1.10' (#11) from renovate/bennett-platform into main 2026-07-26 21:59:39 -05:00
austin 2b353f7aea Update bennett platform to v0.1.10 2026-07-27 02:57:35 +00:00
austinandaustin 576e9af13f docs: add CONTRIBUTING guide (#9)
Co-authored-by: austin <[email protected]>
2026-07-23 14:40:29 -05:00
austin 68d32ce9a9 Merge pull request 'CI: gate the merge on tests' (#8) from ci/gate-merge into main 2026-07-23 13:53:58 -05:00
austin 316ea39f93 CI: gate the merge, not just the image
Run the workflow on pull_request too, so tests + build + Trivy must pass before main can be
merged (branch protection requires this check). Push the image only on a real push to main —
never from a PR. Also standardises the workflow across all apps (three had drifted).
2026-07-23 13:53:57 -05:00
austin bf8d5f95f5 CI: actually run the tests, and let them gate the image
The image build runs 'mvn -DskipTests' and the workflow was only build -> Trivy -> push, so
no app test has ever run in CI — only Trivy gated a merge. The platform contract tests added
in 0.1.9 were not running either, which defeated their purpose.

They cannot run inside 'docker build' — Testcontainers needs a Docker daemon and a build has
none. Maven runs as a sibling container instead, mounting the workspace volume act_runner
gave this job (matched on GITHUB_WORKSPACE, since it is mounted at the full repo path rather
than at /workspace) and sharing the host network so published test ports resolve as localhost.

Verified on itsthevine before rolling out here: 33 tests ran, and a deliberately failing test
failed the run at the Test step with the registry digest unchanged — no image published.
2026-07-23 12:20:41 -05:00
austin d76cd40dd8 Restore the dependency upgrades I reverted
The merged Renovate bumps were undone when I rsync'd a local tree over these repos while
pushing the contract tests — that local package.json was a pre-merge backup I had kept so
the PRs would be the source of the versions.

Re-applied and verified from a clean install (rm -rf node_modules package-lock.json &&
npm install && tsc && vite build), which is also what regenerates a lock file consistent
with all the bumps at once.
2026-07-23 09:56:47 -05:00
austin 3d16144f40 Inherit the platform contract tests, and extend the shared Renovate preset
PlatformWebContract asserts what this app must do because it is on the platform: an /api
path matching no controller 404s rather than returning the SPA, health is UP, the liveness
and readiness probes exist, and a client-side route forwards to the shell. That first one
shipped broken to six live sites and was found by typing a URL by hand; now it fails a
build instead.

renovate.json is three lines pointing at austin/renovate-config. The rules were copied per
repo, so they matched only by luck and a change was six edits.

Platform 0.1.9.
2026-07-23 09:46:54 -05:00
austin 0ccfd1f055 Merge pull request 'Update dependency lucide-react to v1.26.0' (#6) from renovate/lucide-monorepo into main 2026-07-23 08:52:23 -05:00
austin 22fd88c0f6 Merge pull request 'Update dependency typescript to v7' (#2) from renovate/typescript-7.x into main 2026-07-23 08:50:51 -05:00
austin 2714cab0f7 Merge pull request 'Update bennett platform to v0.1.7' (#7) from renovate/bennett-platform into main 2026-07-23 07:44:08 -05:00
austin f1002351a0 Update bennett platform to v0.1.7 2026-07-23 12:44:07 +00:00
austin ef5680c654 Move search and the front-page decisions out of the browser into Java
Search downloaded every post to every visitor and filtered the list with String.includes,
so it could only ever match what a summary carries — a phrase from the body of a post was
unfindable, and the cost grew with each post published. It is now a query
(/api/posts/search) that searches the body too.

The home page picked 'the latest post' by taking element zero of that list, which was only
correct for as long as the API happened to return posts in that order. /api/home now
decides what leads, what counts as recent, and the tag counts, in one call.

Tag counting moves out of the controller into TagService, shared by both.

The LIKE escaping needed an explicit ESCAPE clause: there is no default escape character to
rely on, and posts are markdown full of literal backslashes — escaping with a backslash
turned a search for '%' into a search for backslashes and matched unrelated posts. Caught by
the new tests.

Also on platform 0.1.6 (contact-form header-injection fix).
2026-07-23 06:33:41 -05:00
austin 187161c1d1 Merge pull request 'Update bennett platform to v0.1.5' (#5) from renovate/bennett-platform into main 2026-07-23 03:28:49 -05:00
austin eacb4cd007 Update dependency lucide-react to v1.26.0 2026-07-23 08:28:48 +00:00
austin 2d1366d10e Update bennett platform to v0.1.5 2026-07-23 08:28:47 +00:00
austin 9990ac8166 Merge pull request 'Update bennett platform to v0.1.2' (#4) from renovate/bennett-platform into main 2026-07-22 21:28:37 -05:00
austin 0978b153ee Update bennett platform to v0.1.2 2026-07-23 02:28:35 +00:00
austin 4077540579 Pin Testcontainers to 1.x and skip rebuilds for config-only commits
Testcontainers 2.0 renamed the postgresql/junit-jupiter module artifacts, so the major
bump can't even be resolved — disable it rather than let a bot PR reopen it each run.
2026-07-22 21:22:43 -05:00
austin df4c95fd3f Update dependency typescript to v7 2026-07-23 02:21:08 +00:00
austin 180b80e649 Bump platform to 0.1.1 (netty HIGH CVE fixes)
Picks up netty 4.2.16.Final, patching CVE-2026-59901/-55831/-55833/-56745 which Trivy
gated on in the previous build.
2026-07-22 21:06:44 -05:00
austin f5362b04d4 Pin platform 0.1.0 release and wire up automatic propagation
- parent/BOM now point at the immutable 0.1.0 release instead of a SNAPSHOT
- declare the Gitea Maven registry so Renovate can discover new platform versions
- renovate.json: group platform bumps into one automerged PR
- CI: drop --no-cache (releases are immutable, so caching is safe again) and add
  workflow_dispatch so rebuild-all-apps.sh can force an urgent rebuild
2026-07-22 21:03:06 -05:00
austin 1b929a9125 Restore the app files (prior commit mis-scoped its tar) 2026-07-22 20:50:58 -05:00
austin 3827b615dc Add admin UI + MinIO image uploads
- Admin API: list/edit posts (incl. drafts, raw markdown), moderate comments, subscribers,
  author bio/links, and presigned image upload to MinIO (bucket is public-read for covers).
- Admin UI at /admin: post editor with cover-image upload, comment moderation, subscriber list.
- Public security switched to authenticated-paths so static assets (/images, /data) stay public.
2026-07-22 20:50:45 -05:00
austin 0c5bbaaa01 Rewrite as a Spring Boot app on the Bennett platform
Restores the real backend lost with Supabase (posts, authors, comments, subscriptions, admin) in
Postgres, seeds the existing markdown posts, and rebuilds the site as a Vite/React SPA served by
Spring — keeping the original styling (serif + tan accent) and content.
2026-07-22 20:35:51 -05:00
austin 10cd973e35 Refactor to static markdown (remove Supabase backend) + self-host build
Posts now read from data/posts/*.md via gray-matter + remark; authors derived
from posts. Removes admin dashboard, comments, subscriptions, and all Supabase
usage. Adds Dockerfile (Next.js standalone) + Gitea Actions CI. output: standalone.
2026-07-22 13:11:56 -05:00
Austin 76f1241761 added supabase 2026-02-20 09:12:47 -06:00
Austin 3c293159ff updated dependencies 2026-02-02 18:19:26 -06:00
austin ee98296e4a speed insights and analytics 2025-08-19 09:17:25 -05:00
austin a24df3141e speed insights and analytics 2025-08-19 09:13:50 -05:00
austin fc97869c19 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	package-lock.json
2025-08-19 09:10:28 -05:00
austin 41a463c81a speed insights and analytics 2025-08-19 08:56:53 -05:00
austin 6ddd0663c7 fixed metadata 2025-08-19 07:16:53 -05:00
austin f49a5ec9bf removed cloudflare 2025-08-18 15:19:14 -05:00
austin 6eb9a97583 fix 2025-08-18 14:56:55 -05:00
austin 583a0513d5 removed open-next 2025-08-18 14:53:04 -05:00
austin 3267b4a2c5 removed open-next 2025-08-18 14:51:39 -05:00
austin e397bbfc81 removed custom open-next 2025-08-18 14:25:45 -05:00
austin 94c09daa58 removed infinite loop 2025-08-18 14:18:35 -05:00
austin bd61dae4fb open-next build 2025-08-18 14:10:13 -05:00
austin f14ffae65f added asset binding 2025-08-18 13:58:57 -05:00
austin 11e27c3b3a removed assets binding 2025-08-18 13:52:31 -05:00
austin 4da16c8d70 :) 2025-08-18 13:50:03 -05:00
austin bb263cc6f9 updated favicon 2025-08-18 13:13:58 -05:00
austin 5ab7c7853c switched to approuter 2025-08-18 13:10:47 -05:00
austin 525009d881 wrangler 2025-08-18 11:30:28 -05:00
austinandGitHub 312b90a66e Update the-eternity-of-our-bodies.md 2025-08-15 18:17:31 -05:00
austinandGitHub 21482c76e1 Add files via upload 2025-08-15 18:17:14 -05:00
austinandGitHub 2777cb6ba8 Create the-eternity-of-our-bodies.md 2025-08-15 18:16:30 -05:00
austinandGitHub f8fdb3cc8c Delete .env 2025-06-13 18:07:56 -05:00
Auggie2lbcf 6669944dd5 authors 2025-06-13 17:54:41 -05:00
Austin Bennett 722f5e8f29 RWN 2025-05-29 07:33:40 -05:00
Austin Bennett d3afa9df64 reformed witness network 2025-05-29 07:32:53 -05:00
Austin Bennett 33146b6037 church finder 2025-05-29 07:28:35 -05:00
Austin Bennett 4db5a689be mongo -> supabase 2025-05-14 07:45:07 -05:00
Austin Bennett f0084a0f31 fixes 2025-05-13 18:20:11 -05:00
Austin Bennett 67880e9629 fixed date 2025-05-13 18:12:09 -05:00
austinandGitHub b9eac65d44 Merge pull request #7 from auggie2lbcf/valley-of-vision
valley of vision - adoration
2025-05-13 18:09:37 -05:00
Austin Bennett d1626a4e9e valley of vision 2025-05-13 18:04:57 -05:00
Austin Bennett 4182918b31 removed an env variable 2025-05-09 11:27:05 -05:00
Austin Bennett cef145d5c2 edge runtime 2025-05-09 11:16:25 -05:00
Austin Bennett 9521cde49a nvmrc 2025-05-09 11:14:15 -05:00
Austin Bennett 8cd346d87e A Certain Sound 2025-05-09 10:59:26 -05:00
austin 6b30e62219 working 2025-04-29 10:57:10 -05:00
austin 0547438969 more work 2025-04-28 14:30:37 -05:00
austin dbdfda5d01 stuff 2025-04-28 14:29:47 -05:00
Austin Bennett 3370382ce7 Added Etsy 2025-04-24 13:23:55 -05:00
Austin Bennett 32efeb4a01 updated tagline and icon 2025-04-24 13:05:15 -05:00
Austin Bennett 120da989cc more open graph 2025-04-22 10:20:10 -05:00
Austin Bennett 8a7b5958dc more open graph 2025-04-22 10:17:44 -05:00
Austin Bennett 6118b57513 more open graph 2025-04-22 10:12:50 -05:00
Austin Bennett dd432c3268 more open graph 2025-04-22 10:07:47 -05:00
Austin Bennett d0095e31ea more open grpah 2025-04-22 10:00:35 -05:00
Austin Bennett f0797716e2 more open graph 2025-04-22 09:58:05 -05:00
Austin Bennett f902f17573 more open graph 2025-04-22 09:51:35 -05:00
Austin Bennett 09087ba035 more open graph 2025-04-22 09:46:56 -05:00
Austin Bennett dddc049a32 open graph 2025-04-22 09:40:03 -05:00
austinandGitHub 2e4595c193 Merge pull request #6 from auggie2lbcf/25-books
add 25-books
2025-04-22 09:30:47 -05:00
Austin Bennett df45d105b2 typo in file name 2025-04-22 09:16:37 -05:00
Austin Bennett d87cfc1c9f post 2025-04-22 09:13:27 -05:00
austin 3463b3ceb8 working stille 2025-04-19 16:37:34 -05:00
austin 4629e24499 started work on vov series 2025-04-11 13:20:02 -05:00
austin 403e195d85 removed confession from title 2025-04-09 09:20:23 -05:00
austinandGitHub b9effb3e53 Merge pull request #5 from auggie2lbcf/nationalism
added nationalism post
2025-04-09 08:38:21 -05:00
austin dcbde2f888 fixed tags 2025-04-09 08:35:01 -05:00
austin 8d2a8c4bf6 finished 2025-04-09 08:33:51 -05:00
austin f8a0e58999 Merge remote-tracking branch 'origin/main' 2025-04-08 15:11:57 -05:00
austinandGitHub fd547e7d5b Merge pull request #4 from auggie2lbcf/comment-section
add comment section
2025-04-08 15:11:17 -05:00
austin 9b0810772b removed checkbox. will add back later 2025-04-08 15:08:49 -05:00
austin 2a0ff4130f local storage fix? 2025-04-08 13:49:53 -05:00
austin a6dc57e8a8 saved email & name 2025-04-08 13:48:11 -05:00
austin ef69a6c598 updated handler 2025-04-08 13:45:31 -05:00
austin da8e914a31 comment section? 2025-04-08 13:41:35 -05:00
austin 1e9f7ffd97 Merge remote-tracking branch 'origin/main' 2025-04-08 13:28:20 -05:00
austin dc193022d8 fixed db name 2025-04-08 13:21:30 -05:00
austin ec3d2998c3 test 2025-04-08 13:12:04 -05:00
austin 5689ee22b2 removed the second header 2025-04-07 22:07:58 -05:00
austin 97b420c745 added some historical Theology 2025-04-07 22:03:49 -05:00
austin 151ea34098 Merge branch 'nationalism'
# Conflicts:
#	package-lock.json
#	package.json
#	src/components/Layout.tsx
2025-04-07 21:01:37 -05:00
austinandGitHub 074424b742 Merge pull request #2 from auggie2lbcf/subscribe
subscribe
2025-04-07 18:41:00 -05:00
austin 494033c732 put back the side bar components 2025-04-07 18:40:05 -05:00
austinandGitHub 3eba3de62e Merge pull request #1 from auggie2lbcf/subscribe
added subscription functionality
2025-04-07 18:27:37 -05:00
austin 6dbffa6aa3 added subscription functionality 2025-04-07 18:25:19 -05:00
austin cfcccb5df9 started work 2025-04-05 22:50:07 -05:00
austin 6925899589 added speed insights 2025-03-20 14:51:36 -05:00
austin dcec3adaaf added analytics 2025-03-20 14:47:25 -05:00
austin 737b27e76d updated about 2025-03-20 14:22:52 -05:00
austin f1a2480f0a removed my picture 2025-03-20 14:05:50 -05:00
austin c1614f5581 added the 1689 2025-03-20 14:04:40 -05:00
austin fa5cfb7d49 2025-03-20 13:34:07 -05:00
austin c474cba4a6 standardized formatting 2025-03-20 11:35:59 -05:00
austin ef092a0be6 updated about 2025-03-20 08:12:03 -05:00
austin 8dc23e0dc3 image 2025-03-20 04:12:50 -07:00
austin 33d9d1680e added a favicon 2025-03-18 16:01:44 -05:00
austin f62f5a7ed5 fixed tags 2025-03-18 15:58:26 -05:00
austin 761be4b8a7 fixed the archive and added the 2lbcf 2025-03-18 15:57:32 -05:00
austin e8a82eef01 fixed image display 2025-03-18 15:50:37 -05:00
austin b08bdc5941 fixed images 2025-03-18 15:44:56 -05:00
austin 9fc8232614 removed comment section 2025-03-18 15:42:55 -05:00
austin 677c9c9a90 updated about 2025-03-18 15:38:38 -05:00
austin 8a9f1a226a removed firebase and dummy posts 2025-03-18 15:37:09 -05:00
austin 1120a7720a init with dummy posts 2025-03-18 15:07:45 -05:00
3 changed files with 35 additions and 7 deletions
+32 -4
View File
@@ -40,7 +40,35 @@ jobs:
mvn -B -ntp -s .gitea/ci-settings.xml -DskipFrontend=true verify
# Build + Trivy on every run (PRs included), so a broken Dockerfile or a new HIGH/CRITICAL CVE
# blocks the merge. Only the push is main-only.
# blocks the merge.
#
# A PULL REQUEST MUST NOT TOUCH THE :latest TAG. This runner builds on the host's Docker daemon —
# the same daemon the live container runs on — so retagging :latest IS a deployment: Watchtower
# compares the running container's image against :latest, finds they differ, and recreates the
# container from the locally built image. Gating only the push is not enough; the build is the
# deploy.
#
# The damage is not only that unmerged code ships. Reassigning :latest leaves the running
# container's old image untagged, and once that image is pruned Watchtower can no longer read it
# to compare against, so it gives up every cycle:
#
# Failed to retrieve container image info: No such image: sha256:…
# Unable to update container "/<name>": no available image info.
#
# That happened to bennett-portfolio on 2026-07-27: it sat on a four-day-old build, failing to
# update 720 times in twenty-four hours, reporting healthy throughout. It had to be recreated by
# hand. This repo has the same workflow and the same exposure.
#
# So a PR builds pr-<number>, which nothing watches. Trivy scans whatever was built, and the push
# step below still only runs off a PR.
- name: Choose the image tag
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "IMAGE_TAG=pr-${{ github.event.number }}" >> "$GITHUB_ENV"
else
echo "IMAGE_TAG=latest" >> "$GITHUB_ENV"
fi
- name: Build image
env:
DOCKER_BUILDKIT: "1"
@@ -51,17 +79,17 @@ jobs:
--secret id=maven_user,env=MAVEN_USER \
--secret id=maven_token,env=MAVEN_TOKEN \
--build-arg GIT_SHA=${{ github.sha }} \
-t git.thebennett.net/reformedwitness/confessions-of-grace:latest -t git.thebennett.net/reformedwitness/confessions-of-grace:${{ github.sha }} .
-t "git.thebennett.net/reformedwitness/confessions-of-grace:$IMAGE_TAG" -t git.thebennett.net/reformedwitness/confessions-of-grace:${{ github.sha }} .
- name: Scan image (Trivy)
run: |
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy:latest image --scanners vuln --severity HIGH,CRITICAL --ignore-unfixed --no-progress \
git.thebennett.net/reformedwitness/confessions-of-grace:latest || true
"git.thebennett.net/reformedwitness/confessions-of-grace:$IMAGE_TAG" || true
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy:latest image --scanners vuln --severity HIGH,CRITICAL --ignore-unfixed \
--pkg-types library --exit-code 1 --no-progress \
git.thebennett.net/reformedwitness/confessions-of-grace:latest
"git.thebennett.net/reformedwitness/confessions-of-grace:$IMAGE_TAG"
# Publish only on a real push to main (or manual dispatch) — never from a pull request.
- name: Push image
+1 -1
View File
@@ -11,7 +11,7 @@
"dependencies": {
"clsx": "2.1.1",
"date-fns": "4.4.0",
"lucide-react": "1.27.0",
"lucide-react": "1.40.0",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"react-router-dom": "7.18.1",
+2 -2
View File
@@ -7,7 +7,7 @@
<parent>
<groupId>net.thebennett.platform</groupId>
<artifactId>platform-parent</artifactId>
<version>0.1.9</version>
<version>0.1.10</version>
<relativePath/>
</parent>
@@ -26,7 +26,7 @@
<dependency>
<groupId>net.thebennett.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>0.1.9</version>
<version>0.1.10</version>
<type>pom</type>
<scope>import</scope>
</dependency>