Skip to content
Snippets Groups Projects
Commit 35d09fbc authored by Axel Hahn's avatar Axel Hahn
Browse files

param support for build, installer, test runner

parent 829a00f8
No related branches found
No related tags found
No related merge requests found
......@@ -11,14 +11,55 @@ $TMPFILE="$selfdir/$dirBuild/amcli.php.tmp";
$OUTFILE="$selfdir/$dirPackages/".str_replace('.php', '', basename($INFILE)).$myosextension;
$OUTFILE2="$selfdir/$dirPackages/".str_replace('.php', '', basename($INFILE)).'_'.$myos.'_'.$myarchitecture.$myosextension;
$FLAG_FORCEBUILD=false;
$FLAG_FULLTEST=false;
echo "
\e[1mCLI client\e[0m
DEVELOPMENT ENVIRONMENT
B U I L D E R
B U I L D E R
...............................................................................
";
if ($argc > 1) {
parse_str(implode('&', array_slice($argv, 1)), $ARGS);
}
if(isset($ARGS['-h']) || isset($ARGS['--help'])){
echo "
- Merge PHP sources to a single file
- Compile binary
- Test binary
- Coy to architecture specific binary
- Create readme with buildinfos
...............................................................................
\e[1mSYNTAX:\e[0m
./build.php [OPTIONS]
🔷 \e[1mOPTIONS:\e[0m
-h, --help Show this help
-f, --force Force rebuild on unchanged sources
-t, --test Run full test suite: ./tests/00_start.php
without '-t': run a single check only.
";
exit(0);
}
if(isset($ARGS['-f']) || isset($ARGS['--force'])){
$FLAG_FORCEBUILD=true;
}
if(isset($ARGS['-t']) || isset($ARGS['--test'])){
$FLAG_FULLTEST=true;
}
_h1("Startup");
_chdir($selfdir);
_mkdir($dirPackages);
......@@ -31,7 +72,12 @@ if(file_exists($OUTFILE)){
if($ts_in>$ts_out){
echo "✅ INFO: Source file \"$INFILE\" is newer than \"$OUTFILE\". Compiling changes...\n";
} else {
echo "🔹 INFO: Source is unchanged since last build... rebuilding it anyway.\n";
if($FLAG_FORCEBUILD){
echo "🔹 INFO: Source is unchanged since last build... rebuilding it because of --force param.\n";
} else{
echo "Source is unchanged since last build. \n Delete \"$OUTFILE\"\n or use --force to force a rebuild.\n";
_abort("Aborting.");
}
}
} else {
echo "✅ INFO: Target \"$OUTFILE\" does not exist yet.\n";
......@@ -75,11 +121,21 @@ _exec("$SPC \
_h1("Test generated binary");
_exec("file \"$OUTFILE\"");
_exec("\"$OUTFILE\" --ini=../tests/configs/metadata.ini");
if ($FLAG_FULLTEST){
_h1("Run test suite");
_exec("php \"$selfdir/tests/00_start.php\"");
} else {
_skip("don't run test suite. Use --test to run it. Starting simple test.");
_exec("file \"$OUTFILE\"");
_exec("\"$OUTFILE\" --ini=../tests/configs/metadata.ini");
}
_h1("Write architecture specific binary");
_exec("cp \"$OUTFILE\" '$OUTFILE2'");
if(!copy($OUTFILE, $OUTFILE2)){
_abort("Could not copy $OUTFILE to $OUTFILE2");
}
_ok("file created: '$OUTFILE2'");
_h1("Create readme");
$readme="{$OUTFILE2}__README.md";
......@@ -87,7 +143,7 @@ $versionSPC=system("$SPC --version");
$versionAmcli=system("php $INFILE --version");
file_put_contents($readme,
if (!file_put_contents($readme,
"# Build infos $versionAmcli
Date : $sBuildDate
......@@ -110,13 +166,23 @@ Download : `$cmdSpcDownload`
Build : `$cmdSpcBuild`
see https://os-docs.iml.unibe.ch/appmonitor-cli-client/
");
")){
_abort("Could not write $readme");
}
_ok("file created.");
echo "see $readme\n";
// ----------------------------------------------------------------------
_h1("Done: Build was successful.");
@include "build_postactions.php";
_h1("Summary");
echo "The created files are:
- $OUTFILE
- $OUTFILE2
- $readme
";
_h1("Build was successful.");
// ----------------------------------------------------------------------
......@@ -35,7 +35,7 @@ function _h1($s): void
function _abort($sMessage, $iExitcode = 1): never
{
global $aCol;
echo "❌ $aCol[red]$sMessage.$aCol[reset]\n";
echo "❌ $aCol[red]$sMessage$aCol[reset]\n";
exit($iExitcode);
}
......@@ -93,13 +93,13 @@ function _exec($cmd): void
// Read stdout and stderr in real-time
while ($output = fgets($pipes[1])) {
echo $output;
echo " > $output";
flush();
}
fclose($pipes[1]);
while ($error = fgets($pipes[2])) {
echo $error;
echo " ERR> $error";
flush();
}
fclose($pipes[2]);
......
......@@ -11,7 +11,24 @@ $dirPackages="built_packages";
$php_version="8.4.4";
// extensions - see https://static-php.dev/en/guide/extensions.html
$php_libs="mysqli,openssl,pdo,pdo_mysql,pdo_pgsql,pdo_sqlite,sockets";
$aPhpLibs=[
"mysqli" => true,
"openssl" => true,
"pdo" => true,
"pdo_mysql" => true,
"pdo_pgsql" => true,
"pdo_sqlite" => true,
"sockets" => true,
"whatever" => false,
];
$php_libs="";
foreach($aPhpLibs as $key => $bEnabled){
if($bEnabled){
$php_libs.=$bEnabled ? ($php_libs ? ",":"").$key : '';
}
}
// $php_libs="mysqli,openssl,pdo,pdo_mysql,pdo_pgsql,pdo_sqlite,sockets";
// TODO: how can it be dynamic?
$myarchitecture="x86_64";
......
......@@ -34,14 +34,12 @@ spc-windows-x64.exe 2025-02-15 17:30:46 3.9M
// MAIN
// ----------------------------------------------------------------------
echo "
\e[1mCLI client\e[0m
DEVELOPMENT ENVIRONMENT
I N S T A L L E R * U P D A T E R
- gets appmonitor sources or updates it
- gets spc binary
- spc downloads PHP and libs
- spc builds micro
I N S T A L L E R * U P D A T E R
...............................................................................
";
// ----------------------------------------------------------------------
......@@ -52,15 +50,28 @@ if ($argc > 1) {
if(isset($ARGS['-h']) || isset($ARGS['--help'])){
echo "
HELP
- Get appmonitor sources or updates it
- Get spc binary
- Installations with spc doctor
- Download PHP and libs with spc
- Build Micro sfx with spc
...............................................................................
\e[1mSYNTAX:\e[0m
./installer.php [OPTIONS]
🔷 \e[1mOPTIONS:\e[0m
-h, --help Show this help
-r, --reset Reset; delete created folders of installer or build
-r, --reset Reset; delete created folders of installer and build
";
exit(0);
}
_h1("Init");
_chdir($selfdir);
if(isset($ARGS['-r']) || isset($ARGS['--reset'])){
......@@ -89,8 +100,8 @@ if(!is_dir("appmonitor")){
_exec("git pull -f $gitAppmonitor");
}
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
_h1("Generate include file with all available checks...");
// _exec("ln -s $selfdir/$dirExternal/appmonitor/public_html/client $selfdir/src");
......@@ -140,6 +151,7 @@ if(file_put_contents($incfile, $out)){
_exec("php -l \"$incfile\"");
// ----------------------------------------------------------------------
_h1("Get / update spc");
_chdir("$selfdir/$dirExternal/bin");
......@@ -153,6 +165,7 @@ if (PHP_OS == "Linux") {
_exec("chmod +x $SPC");
}
// ----------------------------------------------------------------------
_h1("Spc - prepare environment");
_chdir("$selfdir/$dirBuild");
......@@ -180,4 +193,5 @@ if ($bDoBild){
_skip("Micro already built - php $php_version - extensions \"$php_libs\"");
}
_h1("Done.");
_h1("Done. You can run build.php to compile the binary.");
// ----------------------------------------------------------------------
......@@ -3,8 +3,13 @@
/**
* ======================================================================
*
* IML APPMONITOR CLIENT
* AS CLI APP
* _____ _____ __ _____ _ _
* | | | | ___ ___ ___| |___ ___|_| |_ ___ ___
* |- -| | | | |__ | .'| . | . | | | | . | | | _| . | _|
* |_____|_|_|_|_____| |__,| _| _|_|_|_|___|_|_|_|_| |___|_|
* |_| |_|
*
* CLIENT AS CLI APP
*
* ---------------------------------------------------------------------
* 2025-03-04 v0.1 Initial version
......@@ -21,7 +26,7 @@ $argc = $_SERVER['argc'];
$argv = $_SERVER['argv'];
$FLAG_DEBUG = 0;
$VERSION = "0.5";
$VERSION = "0.7";
$AMCLI_BUILD_DATE = "never";
......@@ -98,7 +103,12 @@ function _showHelp(): void
global $VERSION;
$_self = str_replace('.php', '', basename(__FILE__));
echo "
\e[1m IML Appmonitor as CLI client $VERSION\e[0m
_____ _____ __ _____ _ _
| | | | ___ ___ ___| |___ ___|_| |_ ___ ___
|- -| | | | |__ | .'| . | . | | | | . | | | _| . | _|
|_____|_|_|_|_____| |__,| _| _|_|_|_|___|_|_|_|_| |___|_|
|_| |_|
\e[1mCLI client v$VERSION\e[0m
This client performs appmonitor checks and puts the results as JSON to stdout.
It contains all checks that are available in the PHP appmonitor client.
......@@ -119,12 +129,12 @@ You find example snippets in the source code of this project in tests/config/.
...............................................................................
\e[1mSYNTAX:\e[0m
\e[1mSYNTAX:\e[0m
$_self [OPTIONS] --ini=<INI-FILE>
🔷 \e[1mOPTIONS:\e[0m
🔷 \e[1mOPTIONS:\e[0m
-h, --help Print this help and exit
......@@ -137,7 +147,7 @@ You find example snippets in the source code of this project in tests/config/.
-V, --version Show version and exit
👉 \e[1mEXAMPLES:\e[0m
👉 \e[1mEXAMPLES:\e[0m
$_self -i=my.ini
$_self --ini=my.ini
......
; =======================================================================
;
; APPMONITOR CLI CLIENT
;
; to understand the entries of metadata see JSON in
; <https://os-docs.iml.unibe.ch/appmonitor/Client/Description_of_response.html>
;
; for the checks see its parameters
; <https://os-docs.iml.unibe.ch/appmonitor/PHP_client/Plugins/Checks/index.html>
;
; =======================================================================
; -----------------------------------------------------------------------
; METADATA
; -----------------------------------------------------------------------
[meta]
host = "www.example.com"
website = "Company website"
ttl = 300
tags[]="monitoring"
[notifications]
email[]="support@example.com"
email[]="webmaster@example.com"
; for slack use the following format
slack["#support-channel"]="https://hooks.slack.com/services/XXXXXX/YYYYYY/ZZZZZ"
; -----------------------------------------------------------------------
; CHECKS
; -----------------------------------------------------------------------
["hello plugin"]
description="I just wann say hello"
function="hello"
; JSON example ... variables cannot be expanded
; params='{
; "message": "Here I am"
; }'
;
; ... but in double quotes the expansion works
params[message]="Here is ${USER}"
; -----------------------------------------------------------------------
......@@ -5,19 +5,80 @@ require_once __DIR__.'/../inc_functions.php';
require_once __DIR__.'/../inc_vars.php';
$AMCLI??=__DIR__.'/../src/amcli.php';
// $AMCLI=__DIR__.'/../built_packages/amcli';
$AMCLIBIN??=__DIR__.'/../built_packages/amcli';
_chdir(__DIR__);
// --------------------------------------------------------------------
echo "\n\nSTART TESTS\n\n";
foreach(glob("*.php") as $sFile){
if($sFile==basename(__FILE__)){
// SKIP
} else {
_h1("$sFile");
include $sFile;
/**
* Get array of files with tests
* @return array
*/
function getTests(): array
{
$aReturn=[];
foreach(glob(__DIR__."/*.php") as $sFile){
if(basename($sFile)!=basename(__FILE__)){
$aReturn[]=$sFile;
}
}
return $aReturn;
}
// --------------------------------------------------------------------
if ($argc > 1) {
parse_str(implode('&', array_slice($argv, 1)), $ARGS);
}
if(isset($ARGS['-h']) || isset($ARGS['--help'])){
echo "
This ist the test suite for amcli calls.
It executes all scripts in this directory. They perform checks for metadata,
help, all checks and ini features.
\e[1mSYNTAX:\e[0m
./00_start.php [-b]
🔷 \e[1mOPTIONS:\e[0m
-h, --help Show this help
-b, --bin [=<FILE>] Set amcli binary. If a FILE is given then use that one.
Default is the php script
$AMCLI
Default of -b without file is
$AMCLIBIN
-l, --list list filenames of tests
";
exit(0);
}
if(isset($ARGS['-l']) || isset($ARGS['--list'])){
foreach(getTests() as $sFile){
echo basename($sFile)."\n";
}
exit(0);
}
if(isset($ARGS['-b']) || isset($ARGS['--bin'])){
$AMCLI=($ARGS['--bin'] ?? $ARGS['-b']) ?: $AMCLIBIN;
if(!file_exists($AMCLI)){
echo "ERROR: [$AMCLI] not found\n";
exit(1);
}
}
echo "Using $AMCLI for testing\n\n";
// _chdir(__DIR__);
echo "\n\nSTART TESTS\n\n";
foreach(getTests() as $sFile){
_h1("$sFile");
include $sFile;
}
_h1("DONE");
// --------------------------------------------------------------------
......@@ -5,7 +5,7 @@ echo "
WHAT: Set application metadata
";
$sInifile="configs/metadata.ini";
$sInifile=__DIR__."/configs/metadata.ini";
// --------------------------------------------------------------------
// FUNCTION
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment