spiriitlabs/commit-history-bundle
SpiriitLabs Commit History Bundle adds a simple Symfony interface for browsing your project's Git commit history. View commits, authors, dates, and messages directly in your app, making release notes and change tracking easier without leaving the admin.
CHANGELOG.md plus a bespoke admin page with a config-driven commit timeline. Weeks of UI plumbing (import, storage, list/timeline rendering) collapse into a bundle install, one config file, and a console command in the deploy pipeline./changelog page and an in-app "What's new" panel with unread tracking. That reframes an obvious ops-tooling decision into a product-loop decision: is announcing shipped features worth the surface area?Bundle class, DI configuration, a Doctrine entity, a console command, and Twig templates. For a Laravel product the decision reframes to "reimplement the git-log importer as an artisan command" or stand up a small Symfony sidecar. Worth knowing before it appears in a sprint plan and gets scoped as a drop-in.Consider adopting when:
git binary and a full (non-shallow) clone — or you're willing to implement the bundle's Provider interface against a GitHub/GitLab/Jira API instead, which is often the better call for containerised deploys./changelog page or admin timeline now, and today's release notes are either missing or maintained inconsistently.Look elsewhere when:
proc_open on git is blocked in many PHP images, and --depth=1 clones silently produce a one-commit history that looks like a broken importer.On V1.1.0 specifically: the release ships with only a compare link and no enumerated changes. Treat the minor bump as low-risk but unverified: diff vendor/spiriitlabs/commit-history-bundle between V1.0.1 and V1.1.0 and check for renamed config keys, entity schema changes, renamed console commands, and new Symfony/PHP constraints before upgrading. Keep the recommendation at "evaluate/pilot" until then.
For executives: "We can publish an always-current product changelog — automatically, from the commits engineering already writes — and optionally surface a 'What's new' panel inside the app. It removes a documentation chore from the team, shortens dispute and support conversations by making 'what shipped and when' answerable in seconds, and gives us a low-cost transparency signal. The trade-offs are modest: an extra MIT-licensed dependency, a small integration slice, and ongoing storage/pipeline hygiene. It also only fits our Symfony admin — it is not a decision we can carry over to a Laravel product, and it is not a compliance-grade audit system."
For engineering: "A Symfony bundle: bundle class, a config file owning the git repository path, a Doctrine entity plus an import console command, and Twig templates for rendering the vertical timeline. Integration is config plus one schema migration; the real work is operational, not code. Wire the import into the deploy pipeline after git pull — never per-request — and confirm the clone is full-depth. Rely on hash-based idempotency so re-runs are no-ops; if the installed version doesn't upsert by hash, wrap the command and dedupe. On hosts without a git checkout, implement the Provider interface against the GitHub/GitLab API rather than shipping a repo into the web container. Override Twig templates under templates/bundles/CommitHistoryBundle/ — anything patched in vendor/ disappears on the next composer update. Two things to own deliberately: sanitise commit message bodies before rendering as HTML (public page, attacker-controlled via outside PRs), and store UTC timestamps with formatting at render. Pin the version and review the vendor diff each release — V1.1.0 shipped with no written notes. If the requirement grows toward true audit trails or curated release notes, flag it early so we plan for it rather than retrofitting."
How can I help you explore Laravel packages today?