lbausch / build-metadata-laravel

v0.3.0 2022-11-11 18:16 UTC

This package is auto-updated.

Last update: 2024-09-18 09:37:19 UTC


README

tests codecov

保存任意构建元数据(提交SHA,构建日期等),与您的应用程序一起部署,并在需要时在运行时检索它们。

要求

  • PHP 8.1+
  • Laravel 9+

安装

composer require lbausch/build-metadata-laravel

使用

配置

如果默认配置不符合您的需求,您可以发布配置文件

php artisan vendor:publish --provider=Lbausch\\BuildMetadataLaravel\\ServiceProvider

保存构建元数据

在部署应用程序时,例如利用CI/CD流水线,以下命令将构建元数据写入配置文件

php artisan buildmetadata:save BUILD_REF=$CI_COMMIT_SHA BUILD_DATE=$(date +%s)

构建元数据永久缓存,因此需要在部署期间清除应用程序缓存,或者可以使用以下命令

php artisan buildmetadata:clear

Deployer配方

此包附带一个Deployer配方,它提供处理构建元数据的任务。

<?php

// deploy.php

namespace Deployer;

require 'vendor/lbausch/build-metadata-laravel/contrib/deployer/buildmetadata.php';

// ...

after('deploy:vendors', 'buildmetadata:deploy');

after('artisan:config:cache', 'buildmetadata:clear');

// ...

在运行时使用构建元数据

以下示例在视图组合器中检索构建元数据。

<?php

// app/Providers/ViewServiceProvider.php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
use Lbausch\BuildMetadataLaravel\BuildMetadataManager;

class ViewServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot(BuildMetadataManager $manager)
    {
        $metadata = $manager->getMetadata();

        View::composer('*', function ($view) use ($metadata) {
            $view->with('BUILD_REF', $metadata->get('BUILD_REF', 'n/a'));
        });
    }
}

回调

beforeCaching

此回调在元数据永久缓存之前执行,可以用来更改一些数据。

<?php

// app/Providers/AppServiceProvider.php

namespace App\Providers;

use Carbon\Carbon;
use Illuminate\Support\ServiceProvider;
use Lbausch\BuildMetadataLaravel\BuildMetadataManager;
use Lbausch\BuildMetadataLaravel\Metadata;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        BuildMetadataManager::beforeCaching(function (Metadata $metadata): Metadata {
            // Convert build date to a Carbon instance
            $build_date = $metadata->get('BUILD_DATE');

            $metadata->set('BUILD_DATE', Carbon::createFromTimestampUTC($build_date));

            return $metadata;
        });
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

事件

CachingBuildMetadata

此事件在构建元数据即将被缓存之前发送。

<?php

// app/Providers/EventServiceProvider.php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;

class EventServiceProvider extends ServiceProvider
{
    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        Event::listen(function(\Lbausch\BuildMetadataLaravel\Events\CachingBuildMetadata $event) {
            //
        });
    }
}

CachedBuildMetadata

此事件在构建元数据被缓存后发送。缓存的构建元数据在事件实例上可用。

<?php

// app/Providers/EventServiceProvider.php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;

class EventServiceProvider extends ServiceProvider
{
    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        Event::listen(function(\Lbausch\BuildMetadataLaravel\Events\CachedBuildMetadata $event) {
            $build_metadata = $event->build_metadata;
        });
    }
}