Skip to content

Instantly share code, notes, and snippets.

@stephane888
Last active July 24, 2024 11:34
Show Gist options
  • Select an option

  • Save stephane888/8aea9918e2e26e51d47b6d926c7e1a89 to your computer and use it in GitHub Desktop.

Select an option

Save stephane888/8aea9918e2e26e51d47b6d926c7e1a89 to your computer and use it in GitHub Desktop.
Generates a composer file with the fixed packages
<?php
namespace hbk;
/**
* Ce fichier permet de generer un fichier composer avec les versions fixe des
* modules.
* Ce fichier composer peut etre ajouter via un autre module ou via le module de
* merge : wikimedia/composer-merge-plugin
* Run in command : php generate_composer_with_fixe_version.php
*/
// $autoloader = require_once 'web/autoload.php';
class generate_composer_with_fixe_version {
public function build() {
$this->generateBasicFile();
}
/**
* --
*/
protected function generateBasicFile() {
$cmd = "composer show --format=json";
$result = $this->excuteCmd($cmd);
if (!$result['return_var']) {
$composer = $this->composerHeader();
$packages = json_decode(implode("", $this->cleanValues($result['output'])), true);
foreach ($packages['installed'] as $package) {
if (!empty($package['version']) && !str_contains($package['name'], "composer/") && !str_contains($package['name'], "wb_horizon_stable") && !str_contains($package['name'], "wb_horizon_generate"))
$composer['require'][$package['name']] = str_replace(" ", "#", $package['version']);
}
ksort($composer['require']);
file_put_contents('composer_generate.json', json_encode($composer, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
echo "Le fichier composer_generate.json a été generé avec " . count($composer['require']) . " pacquets requis \n";
}
else
echo "Nous n'avons pas pu generer le fichier composer_generate.json";
}
/**
*
* @return array[]
*/
protected function composerHeader() {
return [
'name' => 'habeuk/paquet_stable',
'description' => "Permet d'avoir des pacquets stable pour la production",
'license' => 'MIT',
'authors' => [
[
'name' => 'kouwa stephane',
'email' => 'kksasteph888@gmail.com'
]
],
'minimum-stability' => 'dev',
'require' => []
];
}
/**
* Permet de nettoyer les données.
* Les premieres lignes peuvent avoir des avertissements ou autre
* informations.
*
* @param array $output
*/
protected function cleanValues(array $output) {
$clenArray = $output;
foreach ($output as $k => $value) {
if ($value != "{") {
unset($clenArray[$k]);
}
else
break;
}
return $clenArray;
}
/**
* Permet d'executé une commande.
*
* @param string $cmd
* @return array
*/
protected function excuteCmd(string $cmd) {
ob_start();
$return_var = '';
$output = '';
exec($cmd . " 2>&1", $output, $return_var);
$result = ob_get_contents();
ob_end_clean();
$debug = [
'output' => $output,
'return_var' => $return_var,
'result' => $result,
'script' => $cmd
];
return $debug;
}
}
$generate_composer_with_fixe_version = new generate_composer_with_fixe_version();
$generate_composer_with_fixe_version->build();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment