PHP Classes

File: bin/phing-visualizer

Recommend this page to a friend!
  Classes of jawira   Phing Build File Visualizer   bin/phing-visualizer   Download  
File: bin/phing-visualizer
Role: Example script
Content type: text/plain
Description: Example script
Class: Phing Build File Visualizer
Render chart to represent a Phing build process
Author: By
Last change:
Date: 4 years ago
Size: 2,774 bytes
 

Contents

Class file image Download
#!/usr/bin/env php
<?php declare(strict_types=1);

namespace
Jawira\PhingVisualizer;

use
Exception;
use
Jawira\MiniGetopt\MiniGetopt;
use
Throwable;


/**
 * Finds and loads autoload file
 *
 * @see https://www.tomasvotruba.cz/blog/2018/08/02/5-gotchas-of-the-bin-file-in-php-cli-applications/
 * @return void
 * @throws \Exception
 */
function loadAutoload(): void
{
   
$candidates = [
       
__DIR__ . '/../vendor/autoload.php', // production
       
__DIR__ . '/../../../autoload.php', // development
   
];

   
$eureka = false;
    foreach (
$candidates as $c) {
        if (
file_exists($c)) {
           
/** @noinspection PhpIncludeInspection */
           
require_once $c;
           
$eureka = true;
            break;
        }
    }

    if (!
$eureka) {
        throw new
Exception("autoload.php not found; try 'composer dump-autoload' first.");
    }
}

/**
 * Run cli command to generate Phing diagrams
 *
 * @throws \Jawira\PhingVisualizer\DiagramException
 * @throws \Exception
 */
function runPhingVisualizer(): void
{
   
$mg = new MiniGetopt();
   
$mg->addRequired('i', 'input');
   
$mg->addRequired('o', 'output');
   
$mg->addRequired('f', 'format');
   
$mg->addNoValue('h', 'help');

   
$input = $mg->getOption('i', 'input', Diagram::BUILDFILE_DEFAULT);
   
$output = $mg->getOption('o', 'output');
   
$format = $mg->getOption('f', 'format', Diagram::FORMAT_PNG);
   
$help = $mg->getOption('h', 'help');

    if (
false === $help) {
       
help();
        exit(
0);
    }

   
$diagram = new Diagram($input);
   
$diagram->save($format, $output);
}

/**
 * Show binary help
 */
function help(): void
{
    echo <<<'HELP'
NAME
    phing-visualizer - visualize Phing's buildfile

SYNOPSIS
    phing-visualizer [-i <buildfile>] [-f <png|svg|puml|eps>] [-o <path>]

DESCRIPTION
    With phing-visualizer you can generate a diagram that
    represents Phing's targets, calls, and dependencies.

OPTIONS
    -i, --input <buildfile>
        The buildfile location. It could be an absolute or
        relative path.
   
    -f, --format <png|svg|puml|eps>
        The format of the diagram to generate.
   
    -o, --output <path>
        The location for the diagram to be generated, it could
        be a filepath or dirpath. It defaults to same location
        as --input.
       
    -h, --help
        Shows this message.

EXAMPLES
    $ phing-visualizer
    $ phing-visualizer -i build.xml -f png -o images/
    $ phing-visualizer --input /projects/build.xml --format svg
   
AUTHOR
    Jawira Portugal


HELP;
}

/**
 * Main function
 */
function main(): void
{
    try {
       
loadAutoload();
       
runPhingVisualizer();
    } catch (
Throwable $th) {
        exit(
'? ' . $th->getMessage() . PHP_EOL);
    }
}

main();