mhoennig and Claude Fable 5
355d8ae90f
Record the vm2176 retirement and redirect setup in plan step 15
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-10 16:56:22 +02:00
mhoennig and Claude Fable 5
4ca077da80
Document the initial build burst after the first server start
...
Investigating six near-simultaneous builds on vm4006 showed no duplicate
enqueue: they were six distinct recently-active origin branches, each built
once by the documented new-origin-branch rule (in a fresh clone every origin
branch counts as new). The watcher already guards against duplicates per
branch and per commit, with test coverage; only the first-start behavior was
undocumented.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-10 16:33:04 +02:00
mhoennig and Claude Fable 5
9e7982ce34
Add self-contained runtime bundle distribution (jlink) for hosts without Java
...
./gradlew runtimeBundle packs a jlink-trimmed JRE, gittally.jar, and a
launcher script into one tarball, unpacked to ~/opt/gittally on the target
host; init --systemd works from the bundle unchanged because java.home and
the running-jar path resolve into it. Chosen over a GraalVM native image
(Spring AOT evaluates bean conditions at build time, which cannot represent
the dual-context CLI/server wiring) and over a containerized runtime — see
ADR 0006 and docs/plan/15-runtime-bundle-distribution.md, which also records
the full vm2176-to-vm4006 migration walkthrough.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-10 15:35:35 +02:00
mhoennig and Claude Fable 5
8b71d0db8e
Fix Docker builds under rootless daemons and expose git metadata to build containers
...
Two fixes from the vm4006 rollout (docs/plan/16-git-in-docker-builds.md):
Rootless daemons map the host user to container root, so running the build
container as --user <host-uid> put it into the subuid range and it could not
even create .gradle in a fresh worktree (legacy only worked because its
ownership-repair chown had accidentally moved build/ and .gradle/ into subuid
ownership in its reused primary checkout). The container now always runs as
--user 0: the unprivileged host user under rootless, real root under rootful
where the ownership repair still applies; under rootless it degenerates to 0:0.
Git now works inside build containers: the primary .git is mounted read-only
with .git/gittally/ masked by an empty tmpfs (git.token and the control token
stay unreachable, the workspace bind resurfaces only the build's own worktree)
and the worktree admin dir mounted read-write for index-refreshing commands.
Verified on vm4006: git log/status succeed, the machine config is invisible,
ref writes fail on the read-only mount.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-10 15:34:39 +02:00
mhoennig
66183f9765
Add build-phase timing and overhead optimization plan to docs
2026-08-10 13:32:17 +02:00
Michael Hoennig
fb6d4501b9
Added worktree-layered build config: resolves .gittally.yml from the worktree for per-branch build settings, with precedence worktree > .git > project; pinned secrets, server-side keys, and sandbox policy to .git.
2026-07-09 09:20:34 +02:00
Michael Hoennig
095e6fa44f
PR-doc: split config precendence and hosisting TODO 9
2026-07-09 07:08:10 +02:00
Michael Hoennig
b21b8b8a28
Security Report
2026-07-09 06:32:49 +02:00
Michael Hoennig
347efc16c5
standardized JAR naming to gittally.jar (version-free); updated scripts, docs, and build config to align; added --version support via BuildProperties
2026-07-08 22:45:23 +02:00
Michael Hoennig and Claude Fable 5
d0b38c557a
added age-based build retention: artifacts.retentionMaxAge (e.g. 30d, empty = no limit) drops builds older than the given age; combines with retentionPerBranch as independent caps — a build is kept only while it satisfies both limits; a branch's newest build is never age-pruned and keepLatestGreen now shields the latest green build from both limits, keeping the permanent /branches/... links valid
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-08 22:35:31 +02:00
Michael Hoennig and Claude Fable 5
b104eeee05
added opt-in managed nginx/TLS container (ADR 0005, plan step 13): server.nginx.* config serves GitTally over HTTPS on hosts without a reverse proxy — two-phase startup (ACME webroot via certbot container, then full HTTPS config), daily certificate renewal with nginx reload, labelled container removed on shutdown; all failures are non-fatal, the plain HTTP server keeps running
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-08 21:51:33 +02:00
Michael Hoennig
3fe44135cc
Merge branch 'feature/permanent-artifact-links'
2026-07-08 15:51:02 +02:00
Michael Hoennig and Claude Fable 5
fd326f03fc
made the pull-request gate configurable: added watcher.pullRequestGate (default true); set false for plain-git origins without pull-request refs, so requirePullRequest gates are ignored and gated branches build on new commits; added the PR-doc
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-08 15:50:45 +02:00
Michael Hoennig and Claude Fable 5
bb06c8b731
added permanent artifact links for latest green builds: /branches/<branch-key>/... serves the latest green build's artifacts (green-only, resolved per request), keepLatestGreen retention protection, permanent artifact-index page, and latestGreenUrl links in the branches view
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-08 15:35:16 +02:00
Michael Hoennig
83e70e73c3
added .claude/skills: introduced on-demand skill guides for architecture, PR documentation, and testing conventions; updated AGENTS.md to reference new skills
2026-07-08 15:20:37 +02:00
Michael Hoennig
39fb4e3492
added PR documentation guidelines and template: introduced docs/prs/README.md and TEAMPLATE.md
2026-07-08 07:03:17 +02:00
Michael Hoennig
0b17537b7c
ads PR-triggered builds
2026-07-08 06:32:40 +02:00
Michael Hoennig
0e3f97db62
enhanced setup-gittally-testserver.sh: added a second origin branch (feature/demo) to improve Branches view during UI/API smoke tests; updated documentation accordingly
2026-07-07 15:40:07 +02:00
Michael Hoennig
d3a69a151a
updated artifact links: added target="_blank" and rel="noopener noreferrer" to ensure external logs and reports open in a new tab; updated docs and tests accordingly
2026-07-07 15:39:59 +02:00
Michael Hoennig
a659cd6764
reintroduced legacy Branches view: added /branches endpoint for listing origin branches and their latest builds (or unknown for never-built branches), updated UI with reload button and navigation, and enhanced API and tests
2026-07-07 15:16:01 +02:00
Michael Hoennig
f1f5946ac4
added setup-gittally-testserver.sh: example script for running a test server with a fake build, including configuration for manual UI/API smoke tests, and updated documentation
2026-07-07 14:47:34 +02:00
Michael Hoennig
142bc87604
added ADR 0005 and step 13: reintroduce managed nginx+certbot as an opt-in feature for hosts without a reverse proxy (e.g. Hostsharing); partially supersedes ADR 0004; updated plans, documentation, and migration guides
2026-07-07 14:40:11 +02:00
Michael Hoennig
f6a876b29b
updated setup-gittally-selfhost.sh: clarified config generation behavior, added systemd setup instructions, and refined comments for improved usability
2026-07-07 14:18:55 +02:00
Michael Hoennig
60ff595a9d
implemented 12-deployment.md: added systemd service generation (init --systemd) and migration guide from legacy script; introduced JSON-file persistence, server-rendered UI with polling, and reverse-proxy-based deployment; updated documentation
2026-07-07 14:18:41 +02:00
Michael Hoennig
e869b46cbf
implemented 11-docker-build-runtime.md: added optional Docker-based build execution with configuration, per-branch runtime selection, image rebuild on input changes, Gradle cache volume, and ownership repair; updated docs and configuration
2026-07-07 13:49:08 +02:00
Michael Hoennig
73221a8b8b
implemented 10-cli-commands.md: added CLI commands for branch name resolution, one-shot builds, failed build retries, and build status reports; includes tests for functionality and edge cases
2026-07-07 13:19:29 +02:00
Michael Hoennig
a6a2c9de0b
implemented 09-system-metrics.md: added system metrics: introduced system monitoring with a metrics collector, REST API endpoint, Thymeleaf UI rendering, and lifecycle management
2026-07-07 12:55:11 +02:00
Michael Hoennig
67c9f0ade9
added setup-gittally-selfhost.sh: example script for setting up a self-hosted GitTally instance
2026-07-07 12:23:30 +02:00
Michael Hoennig
25a0742a58
implemented 08-web-ui.md: added Thymeleaf-based web UI: templates for builds, artifacts, current builds, and fragments; static assets for favicon, CSS, and JavaScript
2026-07-07 12:23:12 +02:00
Michael Hoennig
490914de0b
implemented 07-server-mode.md: added server profile with REST API for builds, artifacts, live logs, and control tokens; lifecycle management for watcher; controller and service tests
2026-07-07 11:27:27 +02:00
Michael Hoennig and Claude Fable 5
a1db450bdb
implemented 06-watcher.md: non-blocking poll cycle enqueueing changed/new/auto-build branches via the async executor, startup recovery, retention/worktree pruning, JSON auto-build slot state, watcher.pollInterval config, and watcher health state
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 10:28:28 +02:00
Michael Hoennig and Claude Fable 5
3c9eeda5da
implemented 05-artifact-store.md: filesystem artifact store with legacy-compatible naming, atomic persist from concurrent builds, retention pruning, and artifacts.rootDir config
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 10:08:40 +02:00
Michael Hoennig and Claude Fable 5
b379bc0a6b
implemented 04-build-executor.md incl. concurrency amendment: async builds in per-branch worktrees, builds.maxConcurrent, cancellation, live logs; fix .gitignore build/ rule that silently excluded the de.hoennig.gittally.build package (also recovers the step-01 domain files)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 08:43:28 +02:00
Michael Hoennig
ae3ae7aa04
implemented 03-gitea-client.md: added Gitea API client for commit statuses, status mapping, and extensive tests
2026-07-07 07:34:18 +02:00
Michael Hoennig
a427665ce8
implemented 02-git-gateway.md: added Git access layer with credentials bridge, duration parser, and extensive tests
2026-07-07 07:10:38 +02:00
Michael Hoennig
f4a6ec9194
implemented 01-build-state-domain: add execution notes and jackson-datatype-jsr310 dependency
2026-07-07 06:53:04 +02:00
Michael Hoennig
38e080814e
update CLAUDE.md with rewrite plan documentation reference in docs/pland directory
2026-07-07 06:40:27 +02:00
Michael Hoennig
8b6c6de1ea
add bootstrapping.md
2026-06-10 17:27:06 +02:00
Michael Hoennig
02b08306e1
added configuration.md
2026-06-09 17:04:07 +02:00
Michael Hoennig
117caf12a9
upgrade to Spring Boot 4.2.1
2026-06-09 16:05:12 +02:00
Michael Hoennig
a030f7abb6
add ADRs for gradle and spring boot version and version smoke-tests
2026-06-09 15:20:21 +02:00
Michael Hoennig
84ca8b441c
add adr-status + direnv
2026-06-09 14:31:35 +02:00
Michael Hoennig
7b01aaa9a2
add ADR regarding test-framework
2026-06-09 13:07:02 +02:00
Michael Hoennig
e6a1cc124d
add ADR template
2026-06-09 12:35:55 +02:00
Michael Hoennig
fdc659960d
initial revision with vibe-coded shell script and new design document
2026-06-09 10:17:35 +02:00