Installation
composer require demroos/versioning-bundle
Ensure Demroos\VersioningBundle\DemroosVersioningBundle::class is added to config/bundles.php.
Configuration
Override default settings in config/packages/demroos_versioning.yaml:
demroos_versioning:
provider: git_repository # or 'version_file', 'revision_file', 'initial'
version_file_path: '%kernel.project_dir%/VERSION' # if using version_file
default_version: '1.0.0' # fallback if no provider matches
First Use Case Access the version in Twig:
<p>App Version: {{ app.version }}</p>
Or in PHP:
$version = $this->getParameter('app.version');
Git-Based Versioning (Recommended)
git tag v1.0.0).git describe.Manual Version File
VERSION file in project root (e.g., 1.2.3).echo "1.2.3" > VERSION).Capistrano/Revision File
REVISION file.REVISION=abc123).app.version into all templates..env:
APP_VERSION=%app.version%
return $this->json(['version' => $this->getParameter('app.version')]);
2023_01_01_000000_create_users_table.php → 1.0.0).Demroos\VersioningBundle\Provider\VersionProviderInterface:
namespace App\Versioning;
use Demroos\VersioningBundle\Provider\VersionProviderInterface;
class CustomProvider implements VersionProviderInterface
{
public function getVersion(): string
{
return file_get_contents('/custom/path/to/version');
}
}
config/packages/demroos_versioning.yaml:
demroos_versioning:
providers:
custom: App\Versioning\CustomProvider
provider: custom
Git Provider Quirks:
v1.0.0, not release-1).default_version (configurable).git push --tags
File Permissions:
VERSION or REVISION files must be readable by the web server user.chmod 644 VERSION
Caching Issues:
php bin/console cache:clear
Symfony Flex Conflicts:
config/bundles.php (not config/packages/).php bin/console debug:config demroos_versioning
config/packages/dev/demroos_versioning.yaml:
demroos_versioning:
debug: true
Logs provider calls to var/log/dev.log.Custom Formatters:
Override the default SemVer formatter by creating a VersionFormatter service:
services:
app.version_formatter:
class: App\Versioning\CustomFormatter
tags: ['demroos_versioning.formatter']
Dynamic Version Logic: Combine multiple providers (e.g., Git tag + build number):
// In a custom provider
$gitVersion = $this->gitProvider->getVersion();
$buildNumber = $this->getBuildNumberFromEnv();
return "$gitVersion+$buildNumber";
Environment-Specific Versions: Use different providers per environment:
# config/packages/dev/demroos_versioning.yaml
demroos_versioning:
provider: initial # Use 0.1.0 in dev
# config/packages/prod/demroos_versioning.yaml
demroos_versioning:
provider: git_repository
# .github/workflows/release.yml
- name: Tag Release
run: |
git tag -a v${{ github.ref_name }} -m "Release ${{ github.ref_name }}"
git push origin v${{ github.ref_name }}
<script src="/js/app.{{ app.version }}.js"></script>
REVISION) in production logs. Use hashed versions instead.How can I help you explore Laravel packages today?