使用 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_VERSIONAPP_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