Helpers to keep track of the version of your Laravel application.
spinen/laravel-version is a Laravel package for helpers to keep track of the version of your laravel application..
It currently has 8 GitHub stars and 23.149 downloads on Packagist (latest version 1.9.0).
Install it with composer require spinen/laravel-version.
Discover more Laravel packages by spinen
or browse all Laravel packages to compare alternatives.
Last updated
There are many times that it is nice to know the version of your application. At Spinen, we adhere to Semantic Versioning for our applications using git-flow. We keep a file in the root of our projects named VERSION with the current version. The CI/CD process modifies the VERSION file to append meaningful data. Then in the views we display the version like this <meta name="application-version" content="{{ $version }}">. Additionally, we have a smokescreen test to hit a /version route to make sure that the expected version of the site is running.
| Branch | Status | Coverage | Code Quality |
| ------ | :----: | :------: | :----------: |
| Develop | |
|
|
| Master | |
|
|
As side from Laravel >= 8, there are no packages that are required.
Install Version:
$ composer require spinen/laravel-version
The package uses the auto registration feature of Laravel 5.
You need a file, with the Semantic Version of your application. For example...
4.3.6
Then you can add additional data either manually or via your CI/CD pipeline to be similar to this...
4.3.6
feature/some_great_thing
sha:3c40a5b0d0a07973bd117a39b53367c9ff4d4cc0
build:11425
20190220170058+0000
Breakdown of the line of the file
| Line | Content | Source | Purpose |
| :----: | ------ | ------ | ------ |
| 1 | 4.3.6 | Original content in the VERSION file | Split on . to get major, minor, patch |
| 2 | "\n" | (Optional) New line | Readability |
| 3 | feature/some_great_thing | Name of branch | Becomes the pre_release |
| 4 | sha:3c40a5b0d0a07973bd117a39b53367c9ff4d4cc0 | Git commit SHA | Part of meta |
| 5 | build:11425 | Build number | Part of meta |
| 6 | 20190220170058+0000 | Datetime stamp of build | Part of meta |
Some notes about the file...
major.minor.patchpre_releasepre_release is master, then it gets ignoredpre_release get concatenated together with a . to become the meta, so there can be as many lines as you would likeThe Spinen\Version\Version object loads the configured version file to parse the file into the following public properties on the object...
| Property | Example | | ------ | ------ | | semver | 4.3.6-feature/some_great_thing+sha:3c40a5b0d0a07973bd117a39b53367c9ff4d4cc0.build:11425.20190220170058+0000 | | version | 4.3.6 | | major | 4 | | minor | 3 | | patch | 6 | | pre_release | feature/some_great_thing | | meta | sha:3c40a5b0d0a07973bd117a39b53367c9ff4d4cc0.build:11425.20190220170058+0000 |
You can inject Spinen\Version\Version into your code to gain access to the properties. For our use, here are 3 main uses of the package...
$version variable in views/version routeversion commandsAn instance of \Spinen\Version\Version is added to to all views as the $version variable. You can do things like...
<meta name="application-version" content="{{ $version }}"> to get <meta name="application-version" content="4.3.6-feature/some_great_thing+sha:3c40a5b0d0a07973bd117a39b53367c9ff4d4cc0.build:11425.20190220170058+0000">$version->semver<small class="app_version">{{ $version->version }}</small> to get <small class="app_version">4.3.6</small>Visiting /version will return the version...
$ curl https://localhost/version
4.3.6-feature/some_great_thing+sha:3c40a5b0d0a07973bd117a39b53367c9ff4d4cc0.build:11425.20190220170058+0000
The following artisan commands are added...
| Command | Description | | ------ | ------ | | version | Display full version of the application. | | version:major | Display major version of the application. | | version:meta | Display meta version of the application. | | version:minor | Display minor version of the application. | | version:patch | Display patch version of the application. | | version:pre_release | Display pre_release version of the application. | | version:semver | Display semver version of the application. |
Publish the package config file to config/version.php:
$ php artisan vendor:publish --tag version-config
This file is fully documented. You will need to make the changes to that file to suit your needs. There are 3 main configuration items...
file - Name of the file that has the versionroute - Configuration of the route to display the versionview - Configuration of the view composer to add the version to the viewsWe use GitLab, so here is a partial example job that we have in our .gitlab-ci.yml...
version:
stage: build
image: php7.2
dependencies: []
script:
- echo "" >> VERSION
- echo "${CI_COMMIT_REF_NAME}" >> VERSION
- echo "sha:${CI_COMMIT_SHA}" >> VERSION
- echo "build:${CI_PIPELINE_ID}" >> VERSION
- date +"%Y%m%d%k%M%S%z" >> VERSION
artifacts:
name: "${CI_BUILD_NAME}_${CI_BUILD_REF_NAME}-version"
paths:
- VERSION
expire_in: 3 days