Automating the release workflow with scripting
Releasing a newer version of software often involves manually changing the version information, which usually means dealing with hard-coded strings. However, developers sometimes forget to change some of them. So why not write a script to save us from this? This article discusses the details of implementing such a script for releasing Laravel-based projects.
Version string in composer.json
Firstly, there is a field in composer.json
that indicates the current version of the project. Therefore, the script needs to access the composer.json
file. A simple but straightforward solution is documented below:
Firstly, we read the content of composer.json
to a variable
const composerJson = JSON.parse(fs.readFileSync('./composer.json', 'utf8')
Then we set the version to a new version and write it back
fs.writeFileSync('./composer.json', JSON.stringify(composerJson, null, 2))
Voila!
Version string in app.php
Next, we need a place for centralized control of version information that Laravel can easily access. And config/app.php
seems to be the right option. So we add a new key called version to config/app.php
. The implementation was similar to the previous one, but needed some small adjustments, and, regex to the rescue!
fs.writeFileSync('./config/app.php', appConfig.replace(/'version' => '.*',/g, `'version' => '${version}',`));
Commit it!
After making those changes, we can commit them with a message indicating a version release, and this can be done by the following commands.
execSync("git add . ")
execSync(`git commit --am "Release v$(version}"`);
It is also reasonable to create a new tag for the release.
execSync(`git tag -a v${version} -m "v${version}"`);
For Inertia.js users
If you want to share the version info to frontend, then don't forget to add this in your HandleInertiaRequests
middleware:
[
'appVersion' => config('app.version')
]