placetopay/app-version

Provides information about the current app

2.9.1 2024-04-04 13:23 UTC

README

Build Status

The placetopay/app-version package provides a way to know which version of your app is currently deployed.

  • It can be used with Envoyer deployment hooks
  • It can be integrated with Sentry to help you keep track of Releases and Deploys in the Sentry Dashboard
  • Also you can integrate with NewRelic to track each deployment in your APM

Installation

Install using composer

composer require placetopay/app-version ^2.0

The package will automatically register itself and it should work now on your local environment

If you are using Sentry please follow this steps to configure the deployments and releases to your reports

  1. Publish the configuration file
php artisan vendor:publish --provider="PlacetoPay\AppVersion\VersionServiceProvider"
  1. Set up your environment variables at config/app-version.php
return [
    'sentry' => [
        /*
        * The sentry auth token used to authenticate with Sentry Api
        * Create tokens here at account level https://sentry.io/settings/account/api/auth-tokens/
        * Or here at organization level https://sentry.io/settings/your-organization/developer-settings/
        */
        'auth_token' => env('APP_VERSION_SENTRY_AUTH'),
        
        /*
        * The organization name this project belongs to, you can find out the
        * organization at https://sentry.io/settings/
        */
        'organization' => env('APP_VERSION_SENTRY_ORGANIZATION', 'placetopay'),
        
        /*
        * The repository name of this project. Repositories are added in sentry as integrations.
        * You must add your (Github|Bitbucket) integration at https://sentry.io/settings/your-organization/integrations/
        * and then add the repositories you want to track commits
        */
        'repository' => env('APP_VERSION_SENTRY_REPOSITORY'),
        
        /*
        * The name of this project in Sentry Dashboard
        * You can find out the project name at https://sentry.io/settings/your-organization/projects/
        */
        'project' => env('APP_VERSION_SENTRY_PROJECT'),
    ],
    'newrelic' => [
        /*
        * The NewRelic Rest API Key, you can found it on the following URL when you are logged in
        * https://rpm.newrelic.com/api/explore/application_deployments/create
        */
        'api_key' => env('APP_VERSION_NEWRELIC_API_KEY'),
        
        /*
        * The NewRelic application id, you can get it from the URL in the APM
        */
        'application_id' => env('APP_VERSION_NEWRELIC_APPLICATION_ID'),
    ],
    
    /*
    * The current deployed version, will be read from version file
    * generated by `php artisan app-version:create ...` command
    */
    'version' => \PlacetoPay\AppVersion\VersionFile::readSha(),
    
    /*
     * The value of query param token to be able showed the deployed version.
     */
    'token' => env('APP_VERSION_TOKEN', 'delivery'),
];
  1. Set up the config/sentry.php file with the following settings
return [
    'dsn' => env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')),

    // capture release as git sha
    'release' => \PlacetoPay\AppVersion\VersionFile::readSha(),

    'breadcrumbs' => [
        // Capture Laravel logs in breadcrumbs
        'logs' => true,

        // Capture SQL queries in breadcrumbs
        'sql_queries' => true,

        // Capture bindings on SQL queries logged in breadcrumbs
        'sql_bindings' => true,

        // Capture queue job information in breadcrumbs
        'queue_info' => true,
    ],

];

Usage

You can visit https://yourapp.com/version

Envoyer Hooks

Using tools to deploy like Envoyer there is no git source available once deployed so using the sha, project and branch available information we create a file containing this information

  1. Create a deployment hook in the action "Activate New Release", it is vital that this hook runs BEFORE running config:cache or optimize commands
cd {{ release }}
php artisan app-version:create --sha={{ sha }} --time={{ time }} --project={{ project }} --branch={{ branch }}

This will generate your version file at storage/app/app-version.json

  1. If you are integrating with Sentry or NewRelic Releases/Deployments/Issues, Add these hooks so Sentry and NewRelic can track your deployments. It should be run AFTER running the optimization or configuration cache.
cd {{ release }}
php artisan app-version:create-release
php artisan app-version:create-deploy

Know your version from CLI

If you're using tinker you can get the version information with the following commands

To access the version information generated with the step 1 of the usage

config('app-version.version.sha'); 

To access the sha

PlacetoPay\AppVersion\VersionFile::readSha()