使用 git 描述嵌入 laravel 应用程序版本
Embed laravel application version using git describe
我想找到一种优雅的方式来嵌入输出:
git describe --long > app\version.tmp
到我的 Laravel 5 应用程序。请注意,我不需要自动执行命令的方法。
我想将输出重定向到一个文件,然后在 Laravel 中的自定义配置文件中读取它。但是我觉得不优雅。
还有其他建议吗?
注一:
这就是我想使用的:
<?php
return [
'version' => preg_replace('/[^A-Za-z0-9.\-]/', '',file_get_contents(app_path() . '\version.tmp')),
];
对于我的应用程序,我有一个 "About" 对话框,用户可以通过菜单访问该对话框。 "About" 对话框显示当前版本号和简短的 git 提交哈希。
我在 .env
文件中以两个值存储我的版本信息:APP_VERSION
和 APP_HASH
。这些值呈现到对话框的 HTML 中。
我通过简短的 BASH 脚本更新这些值(见下文)。我有一个准备应用程序发布的构建过程(从 less 重建 CSS,最小化我的 CSS & JS,复制生产 .env
文件,以及其他一些东西),所以我每当我准备发布应用程序更新时执行此脚本。
这是 bash 脚本:
#!/bin/bash
# store the production .env file outside my development environment. It will
# be copied when I build the application
#
PRODUCTION=/path/to/production/.env
# store the local (development) .env file in the development environment
#
LOCAL=./.env
# get the git hash value
#
CURRENT_GIT_HASH=$(git rev-parse --short HEAD)
# get the new version number from the command line
#
NEW_VERSION=""
# get the old version number from the production .env file
#
OLD_VERSION=$(grep -P "^APP_VERSION=[0-9]+\.[0-9]+\.[0-9]+$" "$PRODUCTION" | grep -Po "([0-9]+\.[0-9]+\.[0-9]+)")
echo "Current version = $OLD_VERSION"
# check to see if the version number is valid
#
CHECK=$(echo "$NEW_VERSION" | grep -P "^[0-9]+\.[0-9]+\.[0-9]+$")
# do we have a new version number? if so, check to see if it's changed
#
if [ -n "$NEW_VERSION" ]; then
# do we have a valid version number? if not, let the user know
#
if [ -z "$CHECK" ]; then
echo "Invalid version number: $NEW_VERSION"
else
echo "Bumping version to $NEW_VERSION ($CURRENT_GIT_HASH)"
# update the version number
#
sed -ri "s/APP_VERSION=[0-9]+\.[0-9]+\.[0-9]+/APP_VERSION=$NEW_VERSION/" "$PRODUCTION"
sed -ri "s/APP_VERSION=[0-9]+\.[0-9]+\.[0-9]+/APP_VERSION=$NEW_VERSION/" "$LOCAL"
# update the version number
#
sed -ri "s/APP_HASH=[0-9a-f]+/APP_HASH=$CURRENT_GIT_HASH/" "$PRODUCTION"
sed -ri "s/APP_HASH=[0-9a-f]+/APP_HASH=$CURRENT_GIT_HASH/" "$LOCAL"
# tag the current commit with the version number
#
git tag -a "bump-$NEW_VERSION" -m "bump version from $OLD_VERSION to $NEW_VERSION"
fi
fi
这可能比您正在做的要复杂一些,但它的好处是可以通过标准 env()
辅助函数获得版本号和哈希值。
本着与 Kryten 的回答相同的理念,我将我使用 powershell 所做的事情放在这里:
function setConfigValue( $file, $key, $value ) {
$content = Get-Content $file
if ( $content -match "^$key\s*=" ) {
$content -replace "^$key\s*=.*", "$key=$value" |
Set-Content $file
} else {
Add-Content $file "$key=$value"
}
}
$ver = &"git" describe --long | Out-String
setConfigValue ".\.env" "APP_VERSION" $ver
我想找到一种优雅的方式来嵌入输出:
git describe --long > app\version.tmp
到我的 Laravel 5 应用程序。请注意,我不需要自动执行命令的方法。
我想将输出重定向到一个文件,然后在 Laravel 中的自定义配置文件中读取它。但是我觉得不优雅。
还有其他建议吗?
注一:
这就是我想使用的:
<?php
return [
'version' => preg_replace('/[^A-Za-z0-9.\-]/', '',file_get_contents(app_path() . '\version.tmp')),
];
对于我的应用程序,我有一个 "About" 对话框,用户可以通过菜单访问该对话框。 "About" 对话框显示当前版本号和简短的 git 提交哈希。
我在 .env
文件中以两个值存储我的版本信息:APP_VERSION
和 APP_HASH
。这些值呈现到对话框的 HTML 中。
我通过简短的 BASH 脚本更新这些值(见下文)。我有一个准备应用程序发布的构建过程(从 less 重建 CSS,最小化我的 CSS & JS,复制生产 .env
文件,以及其他一些东西),所以我每当我准备发布应用程序更新时执行此脚本。
这是 bash 脚本:
#!/bin/bash
# store the production .env file outside my development environment. It will
# be copied when I build the application
#
PRODUCTION=/path/to/production/.env
# store the local (development) .env file in the development environment
#
LOCAL=./.env
# get the git hash value
#
CURRENT_GIT_HASH=$(git rev-parse --short HEAD)
# get the new version number from the command line
#
NEW_VERSION=""
# get the old version number from the production .env file
#
OLD_VERSION=$(grep -P "^APP_VERSION=[0-9]+\.[0-9]+\.[0-9]+$" "$PRODUCTION" | grep -Po "([0-9]+\.[0-9]+\.[0-9]+)")
echo "Current version = $OLD_VERSION"
# check to see if the version number is valid
#
CHECK=$(echo "$NEW_VERSION" | grep -P "^[0-9]+\.[0-9]+\.[0-9]+$")
# do we have a new version number? if so, check to see if it's changed
#
if [ -n "$NEW_VERSION" ]; then
# do we have a valid version number? if not, let the user know
#
if [ -z "$CHECK" ]; then
echo "Invalid version number: $NEW_VERSION"
else
echo "Bumping version to $NEW_VERSION ($CURRENT_GIT_HASH)"
# update the version number
#
sed -ri "s/APP_VERSION=[0-9]+\.[0-9]+\.[0-9]+/APP_VERSION=$NEW_VERSION/" "$PRODUCTION"
sed -ri "s/APP_VERSION=[0-9]+\.[0-9]+\.[0-9]+/APP_VERSION=$NEW_VERSION/" "$LOCAL"
# update the version number
#
sed -ri "s/APP_HASH=[0-9a-f]+/APP_HASH=$CURRENT_GIT_HASH/" "$PRODUCTION"
sed -ri "s/APP_HASH=[0-9a-f]+/APP_HASH=$CURRENT_GIT_HASH/" "$LOCAL"
# tag the current commit with the version number
#
git tag -a "bump-$NEW_VERSION" -m "bump version from $OLD_VERSION to $NEW_VERSION"
fi
fi
这可能比您正在做的要复杂一些,但它的好处是可以通过标准 env()
辅助函数获得版本号和哈希值。
本着与 Kryten 的回答相同的理念,我将我使用 powershell 所做的事情放在这里:
function setConfigValue( $file, $key, $value ) {
$content = Get-Content $file
if ( $content -match "^$key\s*=" ) {
$content -replace "^$key\s*=.*", "$key=$value" |
Set-Content $file
} else {
Add-Content $file "$key=$value"
}
}
$ver = &"git" describe --long | Out-String
setConfigValue ".\.env" "APP_VERSION" $ver