1417 lines
59 KiB
PHP
Executable file
1417 lines
59 KiB
PHP
Executable file
#!/usr/bin/env php
|
|
<?php
|
|
/**
|
|
* \file build/makepack-dolibarr.php
|
|
* \brief Dolibarr package builder (tgz, zip, rpm, deb, exe, aps)
|
|
* \author (c)2026 Eric Seigne <eric.seigne@cap-rel.fr>
|
|
*
|
|
* PHP CLI rewrite of makepack-dolibarr.pl
|
|
*
|
|
* Environment variables you can set to have generated packages moved into a specific dir:
|
|
* DESTIBETARC='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/lastbuild'
|
|
* DESTISTABLE='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/stable'
|
|
* DESTIMODULES='/media/HDDATA1_LD/Mes Sites/Web/Admin1/wwwroot/files/modules'
|
|
*/
|
|
|
|
// ============================================================================
|
|
// Helper functions
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Return ANSI-colored text
|
|
*
|
|
* @param string $text Text to colorize
|
|
* @param string $color Color name (red, green, yellow, blue, magenta, cyan, white)
|
|
* @return string Colored text with reset suffix
|
|
*/
|
|
function colorText(string $text, string $color): string
|
|
{
|
|
$colors = [
|
|
'reset' => "\033[0m",
|
|
'red' => "\033[31m",
|
|
'green' => "\033[32m",
|
|
'yellow' => "\033[33m",
|
|
'blue' => "\033[34m",
|
|
'magenta' => "\033[35m",
|
|
'cyan' => "\033[36m",
|
|
'white' => "\033[37m",
|
|
];
|
|
$code = $colors[$color] ?? $colors['reset'];
|
|
return $code . $text . "\033[0m";
|
|
}
|
|
|
|
/**
|
|
* Execute a shell command and return stdout
|
|
*
|
|
* @param string $cmd Shell command to execute
|
|
* @return string Command output
|
|
*/
|
|
function run(string $cmd): string
|
|
{
|
|
return shell_exec($cmd) ?? '';
|
|
}
|
|
|
|
/**
|
|
* Read a line from STDIN
|
|
*
|
|
* @param string $message Prompt message to display
|
|
* @return string User input (trimmed)
|
|
*/
|
|
function prompt(string $message = ''): string
|
|
{
|
|
if ($message !== '') {
|
|
echo $message;
|
|
}
|
|
return trim(fgets(STDIN) ?: '');
|
|
}
|
|
|
|
|
|
// ============================================================================
|
|
// Configuration
|
|
// ============================================================================
|
|
|
|
// Change this to defined target for option 98 and 99
|
|
$PROJECT = 'dolibarr';
|
|
$PUBLISHBETARC = (getenv('DESTIASSOLOGIN') ?: '') . '@vmprod1.dolibarr.org:/home/dolibarr/asso.dolibarr.org/dolibarr_documents/website/www.dolibarr.org/files';
|
|
$PUBLISHSTABLE = (getenv('DESTISFLOGIN') ?: '') . '@frs.sourceforge.net:/home/frs/project/dolibarr';
|
|
|
|
// Due to implicit origin on git commands
|
|
$GITREMOTENAME = getenv('GITREMOTENAME') ?: '';
|
|
|
|
$LISTETARGET = ['TGZ', 'ZIP', 'RPM_GENERIC', 'RPM_FEDORA', 'RPM_MANDRIVA', 'RPM_OPENSUSE', 'DEB', 'EXEDOLIWAMP', 'SNAPSHOT'];
|
|
|
|
$REQUIREMENTPUBLISH = [
|
|
'SF' => 'git ssh rsync',
|
|
'ASSO' => 'git ssh rsync',
|
|
];
|
|
|
|
$REQUIREMENTTARGET = [
|
|
'TGZ' => 'tar',
|
|
'ZIP' => '7z',
|
|
'XZ' => 'xz',
|
|
'RPM_GENERIC' => 'rpmbuild',
|
|
'RPM_FEDORA' => 'rpmbuild',
|
|
'RPM_MANDRIVA' => 'rpmbuild',
|
|
'RPM_OPENSUSE' => 'rpmbuild',
|
|
'DEB' => 'dpkg',
|
|
'FLATPACK' => 'flatpack',
|
|
'EXEDOLIWAMP' => 'ISCC.exe',
|
|
'SNAPSHOT' => 'tar',
|
|
];
|
|
|
|
$ALTERNATEPATH = [
|
|
'7z' => '7-ZIP',
|
|
'makensis.exe' => 'NSIS',
|
|
];
|
|
|
|
$RPMSUBVERSION = 'auto';
|
|
$RPMDIR = '';
|
|
if (is_dir('/usr/src/redhat')) { $RPMDIR = '/usr/src/redhat'; } // redhat
|
|
if (is_dir('/usr/src/packages')) { $RPMDIR = '/usr/src/packages'; } // opensuse
|
|
if (is_dir('/usr/src/RPM')) { $RPMDIR = '/usr/src/RPM'; } // mandrake
|
|
|
|
$VERSION = '4.0';
|
|
|
|
|
|
// ============================================================================
|
|
// MAIN
|
|
// ============================================================================
|
|
|
|
// Detect script directory and name
|
|
$scriptPath = realpath($argv[0]) ?: $argv[0];
|
|
$DIR = dirname($scriptPath);
|
|
$PROG = pathinfo($scriptPath, PATHINFO_FILENAME);
|
|
$Extension = pathinfo($scriptPath, PATHINFO_EXTENSION);
|
|
$SOURCE = preg_replace('/\/dev/', '', preg_replace('/\/build/', '', $DIR));
|
|
$DESTI = $SOURCE . '/dev/build';
|
|
|
|
if ($SOURCE[0] !== '/' && !preg_match('/^[a-z]:/i', $SOURCE)) {
|
|
echo "Error: Launch the script $PROG.$Extension with its full path from /.\n";
|
|
echo "$PROG.$Extension aborted.\n";
|
|
sleep(2);
|
|
exit(1);
|
|
}
|
|
|
|
// Check environment variables
|
|
$ENVDESTIBETARC = getenv('DESTIBETARC') ?: '';
|
|
$ENVDESTISTABLE = getenv('DESTISTABLE') ?: '';
|
|
|
|
if (!$ENVDESTIBETARC || !$ENVDESTISTABLE) {
|
|
echo "Error: Missing environment variables.\n";
|
|
echo "You must define the environment variable DESTIBETARC and DESTISTABLE to point to the\ndirectories where you want to save the generated packages.\n";
|
|
echo "$PROG.$Extension aborted.\n";
|
|
echo "\n";
|
|
echo "You can set them with\n";
|
|
echo "On Linux:\n";
|
|
echo "export DESTIBETARC='/tmp'; export DESTISTABLE='/tmp';\n";
|
|
echo "On Windows:\n";
|
|
echo "set DESTIBETARC=c:/tmp\n";
|
|
echo "set DESTISTABLE=c:/tmp\n";
|
|
echo "\n";
|
|
echo "Example: DESTIBETARC='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/lastbuild'\n";
|
|
echo "Example: DESTISTABLE='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/stable'\n";
|
|
sleep(2);
|
|
exit(1);
|
|
}
|
|
|
|
if (!is_dir($ENVDESTIBETARC) || !is_dir($ENVDESTISTABLE)) {
|
|
echo "Error: Directory of environment variable DESTIBETARC ($ENVDESTIBETARC) or DESTISTABLE ($ENVDESTISTABLE) does not exist.\n";
|
|
echo "$PROG.$Extension aborted.\n";
|
|
sleep(2);
|
|
exit(1);
|
|
}
|
|
|
|
if (!$GITREMOTENAME) {
|
|
echo "Error: environment variable GITREMOTENAME does not exist. You can set it to 'origin' or any other git remote name.\n";
|
|
echo "$PROG.$Extension aborted.\n";
|
|
sleep(2);
|
|
exit(1);
|
|
}
|
|
|
|
// Detect OS type
|
|
$OS = '';
|
|
$CR = '';
|
|
$PROGPATH = '';
|
|
|
|
if (stripos(PHP_OS, 'linux') !== false || (is_dir('/etc') && is_dir('/var') && stripos(PHP_OS, 'cygwin') === false)) {
|
|
$OS = 'linux';
|
|
$CR = '';
|
|
} elseif (is_dir('/etc') && is_dir('/Users')) {
|
|
$OS = 'macosx';
|
|
$CR = '';
|
|
} elseif (stripos(PHP_OS, 'cygwin') !== false || stripos(PHP_OS, 'win') !== false || stripos(PHP_OS, 'msys') !== false) {
|
|
$OS = 'windows';
|
|
$CR = "\r";
|
|
}
|
|
|
|
if (!$OS) {
|
|
echo "Error: Can't detect your OS.\n";
|
|
echo "Can't continue.\n";
|
|
echo "$PROG.$Extension aborted.\n";
|
|
sleep(2);
|
|
exit(1);
|
|
}
|
|
|
|
// Define buildroot
|
|
$TEMP = '';
|
|
if ($OS === 'linux' || $OS === 'macosx') {
|
|
$TEMP = getenv('TEMP') ?: (getenv('TMP') ?: '/tmp');
|
|
}
|
|
if ($OS === 'windows') {
|
|
$TEMP = getenv('TEMP') ?: (getenv('TMP') ?: 'c:/temp');
|
|
$PROGPATH = getenv('ProgramFiles') ?: '';
|
|
}
|
|
|
|
if (!$TEMP || !is_dir($TEMP)) {
|
|
echo "Error: A temporary directory can not be find.\n";
|
|
echo "Check that TEMP or TMP environment variable is set correctly.\n";
|
|
echo "$PROG.$Extension aborted.\n";
|
|
sleep(2);
|
|
exit(2);
|
|
}
|
|
|
|
$BUILDROOT = $TEMP . '/buildroot';
|
|
|
|
|
|
// Get version $MAJOR, $MINOR and $BUILD
|
|
if (file_exists($SOURCE . '/htdocs/filefunc.inc.php')) {
|
|
$filefuncPath = $SOURCE . '/htdocs/version.inc.php';
|
|
} else {
|
|
$filefuncPath = $SOURCE . '/htdocs/filefunc.inc.php';
|
|
}
|
|
$filefuncContent = file_get_contents($filefuncPath);
|
|
if ($filefuncContent === false) {
|
|
echo "Error: Can't open descriptor file $filefuncPath\n";
|
|
exit(1);
|
|
}
|
|
|
|
$PROJVERSION = '';
|
|
$matches = array();
|
|
if (preg_match("/define\('DOL_VERSION',\s*'([\d\.a-z\-]+)'\)/i", $filefuncContent, $matches)) {
|
|
$PROJVERSION = $matches[1];
|
|
}
|
|
if (empty($PROJVERSION)) {
|
|
if (preg_match("/define\('DOL_MAJOR_VERSION',\s*'([\d\.a-z\-]+)'\)/i", $filefuncContent, $matches)) {
|
|
$DOL_MAJOR_VERSION = $matches[1];
|
|
}
|
|
if (preg_match("/define\('DOL_MINOR_VERSION',\s*'([\d\.a-z\-]+)'\)/i", $filefuncContent, $matches)) {
|
|
$DOL_MINOR_VERSION = $matches[1];
|
|
}
|
|
$PROJVERSION = $DOL_MAJOR_VERSION.'.'.$DOL_MINOR_VERSION;
|
|
}
|
|
|
|
$versionParts = explode('.', $PROJVERSION, 3);
|
|
$MAJOR = $versionParts[0] ?? '';
|
|
$MINOR = $versionParts[1] ?? '';
|
|
$BUILD = $versionParts[2] ?? '';
|
|
|
|
if ($MINOR === '') {
|
|
echo "Error can't detect version into $filefuncPath\n";
|
|
exit(1);
|
|
}
|
|
|
|
|
|
// Set vars for packaging
|
|
$FILENAME = $PROJECT;
|
|
$FILENAMESNAPSHOT = "$PROJECT-snapshot";
|
|
$FILENAMETGZ = "$PROJECT-$MAJOR.$MINOR.$BUILD";
|
|
$FILENAMEZIP = "$PROJECT-$MAJOR.$MINOR.$BUILD";
|
|
$FILENAMEXZ = "$PROJECT-$MAJOR.$MINOR.$BUILD";
|
|
$FILENAMEDEB = 'see later';
|
|
$FILENAMEEXEDOLIWAMP = "DoliWamp-$MAJOR.$MINOR.$BUILD";
|
|
|
|
// For RPM
|
|
$ARCH = 'noarch';
|
|
$newbuild = $BUILD;
|
|
$newbuild = preg_replace('/(dev|alpha)/i', '0.1.a', $newbuild); // dev (fedora)
|
|
$newbuild = preg_replace('/beta(.?)/i', '0.2.beta', $newbuild); // beta (fedora)
|
|
$newbuild = preg_replace('/rc(.?)/i', '0.3.rc', $newbuild); // rc (fedora)
|
|
if (strpos($newbuild, '-') === false) {
|
|
$newbuild .= '-0.4'; // finale (fedora)
|
|
}
|
|
$REL1 = preg_replace('/-.*$/', '', $newbuild);
|
|
if ($RPMSUBVERSION === 'auto') {
|
|
$RPMSUBVERSION = preg_replace('/^.*-/', '', $newbuild);
|
|
}
|
|
$FILENAMETGZ2 = "$PROJECT-$MAJOR.$MINOR.$REL1";
|
|
$FILENAMERPM = $FILENAMETGZ2 . '-' . $RPMSUBVERSION . '.' . $ARCH . '.rpm';
|
|
$FILENAMERPMSRC = $FILENAMETGZ2 . '-' . $RPMSUBVERSION . '.src.rpm';
|
|
|
|
// For Deb
|
|
$newbuild = $BUILD;
|
|
$newbuild = preg_replace('/(dev|alpha)/i', '1', $newbuild); // dev
|
|
$newbuild = preg_replace('/beta(.?)/i', '2', $newbuild); // beta
|
|
$newbuild = preg_replace('/rc(.?)/i', '3', $newbuild); // rc
|
|
if (strpos($newbuild, '-') === false) {
|
|
$newbuild .= '-4'; // finale
|
|
}
|
|
// now newbuild is 0-1 or 0-4 for example
|
|
$build = preg_replace('/-.*$/', '', $newbuild);
|
|
// now build is 0 for example
|
|
$FILENAMEDEBNATIVE = "{$PROJECT}_{$MAJOR}.{$MINOR}.{$build}";
|
|
$FILENAMEDEB = "{$PROJECT}_{$MAJOR}.{$MINOR}.{$newbuild}";
|
|
$FILENAMEDEBSHORT = "{$PROJECT}_{$MAJOR}.{$MINOR}.{$build}";
|
|
|
|
|
|
// Parse command line arguments
|
|
$copyalreadydone = 0;
|
|
$batch = 0;
|
|
$target = '';
|
|
$PREFIX = '';
|
|
|
|
for ($i = 1; $i < $argc; $i++) {
|
|
$m = array();
|
|
if (preg_match('/^-*target=(\w+)/i', $argv[$i], $m)) {
|
|
$target = $m[1];
|
|
$batch = 1;
|
|
}
|
|
if (preg_match('/^-*desti=(.+)/i', $argv[$i], $m)) {
|
|
$DESTI = $m[1];
|
|
}
|
|
if (preg_match('/^-*prefix=(.+)/i', $argv[$i], $m)) {
|
|
$PREFIX = $m[1];
|
|
$FILENAMESNAPSHOT .= '-' . $PREFIX;
|
|
}
|
|
}
|
|
|
|
// Force output dir if env vars are defined
|
|
if ($ENVDESTIBETARC && preg_match('/[a-z]/i', $BUILD)) {
|
|
$DESTI = $ENVDESTIBETARC;
|
|
}
|
|
if ($ENVDESTISTABLE && preg_match('/^[0-9]+$/', $BUILD)) {
|
|
$DESTI = $ENVDESTISTABLE;
|
|
}
|
|
|
|
// Force target site for publishing if env vars are defined
|
|
$envPublishBetarc = getenv('PUBLISHBETARC') ?: '';
|
|
$envPublishStable = getenv('PUBLISHSTABLE') ?: '';
|
|
if ($envPublishBetarc && preg_match('/[a-z]/i', $BUILD)) {
|
|
$PUBLISHBETARC = $envPublishBetarc;
|
|
}
|
|
if ($envPublishStable && preg_match('/^[0-9]+$/', $BUILD)) {
|
|
$PUBLISHSTABLE = $envPublishStable;
|
|
}
|
|
|
|
echo "Makepack version $VERSION\n";
|
|
echo "Building/publishing package name: $PROJECT\n";
|
|
echo "Building/publishing package version: $MAJOR.$MINOR.$BUILD\n";
|
|
echo "Source directory (SOURCE): $SOURCE\n";
|
|
echo "Target directory (DESTI) : $DESTI\n";
|
|
|
|
|
|
// ============================================================================
|
|
// Choose package targets
|
|
// ============================================================================
|
|
|
|
$CHOOSEDTARGET = [];
|
|
$CHOOSEDPUBLISH = [];
|
|
|
|
if ($target) {
|
|
$targetUpper = strtoupper($target);
|
|
if ($targetUpper === 'ALL') {
|
|
foreach ($LISTETARGET as $key) {
|
|
if ($key !== 'SNAPSHOT' && $key !== 'SF' && $key !== 'ASSO') {
|
|
$CHOOSEDTARGET[$key] = 1;
|
|
}
|
|
}
|
|
}
|
|
if ($targetUpper !== 'ALL' && $targetUpper !== 'SF' && $targetUpper !== 'ASSO') {
|
|
$CHOOSEDTARGET[$targetUpper] = 1;
|
|
}
|
|
if ($targetUpper === 'SF') {
|
|
$CHOOSEDPUBLISH['SF'] = 1;
|
|
}
|
|
if ($targetUpper === 'ASSO') {
|
|
$CHOOSEDPUBLISH['ASSO'] = 1;
|
|
}
|
|
} else {
|
|
$found = false;
|
|
$NUM_SCRIPT = '';
|
|
|
|
while (!$found) {
|
|
$cpt = 0;
|
|
printf(" %2d - %-14s (%s)\n", $cpt, 'ALL (1..10)', 'Need ' . implode(',', array_values($REQUIREMENTTARGET)));
|
|
$cpt++;
|
|
printf(" %2d - %-14s\n", $cpt, 'Generate check file');
|
|
foreach ($LISTETARGET as $tgt) {
|
|
$cpt++;
|
|
printf(" %2d - %-14s (%s)\n", $cpt, $tgt, 'Need ' . $REQUIREMENTTARGET[$tgt]);
|
|
}
|
|
$cpt = 98;
|
|
printf(" %2d - %-14s (%s)\n", $cpt, 'ASSO (publish)', 'Need ' . $REQUIREMENTPUBLISH['ASSO']);
|
|
$cpt = 99;
|
|
printf(" %2d - %-14s (%s)\n", $cpt, 'SF (publish)', 'Need ' . $REQUIREMENTPUBLISH['SF']);
|
|
|
|
$NUM_SCRIPT = prompt("Choose one target number or several separated with space (0 - $cpt): ");
|
|
|
|
if (!preg_match('/^[0-9\s]+$/', $NUM_SCRIPT)) {
|
|
echo "This is not a valid package number list.\n";
|
|
} else {
|
|
$found = true;
|
|
}
|
|
}
|
|
|
|
echo "\n";
|
|
|
|
if ($NUM_SCRIPT === '98') {
|
|
$CHOOSEDPUBLISH['ASSO'] = 1;
|
|
} elseif ($NUM_SCRIPT === '99') {
|
|
$CHOOSEDPUBLISH['SF'] = 1;
|
|
} elseif ($NUM_SCRIPT === '0') {
|
|
$CHOOSEDTARGET['-CHKSUM'] = 1;
|
|
foreach ($LISTETARGET as $key) {
|
|
if ($key !== 'SNAPSHOT' && $key !== 'ASSO' && $key !== 'SF') {
|
|
$CHOOSEDTARGET[$key] = 1;
|
|
}
|
|
}
|
|
} elseif ($NUM_SCRIPT === '1') {
|
|
$CHOOSEDTARGET['-CHKSUM'] = 1;
|
|
} else {
|
|
foreach (preg_split('/\s+/', $NUM_SCRIPT, -1, PREG_SPLIT_NO_EMPTY) as $num) {
|
|
$idx = (int) $num - 2;
|
|
if (isset($LISTETARGET[$idx])) {
|
|
$CHOOSEDTARGET[$LISTETARGET[$idx]] = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// ============================================================================
|
|
// Test if requirements are ok
|
|
// ============================================================================
|
|
|
|
$atleastonerpm = 0;
|
|
ksort($CHOOSEDTARGET);
|
|
|
|
foreach ($CHOOSEDTARGET as $tgt => $val) {
|
|
if (preg_match('/RPM/i', $tgt)) {
|
|
if ($atleastonerpm && $DESTI === "$SOURCE/build") {
|
|
echo "Error: You asked creation of several rpms. Because all rpm have same name, you must defined an environment variable DESTI to tell packager where it can create subdirs for each generated package.\n";
|
|
exit(1);
|
|
}
|
|
$atleastonerpm = 1;
|
|
}
|
|
|
|
if (!isset($REQUIREMENTTARGET[$tgt])) {
|
|
continue;
|
|
}
|
|
|
|
foreach (preg_split('/[,\s]+/', $REQUIREMENTTARGET[$tgt], -1, PREG_SPLIT_NO_EMPTY) as $req) {
|
|
echo "Test requirement for target $tgt: Search '$req'... ";
|
|
|
|
$newreq = $req;
|
|
$newparam = '';
|
|
if ($newreq === 'zip') { $newparam .= '-h'; }
|
|
if ($newreq === 'xz') { $newparam .= '-h'; }
|
|
|
|
$cmd = "\"$newreq\" $newparam 2>&1";
|
|
echo "Test command $cmd... ";
|
|
|
|
$outputLines = [];
|
|
exec($cmd, $outputLines, $coderetour);
|
|
$ret = implode("\n", $outputLines);
|
|
|
|
if ($coderetour !== 0 && (($coderetour === 1 && $OS === 'windows' && !preg_match('/Usage/i', $ret)) || ($coderetour === 127 && $OS !== 'windows')) && $PROGPATH) {
|
|
// Not found, try in PROGPATH
|
|
$altPath = $ALTERNATEPATH[$req] ?? '';
|
|
$outputLines = [];
|
|
exec("\"$PROGPATH/$altPath/$req\" 2>&1", $outputLines, $coderetour);
|
|
$ret = implode("\n", $outputLines);
|
|
$REQUIREMENTTARGET[$tgt] = "$PROGPATH/$altPath/$req";
|
|
}
|
|
|
|
if ($coderetour !== 0 && (($coderetour === 1 && $OS === 'windows' && !preg_match('/Usage/i', $ret)) || ($coderetour === 127 && $OS !== 'windows'))) {
|
|
// Not found error
|
|
echo "Not found\nCan't build target $tgt. Requirement '$req' not found in PATH\n";
|
|
$CHOOSEDTARGET[$tgt] = -1;
|
|
break;
|
|
} else {
|
|
echo " Found $req\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
echo "\n";
|
|
|
|
|
|
// ============================================================================
|
|
// Check if there is at least one target to build
|
|
// ============================================================================
|
|
|
|
$nboftargetok = 0;
|
|
$nboftargetneedbuildroot = 0;
|
|
$nbofpublishneedtag = 0;
|
|
$nbofpublishneedchangelog = 0;
|
|
|
|
ksort($CHOOSEDTARGET);
|
|
foreach ($CHOOSEDTARGET as $tgt => $val) {
|
|
if ($tgt === '-CHKSUM') { $nbofpublishneedchangelog++; }
|
|
if ($val < 0) { continue; }
|
|
if ($tgt !== 'EXE' && $tgt !== 'EXEDOLIWAMP' && $tgt !== '-CHKSUM') {
|
|
$nboftargetneedbuildroot++;
|
|
}
|
|
$nboftargetok++;
|
|
}
|
|
|
|
ksort($CHOOSEDPUBLISH);
|
|
foreach ($CHOOSEDPUBLISH as $tgt => $val) {
|
|
if ($val < 0) { continue; }
|
|
if ($tgt === 'ASSO') { $nbofpublishneedchangelog++; }
|
|
if ($tgt === 'SF') { $nbofpublishneedchangelog++; $nbofpublishneedtag++; }
|
|
$nboftargetok++;
|
|
}
|
|
|
|
|
|
if ($nboftargetok) {
|
|
// ========================================================================
|
|
// Check Changelog
|
|
// ========================================================================
|
|
|
|
if ($nbofpublishneedchangelog) {
|
|
$TMPBUILDTOCHECKCHANGELOG = preg_replace('/\-rc\d*/', '', $BUILD);
|
|
$TMPBUILDTOCHECKCHANGELOG = preg_replace('/\-beta\d*/', '', $TMPBUILDTOCHECKCHANGELOG);
|
|
$TMPBUILDTOCHECKCHANGELOG = preg_replace('/\-alpha\d*/', '', $TMPBUILDTOCHECKCHANGELOG);
|
|
|
|
echo "\nCheck if ChangeLog is ok for version $MAJOR.$MINOR.$TMPBUILDTOCHECKCHANGELOG\n";
|
|
$ret = run("grep \"ChangeLog for $MAJOR.$MINOR.$TMPBUILDTOCHECKCHANGELOG\" \"$SOURCE/ChangeLog\" 2>&1");
|
|
|
|
if (!trim($ret)) {
|
|
echo colorText("Error: The ChangeLogFile was not updated. Run the following command before building package for $MAJOR.$MINOR.$BUILD:\n", 'yellow');
|
|
} else {
|
|
echo "ChangeLog for $MAJOR.$MINOR.$BUILD was found into '$SOURCE/ChangeLog'. But you can regenerate it with command:\n";
|
|
}
|
|
|
|
if (!$BUILD || $BUILD === '0-alpha' || $BUILD === '0-beta' || $BUILD === '0-rc') {
|
|
// For a major version
|
|
print "Building changeLog file for a major version:\n";
|
|
//print 'cd ~/git/dolibarr_dev; git log `git rev-list --boundary ' . $MAJOR . '.' . $MINOR . '..origin/develop | grep ^- | cut -c2- | head -n 1`.. --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e \'^FIX\|NEW\|CLOSE\' | sort -u | sed \'s/FIXED:/FIX:/g\' | sed \'s/FIXED :/FIX:/g\' | sed \'s/FIX :/FIX:/g\' | sed \'s/FIX /FIX: /g\' | sed \'s/CLOSE/NEW/g\' | sed \'s/NEW :/NEW:/g\' | sed \'s/NEW /NEW: /g\' > /tmp/changelogtocopy';
|
|
print 'cd ~/git/dolibarr_dev; git log `diff -u <(git rev-list --first-parent '. ( $MAJOR - 1 ). '.0) <(git rev-list --first-parent develop) | sed -ne \'s/^ //p\' | head -1`.. --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e \'^FIX\|NEW\' | sort -u | sed \'s/FIXED:/FIX:/g\' | sed \'s/FIXED :/FIX:/g\' | sed \'s/FIX :/FIX:/g\' | sed \'s/FIX /FIX: /g\' | sed \'s/NEW :/NEW:/g\' | sed \'s/NEW /NEW: /g\' > /tmp/changelogtocopy';
|
|
} else {
|
|
// For a maintenance release
|
|
echo 'cd ~/git/dolibarr_' . $MAJOR . '.' . $MINOR . '; git log ' . $MAJOR . '.' . $MINOR . '.' . (((float) $BUILD) - 1) . '.. | grep -v "Merge branch" | grep -v "Merge pull" | grep "^ " | sed -e "s/^[0-9a-z]* *//" | grep -e \'^FIX\|NEW\|CLOSE\' | sort -u | sed \'s/FIXED:/FIX:/g\' | sed \'s/FIXED :/FIX:/g\' | sed \'s/FIX :/FIX:/g\' | sed \'s/FIX /FIX: /g\' | sed \'s/CLOSE/NEW/g\' | sed \'s/NEW :/NEW:/g\' | sed \'s/NEW /NEW: /g\' > /tmp/changelogtocopy';
|
|
}
|
|
echo "\n";
|
|
|
|
if (!trim($ret)) {
|
|
$WAITKEY = prompt("\nPress F to force and continue anyway (or other key to stop)... ");
|
|
if ($WAITKEY !== 'F') {
|
|
echo "Canceled.\n";
|
|
exit(0);
|
|
}
|
|
} else {
|
|
$WAITKEY = prompt("\nPress a key to continue (or CTRL+C to stop)... ");
|
|
}
|
|
}
|
|
|
|
|
|
// ========================================================================
|
|
// Build xml check file
|
|
// ========================================================================
|
|
|
|
if (isset($CHOOSEDTARGET['-CHKSUM']) && $CHOOSEDTARGET['-CHKSUM'] > 0) {
|
|
echo "Go to directory $SOURCE\n";
|
|
$olddir = getcwd();
|
|
chdir($SOURCE);
|
|
|
|
echo "Clean $SOURCE/htdocs/includes/autoload.php\n";
|
|
run("rm -f $SOURCE/htdocs/includes/autoload.php");
|
|
|
|
$ret = run("git ls-files . --exclude-standard --others");
|
|
if (trim($ret)) {
|
|
echo "Some files exists in source directory and are not indexed neither excluded in .gitignore.\n";
|
|
echo $ret;
|
|
echo "\nCanceled.\n";
|
|
exit(0);
|
|
}
|
|
|
|
echo "Create xml check file with hash checksum with command php ".$SOURCE."/dev/build/generate_filelist_xml.php release=$MAJOR.$MINOR.$BUILD\n";
|
|
$outputLines = [];
|
|
$retcode = 0;
|
|
exec("php $SOURCE/dev/build/generate_filelist_xml.php release=$MAJOR.$MINOR.$BUILD", $outputLines, $retcode);
|
|
$ret = implode("\n", $outputLines);
|
|
if ($retcode !== 0) {
|
|
echo "Error running generate_filelist_xml.php please check\n";
|
|
echo $ret;
|
|
echo "\nCanceled.\n";
|
|
exit(0);
|
|
}
|
|
echo $ret . "\n";
|
|
|
|
// Copy to final dir
|
|
$NEWDESTI = $DESTI;
|
|
if (!is_dir("$NEWDESTI/signatures")) {
|
|
mkdir("$NEWDESTI/signatures", 0777, true);
|
|
}
|
|
echo "Copy \"$SOURCE/htdocs/install/filelist-$MAJOR.$MINOR.$BUILD.xml\" to $NEWDESTI/signatures/filelist-$MAJOR.$MINOR.$BUILD.xml\n";
|
|
copy("$SOURCE/htdocs/install/filelist-$MAJOR.$MINOR.$BUILD.xml", "$NEWDESTI/signatures/filelist-$MAJOR.$MINOR.$BUILD.xml");
|
|
}
|
|
|
|
|
|
// ========================================================================
|
|
// Update GIT tag if required
|
|
// ========================================================================
|
|
|
|
if ($nbofpublishneedtag) {
|
|
echo "Go to directory $SOURCE\n";
|
|
$olddir = getcwd();
|
|
chdir($SOURCE);
|
|
|
|
echo 'Run git tag -a -m "' . $MAJOR . '.' . $MINOR . '.' . $BUILD . '" "' . $MAJOR . '.' . $MINOR . '.' . $BUILD . '"' . "\n";
|
|
$ret = run("git tag -a -m \"$MAJOR.$MINOR.$BUILD\" \"$MAJOR.$MINOR.$BUILD\" 2>&1");
|
|
|
|
if (preg_match('/(already exists|existe déjà)/', $ret)) {
|
|
$QUESTIONOVERWRITETAG = prompt("WARNING: Tag $MAJOR.$MINOR.$BUILD already exists. Overwrite (y/N) ? ");
|
|
if (preg_match('/[oy]/i', $QUESTIONOVERWRITETAG)) {
|
|
echo 'Run git tag -a -f -m "' . $MAJOR . '.' . $MINOR . '.' . $BUILD . '" "' . $MAJOR . '.' . $MINOR . '.' . $BUILD . '"' . "\n";
|
|
run("git tag -a -f -m \"$MAJOR.$MINOR.$BUILD\" \"$MAJOR.$MINOR.$BUILD\"");
|
|
echo "Run git push $GITREMOTENAME -f --tags\n";
|
|
run("git push $GITREMOTENAME -f --tags");
|
|
}
|
|
} else {
|
|
echo "Run git push $GITREMOTENAME --tags\n";
|
|
run("git push $GITREMOTENAME --tags");
|
|
}
|
|
|
|
chdir($olddir);
|
|
}
|
|
|
|
|
|
// ========================================================================
|
|
// Update buildroot if required
|
|
// ========================================================================
|
|
|
|
if ($nboftargetneedbuildroot) {
|
|
if (!$copyalreadydone) {
|
|
echo "Creation of a buildroot used for all packages\n";
|
|
|
|
echo "Delete directory $BUILDROOT\n";
|
|
run("rm -fr \"$BUILDROOT\"");
|
|
|
|
@mkdir($BUILDROOT, 0777, true);
|
|
@mkdir("$BUILDROOT/$PROJECT", 0777, true);
|
|
echo "Copy $SOURCE into $BUILDROOT/$PROJECT\n";
|
|
run("cp -pr \"$SOURCE\" \"$BUILDROOT/$PROJECT\"");
|
|
}
|
|
|
|
echo "Clean $BUILDROOT\n";
|
|
run("rm -f $BUILDROOT/$PROJECT/.buildpath");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.cache");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.codeclimate");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.externalToolBuilders");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.git*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.project");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.pydevproject");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.settings");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.scrutinizer.yml");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.stickler.yml");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.travis.yml");
|
|
run("rm -fr $BUILDROOT/$PROJECT/.tx");
|
|
run("rm -f $BUILDROOT/$PROJECT/build.xml");
|
|
run("rm -f $BUILDROOT/$PROJECT/phpstan.neon");
|
|
run("rm -f $BUILDROOT/$PROJECT/pom.xml");
|
|
run("rm -f $BUILDROOT/$PROJECT/README-*.md");
|
|
|
|
run("rm -fr $BUILDROOT/$PROJECT/build/html");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/Doli*-*");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr_*.deb");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr_*.dsc");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr_*.tar.gz");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr_*.tar.xz");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.deb");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.rpm");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.tar");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.tar.gz");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.tar.xz");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.tgz");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.xz");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/dolibarr-*.zip");
|
|
run("rm -f $BUILDROOT/$PROJECT/build/doxygen/doxygen_warnings.log");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/cache.manifest");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.mysql");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.nova*");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.old");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf.php.pgsql");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/conf/conf*sav*");
|
|
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/install/mssql/README");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/install/mysql/README");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/install/pgsql/README");
|
|
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/install/mssql");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/install/sqlite3");
|
|
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/install/install.forced.php");
|
|
|
|
run("rm -fr $BUILDROOT/$PROJECT/node_modules");
|
|
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/ansible");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/codesniffer");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/codetemplates");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/examples/ldap");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/examples/zapier");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/initdata");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/initdemo");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/resources/dbmodel");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/resources/iso-normes");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/resources/licence");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/mail");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/multitail");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/phpcheckstyle");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/phpunit");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/security");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/spec");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/test");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/uml");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/vagrant");
|
|
run("rm -fr $BUILDROOT/$PROJECT/dev/xdebug");
|
|
run("rm -f $BUILDROOT/$PROJECT/dev/dolibarr_changes.txt");
|
|
run("rm -f $BUILDROOT/$PROJECT/dev/README");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot2.png");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot3.png");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot4.png");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot5.png");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot6.png");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot7.png");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot8.png");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot9.png");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot10.png");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot11.png");
|
|
run("rm -f $BUILDROOT/$PROJECT/doc/images/dolibarr_screenshot12.png");
|
|
|
|
// Security to avoid to package data files
|
|
echo "Remove documents dir\n";
|
|
run("rm -fr $BUILDROOT/$PROJECT/document");
|
|
run("rm -fr $BUILDROOT/$PROJECT/documents");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/document");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/documents");
|
|
|
|
echo "Remove subdir of custom dir\n";
|
|
echo "find $BUILDROOT/$PROJECT/htdocs/custom/* -type d -exec rm -fr {} \\;\n";
|
|
run("find $BUILDROOT/$PROJECT/htdocs/custom/* -type d -exec rm -fr {} \\; >/dev/null 2>&1");
|
|
echo "find $BUILDROOT/$PROJECT/htdocs/custom/* -type l -exec rm -fr {} \\;\n";
|
|
run("find $BUILDROOT/$PROJECT/htdocs/custom/* -type l -exec rm -fr {} \\; >/dev/null 2>&1");
|
|
|
|
// Remove known external modules to avoid any error when packaging from env where external modules are tested
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/abricot*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/accountingexport*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/allscreens*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/ancotec*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/cabinetmed*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/calling*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/bootstrap*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/dolimed*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/dolimod*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/factory*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/forceproject*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/lead*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/management*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/multicompany*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/ndf*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/nltechno*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/nomenclature*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/of/");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/oscim*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/pos*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/teclib*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/timesheet*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/webmail*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/theme/common/fontawesome-5/svgs");
|
|
|
|
// Remove other test files
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/public/test");
|
|
run("rm -fr $BUILDROOT/$PROJECT/test");
|
|
run("rm -fr $BUILDROOT/$PROJECT/Thumbs.db $BUILDROOT/$PROJECT/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/*/Thumbs.db");
|
|
run("rm -f $BUILDROOT/$PROJECT/.cvsignore $BUILDROOT/$PROJECT/*/.cvsignore $BUILDROOT/$PROJECT/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.cvsignore");
|
|
run("rm -f $BUILDROOT/$PROJECT/.gitignore $BUILDROOT/$PROJECT/*/.gitignore $BUILDROOT/$PROJECT/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.gitignore");
|
|
|
|
// Remove files installed by composer
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/geoip/sample*.*");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/bin");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/ckeditor/adapters");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/ckeditor/samples");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/_source");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/composer");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/doctrine");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/select2/release.sh");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/doc");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/example");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/test");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mobiledetect/mobiledetectlib/.gitmodules");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mobiledetect/mobiledetectlib/docs");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/.github");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/docs");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/samples");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/scripts");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/src");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/test");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/samples");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/php-iban/docs");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/sabre/sabre/*/tests");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/stripe/tests");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/stripe/LICENSE");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/examples");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/freefont-*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/ae_fonts_*");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/utils");
|
|
run("rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/tools");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/vendor");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/webmozart");
|
|
run("rm -f $BUILDROOT/$PROJECT/htdocs/includes/autoload.php");
|
|
}
|
|
|
|
|
|
// ========================================================================
|
|
// Build package for each target
|
|
// ========================================================================
|
|
|
|
ksort($CHOOSEDTARGET);
|
|
foreach ($CHOOSEDTARGET as $tgt => $val) {
|
|
if ($val < 0) { continue; }
|
|
if ($tgt === '-CHKSUM') { continue; }
|
|
|
|
echo "\nBuild package for target $tgt\n";
|
|
|
|
|
|
// --- SNAPSHOT ---
|
|
if ($tgt === 'SNAPSHOT') {
|
|
$NEWDESTI = $DESTI;
|
|
|
|
echo "Remove target $FILENAMESNAPSHOT.tgz...\n";
|
|
@unlink("$NEWDESTI/$FILENAMESNAPSHOT.tgz");
|
|
|
|
run("rm -fr $BUILDROOT/$FILENAMESNAPSHOT");
|
|
echo "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMESNAPSHOT\n";
|
|
$cmd = "cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$FILENAMESNAPSHOT\"";
|
|
run($cmd);
|
|
|
|
echo "Compress $BUILDROOT into $FILENAMESNAPSHOT.tgz...\n";
|
|
$cmd = "tar --exclude doli*.tgz --exclude doli*.deb --exclude doli*.exe --exclude doli*.xz --exclude doli*.zip --exclude doli*.rpm --exclude .cache --exclude .settings --exclude conf.php --exclude conf.php.mysql --exclude conf.php.old --exclude conf.php.postgres --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMESNAPSHOT.tgz\" $FILENAMESNAPSHOT";
|
|
echo $cmd . "\n";
|
|
run($cmd);
|
|
|
|
// Move to final dir
|
|
echo "Move $FILENAMESNAPSHOT.tgz to $NEWDESTI/$FILENAMESNAPSHOT.tgz\n";
|
|
run("mv \"$FILENAMESNAPSHOT.tgz\" \"$NEWDESTI/$FILENAMESNAPSHOT.tgz\"");
|
|
continue;
|
|
}
|
|
|
|
|
|
// --- TGZ ---
|
|
if ($tgt === 'TGZ') {
|
|
$NEWDESTI = $DESTI;
|
|
if (preg_match('/stable/', $NEWDESTI)) {
|
|
@mkdir($DESTI . '/standard');
|
|
if (is_dir($DESTI . '/standard')) { $NEWDESTI = $DESTI . '/standard'; }
|
|
}
|
|
|
|
echo "Remove target $FILENAMETGZ.tgz...\n";
|
|
@unlink("$NEWDESTI/$FILENAMETGZ.tgz");
|
|
|
|
run("rm -fr $BUILDROOT/$FILENAMETGZ");
|
|
echo "Copy $BUILDROOT/$PROJECT/ to $BUILDROOT/$FILENAMETGZ\n";
|
|
$cmd = "cp -pr \"$BUILDROOT/$PROJECT/\" \"$BUILDROOT/$FILENAMETGZ\"";
|
|
run($cmd);
|
|
|
|
run("rm -fr $BUILDROOT/$FILENAMETGZ/build/exe");
|
|
run("rm -fr $BUILDROOT/$FILENAMETGZ/htdocs/includes/ckeditor/_source");
|
|
|
|
echo "Compress $FILENAMETGZ into $FILENAMETGZ.tgz...\n";
|
|
$cmd = "tar --exclude-vcs --exclude-from \"$BUILDROOT/$PROJECT/build/tgz/tar_exclude.txt\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$BUILDROOT/$FILENAMETGZ.tgz\" $FILENAMETGZ";
|
|
echo "$cmd\n";
|
|
run($cmd);
|
|
|
|
// Move to final dir
|
|
echo "Move $BUILDROOT/$FILENAMETGZ.tgz to $NEWDESTI/$FILENAMETGZ.tgz\n";
|
|
run("mv \"$BUILDROOT/$FILENAMETGZ.tgz\" \"$NEWDESTI/$FILENAMETGZ.tgz\"");
|
|
continue;
|
|
}
|
|
|
|
|
|
// --- XZ ---
|
|
if ($tgt === 'XZ') {
|
|
$NEWDESTI = $DESTI;
|
|
if (preg_match('/stable/', $NEWDESTI)) {
|
|
@mkdir($DESTI . '/standard');
|
|
if (is_dir($DESTI . '/standard')) { $NEWDESTI = $DESTI . '/standard'; }
|
|
}
|
|
|
|
echo "Remove target $FILENAMEXZ.xz...\n";
|
|
@unlink("$NEWDESTI/$FILENAMEXZ.xz");
|
|
|
|
run("rm -fr $BUILDROOT/$FILENAMEXZ");
|
|
echo "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMEXZ\n";
|
|
$cmd = "cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$FILENAMEXZ\"";
|
|
run($cmd);
|
|
|
|
run("rm -fr $BUILDROOT/$FILENAMEXZ/build/exe");
|
|
run("rm -fr $BUILDROOT/$FILENAMEXZ/htdocs/includes/ckeditor/_source");
|
|
|
|
echo "Compress $FILENAMEXZ into $FILENAMEXZ.xz...\n";
|
|
|
|
echo "Go to directory $BUILDROOT\n";
|
|
$olddir = getcwd();
|
|
chdir($BUILDROOT);
|
|
$cmd = "xz -9 -r $BUILDROOT/$FILENAMEXZ.xz *";
|
|
echo $cmd . "\n";
|
|
run($cmd);
|
|
chdir($olddir);
|
|
|
|
// Move to final dir
|
|
echo "Move $FILENAMEXZ.xz to $NEWDESTI/$FILENAMEXZ.xz\n";
|
|
run("mv \"$BUILDROOT/$FILENAMEXZ.xz\" \"$NEWDESTI/$FILENAMEXZ.xz\"");
|
|
continue;
|
|
}
|
|
|
|
|
|
// --- ZIP ---
|
|
if ($tgt === 'ZIP') {
|
|
$NEWDESTI = $DESTI;
|
|
if (preg_match('/stable/', $NEWDESTI)) {
|
|
@mkdir($DESTI . '/standard');
|
|
if (is_dir($DESTI . '/standard')) { $NEWDESTI = $DESTI . '/standard'; }
|
|
}
|
|
|
|
echo "Remove target $FILENAMEZIP.zip...\n";
|
|
@unlink("$NEWDESTI/$FILENAMEZIP.zip");
|
|
|
|
run("rm -fr $BUILDROOT/$FILENAMEZIP");
|
|
echo "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMEZIP\n";
|
|
$cmd = "cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$FILENAMEZIP\"";
|
|
run($cmd);
|
|
|
|
run("rm -fr $BUILDROOT/$FILENAMEZIP/build/exe");
|
|
run("rm -fr $BUILDROOT/$FILENAMEZIP/htdocs/includes/ckeditor/_source");
|
|
|
|
echo "Compress $FILENAMEZIP into $FILENAMEZIP.zip...\n";
|
|
|
|
echo "Go to directory $BUILDROOT\n";
|
|
$olddir = getcwd();
|
|
chdir($BUILDROOT);
|
|
$cmd = "7z a -r -tzip -xr@\"$BUILDROOT/$FILENAMEZIP/build/zip/zip_exclude.txt\" -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMEZIP/*";
|
|
echo $cmd . "\n";
|
|
run($cmd);
|
|
chdir($olddir);
|
|
|
|
// Move to final dir
|
|
echo "Move $FILENAMEZIP.zip to $NEWDESTI/$FILENAMEZIP.zip\n";
|
|
run("mv \"$BUILDROOT/$FILENAMEZIP.zip\" \"$NEWDESTI/$FILENAMEZIP.zip\"");
|
|
continue;
|
|
}
|
|
|
|
|
|
// --- RPM ---
|
|
if (preg_match('/RPM/', $tgt)) {
|
|
$NEWDESTI = $DESTI;
|
|
$subdir = 'package_rpm_generic';
|
|
if (preg_match('/FEDO/i', $tgt)) { $subdir = 'package_rpm_redhat-fedora'; }
|
|
if (preg_match('/MAND/i', $tgt)) { $subdir = 'package_rpm_mandriva'; }
|
|
if (preg_match('/OPEN/i', $tgt)) { $subdir = 'package_rpm_opensuse'; }
|
|
if (preg_match('/stable/', $NEWDESTI)) {
|
|
@mkdir($DESTI . '/' . $subdir);
|
|
if (is_dir($DESTI . '/' . $subdir)) { $NEWDESTI = $DESTI . '/' . $subdir; }
|
|
}
|
|
|
|
if ($RPMDIR === '') { $RPMDIR = (getenv('HOME') ?: '') . '/rpmbuild'; }
|
|
|
|
echo "Version is $MAJOR.$MINOR.$REL1-$RPMSUBVERSION\n";
|
|
|
|
echo "Remove target $FILENAMERPM...\n";
|
|
@unlink("$NEWDESTI/$FILENAMERPM");
|
|
echo "Remove target $FILENAMERPMSRC...\n";
|
|
@unlink("$NEWDESTI/$FILENAMERPMSRC");
|
|
|
|
echo "Create directory $BUILDROOT/$FILENAMETGZ2\n";
|
|
run("rm -fr $BUILDROOT/$FILENAMETGZ2");
|
|
|
|
echo "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$FILENAMETGZ2\n";
|
|
$cmd = "cp -pr '$BUILDROOT/$PROJECT' '$BUILDROOT/$FILENAMETGZ2'";
|
|
run($cmd);
|
|
|
|
echo "Set permissions on files/dir\n";
|
|
run("chmod -R 755 $BUILDROOT/$FILENAMETGZ2");
|
|
$cmd = "find $BUILDROOT/$FILENAMETGZ2 -type f -exec chmod 644 {} \\; ";
|
|
run($cmd);
|
|
|
|
// Build tgz
|
|
echo "Compress $FILENAMETGZ2 into $FILENAMETGZ2.tgz...\n";
|
|
run("tar --exclude-from \"$SOURCE/build/tgz/tar_exclude.txt\" --directory \"$BUILDROOT\" -czvf \"$BUILDROOT/$FILENAMETGZ2.tgz\" $FILENAMETGZ2");
|
|
|
|
if (!is_dir($RPMDIR . '/SOURCES')) { @mkdir($RPMDIR . '/SOURCES', 0777, true); }
|
|
echo "Move $BUILDROOT/$FILENAMETGZ2.tgz to $RPMDIR/SOURCES/$FILENAMETGZ2.tgz\n";
|
|
$cmd = "mv $BUILDROOT/$FILENAMETGZ2.tgz $RPMDIR/SOURCES/$FILENAMETGZ2.tgz";
|
|
run($cmd);
|
|
|
|
$BUILDFIC = $FILENAME . '.spec';
|
|
$BUILDFICSRC = $FILENAME . '_generic.spec';
|
|
if (preg_match('/FEDO/i', $tgt)) { $BUILDFICSRC = $FILENAME . '_fedora.spec'; }
|
|
if (preg_match('/MAND/i', $tgt)) { $BUILDFICSRC = $FILENAME . '_mandriva.spec'; }
|
|
if (preg_match('/OPEN/i', $tgt)) { $BUILDFICSRC = $FILENAME . '_opensuse.spec'; }
|
|
|
|
$day = str_pad(date('j'), 2, ' ', STR_PAD_LEFT);
|
|
$datestring = date('D M ') . $day . date(' Y');
|
|
$changelogstring = "* $datestring Laurent Destailleur (eldy) $MAJOR.$MINOR.$REL1-$RPMSUBVERSION\n- Upstream release\n";
|
|
|
|
echo "Generate file $BUILDROOT/$BUILDFIC from $SOURCE/build/rpm/$BUILDFICSRC\n";
|
|
$specContent = file_get_contents("$SOURCE/build/rpm/$BUILDFICSRC");
|
|
if ($specContent === false) {
|
|
echo "Error: Can't read $SOURCE/build/rpm/$BUILDFICSRC\n";
|
|
exit(1);
|
|
}
|
|
$specContent = str_replace('__FILENAMETGZ__', $FILENAMETGZ, $specContent);
|
|
$specContent = str_replace('__VERSION__', "$MAJOR.$MINOR.$REL1", $specContent);
|
|
$specContent = str_replace('__RELEASE__', $RPMSUBVERSION, $specContent);
|
|
$specContent = str_replace('__CHANGELOGSTRING__', $changelogstring, $specContent);
|
|
file_put_contents("$BUILDROOT/$BUILDFIC", $specContent);
|
|
|
|
echo "Copy patch file to $RPMDIR/SOURCES\n";
|
|
run("cp \"$SOURCE/build/rpm/dolibarr-forrpm.patch\" \"$RPMDIR/SOURCES\"");
|
|
run("chmod 644 $RPMDIR/SOURCES/dolibarr-forrpm.patch");
|
|
|
|
echo "Launch RPM build (rpmbuild --clean -ba $BUILDROOT/$BUILDFIC)\n";
|
|
run("rpmbuild --clean -ba $BUILDROOT/$BUILDFIC");
|
|
|
|
// Move to final dir
|
|
echo "Move $RPMDIR/RPMS/$ARCH/{$FILENAMETGZ2}-{$RPMSUBVERSION}*.{$ARCH}.rpm into $NEWDESTI/{$FILENAMETGZ2}-{$RPMSUBVERSION}*.{$ARCH}.rpm\n";
|
|
$cmd = "mv $RPMDIR/RPMS/$ARCH/{$FILENAMETGZ2}-{$RPMSUBVERSION}*.{$ARCH}.rpm \"$NEWDESTI/\"";
|
|
run($cmd);
|
|
echo "Move $RPMDIR/SRPMS/{$FILENAMETGZ2}-{$RPMSUBVERSION}*.src.rpm into $NEWDESTI/{$FILENAMETGZ2}-{$RPMSUBVERSION}*.src.rpm\n";
|
|
$cmd = "mv $RPMDIR/SRPMS/{$FILENAMETGZ2}-{$RPMSUBVERSION}*.src.rpm \"$NEWDESTI/\"";
|
|
run($cmd);
|
|
echo "Move $RPMDIR/SOURCES/$FILENAMETGZ2.tgz into $NEWDESTI/$FILENAMETGZ2.tgz\n";
|
|
// This line was commented out in original: $cmd="mv ..."; $ret=`$cmd`;
|
|
continue;
|
|
}
|
|
|
|
|
|
// --- DEB ---
|
|
if ($tgt === 'DEB') {
|
|
$NEWDESTI = $DESTI;
|
|
if (preg_match('/stable/', $NEWDESTI)) {
|
|
@mkdir($DESTI . '/package_debian-ubuntu');
|
|
if (is_dir($DESTI . '/package_debian-ubuntu')) { $NEWDESTI = $DESTI . '/package_debian-ubuntu'; }
|
|
}
|
|
|
|
$olddir = getcwd();
|
|
|
|
echo "Remove target ${FILENAMEDEB}_all.deb...\n";
|
|
@unlink("$NEWDESTI/${FILENAMEDEB}_all.deb");
|
|
echo "Remove target ${FILENAMEDEB}.dsc...\n";
|
|
@unlink("$NEWDESTI/${FILENAMEDEB}.dsc");
|
|
echo "Remove target ${FILENAMEDEB}.tar.gz...\n";
|
|
@unlink("$NEWDESTI/${FILENAMEDEB}.tar.gz");
|
|
echo "Remove target ${FILENAMEDEB}.changes...\n";
|
|
@unlink("$NEWDESTI/${FILENAMEDEB}.changes");
|
|
echo "Remove target ${FILENAMEDEB}.debian.tar.gz...\n";
|
|
@unlink("$NEWDESTI/${FILENAMEDEB}.debian.tar.gz");
|
|
echo "Remove target ${FILENAMEDEB}.debian.tar.xz...\n";
|
|
@unlink("$NEWDESTI/${FILENAMEDEB}.debian.tar.xz");
|
|
echo "Remove target ${FILENAMEDEBNATIVE}.orig.tar.gz...\n";
|
|
@unlink("$NEWDESTI/${FILENAMEDEBNATIVE}.orig.tar.gz");
|
|
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp");
|
|
run("rm -fr $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build");
|
|
|
|
echo "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$PROJECT.tmp\n";
|
|
$cmd = "cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$PROJECT.tmp\"";
|
|
run($cmd);
|
|
$cmd = "cp -pr \"$BUILDROOT/$PROJECT/build/debian/apache/.htaccess\" \"$BUILDROOT/$PROJECT.tmp/build/debian/apache/.htaccess\"";
|
|
run($cmd);
|
|
|
|
echo "Remove other files\n";
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/README-FR.md");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/README");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/README-FR");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/aps");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/dmg");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/pad/README");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/tgz/README");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/debian/po");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/debian/source");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/changelog");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/compat");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/control*");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/copyright");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.config");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.desktop");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.docs");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.install");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.lintian-overrides");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.postrm");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.postinst");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.templates");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/dolibarr.templates.futur");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/rules");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/README.Debian");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/README.howto");
|
|
run("rm -f $BUILDROOT/$PROJECT.tmp/build/debian/watch");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/doap");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/exe");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/launchpad");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/live");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/patch");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/perl");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/rpm");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/build/zip");
|
|
// Remove duplicate license files
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/_source/LICENSE.md");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/_source/plugins/scayt/LICENSE.md");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/_source/plugins/wsc/LICENSE.md");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/LICENSE.md");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/plugins/scayt/LICENSE.md");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/ckeditor/ckeditor/plugins/wsc/LICENSE.md");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/php-iban/LICENSE");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/flot/LICENSE.txt");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/datatables/extensions/ColReorder/License.txt");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/datatables/extensions/ColVis/License.txt");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/datatables/extensions/FixedColumns/License.txt");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/datatables/extensions/Responsive/License.txt");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/datatables/license.txt");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/jquery/plugins/select2/LICENSE");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/mike42/escpos-php/LICENSE.md");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/htdocs/includes/mobiledetect/mobiledetectlib/LICENSE.txt");
|
|
|
|
// Remove files we don't need (already removed)
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/.codeclimate.yml");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/.pre-commit-config.yaml");
|
|
run("rm -fr $BUILDROOT/$PROJECT.tmp/.vscode");
|
|
run("find $BUILDROOT/$PROJECT.tmp/ -type f -name '.editorconfig' -exec rm {} \\;");
|
|
run("find $BUILDROOT/$PROJECT.tmp/ -type f -name '.travis.yml' -exec rm {} \\;");
|
|
|
|
// Rename upstream changelog to match debian rules
|
|
run("mv $BUILDROOT/$PROJECT.tmp/ChangeLog $BUILDROOT/$PROJECT.tmp/changelog");
|
|
|
|
// Prepare source package (init debian dir)
|
|
echo "Create directory $BUILDROOT/$PROJECT.tmp/debian\n";
|
|
run("mkdir \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
|
|
echo "Copy $SOURCE/build/debian/xxx to $BUILDROOT/$PROJECT.tmp/debian\n";
|
|
|
|
// Add files for dpkg-source (changelog)
|
|
$changelogContent = file_get_contents("$SOURCE/build/debian/changelog");
|
|
if ($changelogContent === false) {
|
|
echo "Error: Can't read $SOURCE/build/debian/changelog\n";
|
|
exit(1);
|
|
}
|
|
$changelogContent = str_replace('__VERSION__', "$MAJOR.$MINOR.$newbuild", $changelogContent);
|
|
file_put_contents("$BUILDROOT/$PROJECT.tmp/debian/changelog", $changelogContent);
|
|
|
|
// Add files for dpkg-source
|
|
run("cp -f \"$SOURCE/build/debian/compat\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/control\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/copyright\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/dolibarr.desktop\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/dolibarr.docs\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/dolibarr.install\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/dolibarr.lintian-overrides\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/dolibarr.xpm\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/rules\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/watch\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -fr \"$SOURCE/build/debian/patches\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -fr \"$SOURCE/build/debian/po\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -fr \"$SOURCE/build/debian/source\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -fr \"$SOURCE/build/debian/apache\" \"$BUILDROOT/$PROJECT.tmp/debian/apache\"");
|
|
run("cp -f \"$SOURCE/build/debian/apache/.htaccess\" \"$BUILDROOT/$PROJECT.tmp/debian/apache\"");
|
|
run("cp -fr \"$SOURCE/build/debian/lighttpd\" \"$BUILDROOT/$PROJECT.tmp/debian/lighttpd\"");
|
|
// Add files also required to build binary package
|
|
run("cp -f \"$SOURCE/build/debian/dolibarr.config\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/dolibarr.postinst\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/dolibarr.postrm\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/dolibarr.templates\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
run("cp -f \"$SOURCE/build/debian/install.forced.php.install\" \"$BUILDROOT/$PROJECT.tmp/debian\"");
|
|
|
|
echo "Set permissions on files/dir\n";
|
|
run("chmod -R 755 $BUILDROOT/$PROJECT.tmp");
|
|
run("find $BUILDROOT/$PROJECT.tmp -type f -exec chmod 644 {} \\; ");
|
|
run("find $BUILDROOT/$PROJECT.tmp/build -name '*.php' -type f -exec chmod 755 {} \\; ");
|
|
run("find $BUILDROOT/$PROJECT.tmp/build -name '*.dpatch' -type f -exec chmod 755 {} \\; ");
|
|
run("find $BUILDROOT/$PROJECT.tmp/build -name '*.pl' -type f -exec chmod 755 {} \\; ");
|
|
run("find $BUILDROOT/$PROJECT.tmp/dev -name '*.php' -type f -exec chmod 755 {} \\; ");
|
|
run("chmod 755 $BUILDROOT/$PROJECT.tmp/debian/rules");
|
|
run("chmod -R 644 $BUILDROOT/$PROJECT.tmp/dev/translation/autotranslator.class.php");
|
|
run("chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/actions_mymodule.class.php");
|
|
run("chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/api_mymodule.class.php");
|
|
run("chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/class/myobject.class.php");
|
|
run("chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/core/modules/modMyModule.class.php");
|
|
run("chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/mymoduleindex.php");
|
|
run("chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/myobject_card.php");
|
|
run("chmod -R 644 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/myobject_list.php");
|
|
run("chmod -R 755 $BUILDROOT/$PROJECT.tmp/htdocs/modulebuilder/template/scripts/mymodule.php");
|
|
run("find $BUILDROOT/$PROJECT.tmp/scripts -name '*.php' -type f -exec chmod 755 {} \\; ");
|
|
run("find $BUILDROOT/$PROJECT.tmp/scripts -name '*.sh' -type f -exec chmod 755 {} \\; ");
|
|
|
|
echo "Rename directory $BUILDROOT/$PROJECT.tmp into $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build\n";
|
|
$cmd = "mv $BUILDROOT/$PROJECT.tmp $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build";
|
|
run($cmd);
|
|
|
|
echo "Go into directory $BUILDROOT\n";
|
|
chdir($BUILDROOT);
|
|
|
|
// We need a tarball to be able to build "quilt" debian package
|
|
echo "Compress $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build into $BUILDROOT/$FILENAMEDEBNATIVE.orig.tar.gz...\n";
|
|
$cmd = "tar --exclude-vcs --exclude-from \"$BUILDROOT/$PROJECT/build/tgz/tar_exclude.txt\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$BUILDROOT/$FILENAMEDEBNATIVE.orig.tar.gz\" $PROJECT-$MAJOR.$MINOR.$build";
|
|
echo $cmd . "\n";
|
|
run($cmd);
|
|
|
|
// Creation of source package
|
|
echo "Go into directory $BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build\n";
|
|
chdir("$BUILDROOT/$PROJECT-$MAJOR.$MINOR.$build");
|
|
$cmd = "dpkg-buildpackage -us -uc --compression=gzip";
|
|
echo "Launch DEB build ($cmd)\n";
|
|
$ret = run("$cmd 2>&1");
|
|
echo $ret . "\n";
|
|
|
|
chdir($olddir);
|
|
|
|
echo "You can check bin package with lintian --pedantic -E -I \"$NEWDESTI/${FILENAMEDEB}_all.deb\"\n";
|
|
echo "You can check src package with lintian --pedantic -E -I \"$NEWDESTI/${FILENAMEDEB}.dsc\"\n";
|
|
|
|
// Move to final dir
|
|
echo "Move *_all.deb *.dsc *.orig.tar.gz *.changes to $NEWDESTI\n";
|
|
run("mv $BUILDROOT/*_all.deb \"$NEWDESTI/\"");
|
|
run("mv $BUILDROOT/*.dsc \"$NEWDESTI/\"");
|
|
run("mv $BUILDROOT/*.orig.tar.gz \"$NEWDESTI/\"");
|
|
run("mv $BUILDROOT/*.debian.tar.gz \"$NEWDESTI/\"");
|
|
run("mv $BUILDROOT/*.changes \"$NEWDESTI/\"");
|
|
continue;
|
|
}
|
|
|
|
|
|
// --- EXEDOLIWAMP ---
|
|
if ($tgt === 'EXEDOLIWAMP') {
|
|
$NEWDESTI = $DESTI;
|
|
if (preg_match('/stable/', $NEWDESTI)) {
|
|
@mkdir($DESTI . '/package_windows');
|
|
if (is_dir($DESTI . '/package_windows')) { $NEWDESTI = $DESTI . '/package_windows'; }
|
|
}
|
|
|
|
echo "Remove target $NEWDESTI/$FILENAMEEXEDOLIWAMP.exe...\n";
|
|
@unlink("$NEWDESTI/$FILENAMEEXEDOLIWAMP.exe");
|
|
|
|
if ($OS === 'windows') {
|
|
echo "Check that ISCC.exe is in your PATH.\n";
|
|
} else {
|
|
echo "Check that in your Wine setup, you have created a Z: drive that point to your / directory.\n";
|
|
}
|
|
|
|
$SOURCEBACK = str_replace('/', '\\', $SOURCE);
|
|
|
|
echo "Prepare file \"$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.tmp.iss\" from \"$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.iss\"\n";
|
|
|
|
$issContent = file_get_contents("$SOURCE/build/exe/doliwamp/doliwamp.iss");
|
|
if ($issContent === false) {
|
|
echo "Error: Can't read $SOURCE/build/exe/doliwamp/doliwamp.iss\n";
|
|
exit(1);
|
|
}
|
|
$issContent = str_replace('__FILENAMEEXEDOLIWAMP__', $FILENAMEEXEDOLIWAMP, $issContent);
|
|
file_put_contents("$SOURCE/build/exe/doliwamp/doliwamp.tmp.iss", $issContent);
|
|
|
|
echo "Compil exe $FILENAMEEXEDOLIWAMP.exe file from iss file \"$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.tmp.iss\" on OS $OS\n";
|
|
|
|
$cmd = '';
|
|
if ($OS === 'windows') {
|
|
$cmd = "ISCC.exe \"$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.tmp.iss\"";
|
|
}
|
|
if ($cmd) {
|
|
echo "$cmd\n";
|
|
$ret = run($cmd);
|
|
echo "ret=$ret\n";
|
|
}
|
|
|
|
// Move to final dir
|
|
echo "Move \"$SOURCE/build/$FILENAMEEXEDOLIWAMP.exe\" to $NEWDESTI/$FILENAMEEXEDOLIWAMP.exe\n";
|
|
@rename("$SOURCE/build/$FILENAMEEXEDOLIWAMP.exe", "$NEWDESTI/$FILENAMEEXEDOLIWAMP.exe");
|
|
|
|
echo "Remove tmp file $SOURCE/build/exe/doliwamp/doliwamp.tmp.iss\n";
|
|
@unlink("$SOURCE/build/exe/doliwamp/doliwamp.tmp.iss");
|
|
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
// ========================================================================
|
|
// Publish package for each target
|
|
// ========================================================================
|
|
|
|
ksort($CHOOSEDPUBLISH);
|
|
foreach ($CHOOSEDPUBLISH as $tgt => $val) {
|
|
if ($val < 0) { continue; }
|
|
|
|
echo "\nList of files to publish (BUILD=$BUILD)\n";
|
|
|
|
if ($tgt === 'ASSO' && preg_match('/[a-z]/i', $BUILD)) {
|
|
// Not stable
|
|
$filestoscansf = [
|
|
"$DESTI/$FILENAMERPM" => 'Dolibarr installer for Fedora-Redhat-Mandriva-Opensuse (DoliRpm)',
|
|
"$DESTI/${FILENAMEDEB}_all.deb" => 'Dolibarr installer for Debian-Ubuntu (DoliDeb)',
|
|
"$DESTI/$FILENAMEEXEDOLIWAMP.exe" => 'Dolibarr installer for Windows (DoliWamp)',
|
|
"$DESTI/$FILENAMETGZ.tgz" => 'Dolibarr ERP-CRM',
|
|
"$DESTI/$FILENAMETGZ.zip" => 'Dolibarr ERP-CRM',
|
|
];
|
|
$filestoscanstableasso = [
|
|
"$DESTI/$FILENAMERPM" => '',
|
|
"$DESTI/${FILENAMEDEB}_all.deb" => '',
|
|
"$DESTI/$FILENAMEEXEDOLIWAMP.exe" => '',
|
|
"$DESTI/$FILENAMETGZ.tgz" => '',
|
|
"$DESTI/$FILENAMETGZ.zip" => '',
|
|
];
|
|
} else {
|
|
$filestoscansf = [
|
|
"$DESTI/signatures/filelist-$MAJOR.$MINOR.$BUILD.xml" => 'none',
|
|
"$DESTI/package_rpm_generic/$FILENAMERPM" => 'Dolibarr installer for Fedora-Redhat-Mandriva-Opensuse (DoliRpm)',
|
|
"$DESTI/package_rpm_generic/$FILENAMERPMSRC" => 'none',
|
|
"$DESTI/package_debian-ubuntu/${FILENAMEDEB}_all.deb" => 'Dolibarr installer for Debian-Ubuntu (DoliDeb)',
|
|
"$DESTI/package_debian-ubuntu/${FILENAMEDEB}_amd64.changes" => 'none',
|
|
"$DESTI/package_debian-ubuntu/${FILENAMEDEB}.dsc" => 'none',
|
|
"$DESTI/package_debian-ubuntu/${FILENAMEDEB}.debian.tar.gz" => 'none',
|
|
"$DESTI/package_debian-ubuntu/${FILENAMEDEBSHORT}.orig.tar.gz" => 'none',
|
|
"$DESTI/package_windows/$FILENAMEEXEDOLIWAMP.exe" => 'Dolibarr installer for Windows (DoliWamp)',
|
|
"$DESTI/standard/$FILENAMETGZ.tgz" => 'Dolibarr ERP-CRM',
|
|
"$DESTI/standard/$FILENAMETGZ.zip" => 'Dolibarr ERP-CRM',
|
|
];
|
|
$filestoscanstableasso = [
|
|
"$DESTI/signatures/filelist-$MAJOR.$MINOR.$BUILD.xml" => 'signatures',
|
|
"$DESTI/package_rpm_generic/$FILENAMERPM" => 'package_rpm_generic',
|
|
"$DESTI/package_rpm_generic/$FILENAMERPMSRC" => 'package_rpm_generic',
|
|
"$DESTI/package_debian-ubuntu/${FILENAMEDEB}_all.deb" => 'package_debian-ubuntu',
|
|
"$DESTI/package_debian-ubuntu/${FILENAMEDEB}_amd64.changes" => 'package_debian-ubuntu',
|
|
"$DESTI/package_debian-ubuntu/${FILENAMEDEB}.dsc" => 'package_debian-ubuntu',
|
|
"$DESTI/package_debian-ubuntu/${FILENAMEDEB}.debian.tar.gz" => 'package_debian-ubuntu',
|
|
"$DESTI/package_debian-ubuntu/${FILENAMEDEBSHORT}.orig.tar.gz" => 'package_debian-ubuntu',
|
|
"$DESTI/package_windows/$FILENAMEEXEDOLIWAMP.exe" => 'package_windows',
|
|
"$DESTI/standard/$FILENAMETGZ.tgz" => 'standard',
|
|
"$DESTI/standard/$FILENAMETGZ.zip" => 'standard',
|
|
];
|
|
}
|
|
|
|
ksort($filestoscansf);
|
|
foreach ($filestoscansf as $file => $label) {
|
|
$filesize = @filesize($file);
|
|
$filedate = @filemtime($file);
|
|
echo $file . ' ' . ($filesize ? '(found)' : '(not found)');
|
|
if ($filesize) { echo ' - ' . $filesize; }
|
|
if ($filedate) { echo ' - ' . date('Y-m-d H:i:s', $filedate); }
|
|
echo "\n";
|
|
}
|
|
|
|
if ($tgt === 'SF' || $tgt === 'ASSO') {
|
|
echo "\n";
|
|
|
|
$PUBLISH = '';
|
|
if ($tgt === 'SF') { $PUBLISH = $PUBLISHSTABLE; }
|
|
if ($tgt === 'ASSO' && preg_match('/[a-z]/i', $BUILD)) { $PUBLISH = $PUBLISHBETARC . '/lastbuild'; }
|
|
if ($tgt === 'ASSO' && preg_match('/^[0-9]+$/', $BUILD)) { $PUBLISH = $PUBLISHBETARC . '/stable'; }
|
|
|
|
$NEWPUBLISH = $PUBLISH;
|
|
prompt("Publish to target $NEWPUBLISH. Click enter or CTRL+C...\n");
|
|
|
|
echo "Create empty dir /tmp/emptydir. We need it to create target dir using rsync.\n";
|
|
run("mkdir -p \"/tmp/emptydir/\"");
|
|
|
|
$filestoscan = $filestoscansf;
|
|
ksort($filestoscan);
|
|
|
|
foreach ($filestoscan as $file => $label) {
|
|
$filesize = @filesize($file);
|
|
if (!$filesize) { continue; }
|
|
|
|
if ($tgt === 'SF') {
|
|
if ($label === 'none') {
|
|
continue;
|
|
}
|
|
$destFolder = "$NEWPUBLISH/$label/$MAJOR.$MINOR.$BUILD";
|
|
} elseif ($tgt === 'ASSO' && preg_match('/stable/', $NEWPUBLISH)) {
|
|
$destFolder = "$NEWPUBLISH/" . ($filestoscanstableasso[$file] ?? '');
|
|
} elseif ($tgt === 'ASSO' && !preg_match('/stable/', $NEWPUBLISH)) {
|
|
$destFolder = $NEWPUBLISH;
|
|
} else {
|
|
// No more used
|
|
$dirnameonly = preg_replace('/.*\/([^\/]+)\/[^\/]+$/', '$1', $file);
|
|
$destFolder = "$NEWPUBLISH/$dirnameonly";
|
|
}
|
|
|
|
echo "\n";
|
|
echo "Publish file $file to $destFolder\n";
|
|
|
|
$command = "rsync -s -e 'ssh' --recursive /tmp/emptydir/ \"$destFolder\"";
|
|
echo "$command\n";
|
|
run($command);
|
|
|
|
$command = "rsync -s -e 'ssh' \"$file\" \"$destFolder\"";
|
|
echo "$command\n";
|
|
$ret = run($command);
|
|
echo "$ret\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// ============================================================================
|
|
// Summary
|
|
// ============================================================================
|
|
|
|
echo "\n----- Summary -----\n";
|
|
|
|
ksort($CHOOSEDTARGET);
|
|
foreach ($CHOOSEDTARGET as $tgt => $val) {
|
|
if ($tgt === '-CHKSUM') {
|
|
echo "Checksum was generated\n";
|
|
continue;
|
|
}
|
|
if ($val < 0) {
|
|
echo "Package $tgt not built (bad requirement).\n";
|
|
} else {
|
|
echo "Package $tgt built successfully in $DESTI\n";
|
|
}
|
|
}
|
|
|
|
if (!$batch) {
|
|
prompt("\nPress key to finish...");
|
|
}
|
|
|
|
exit(0);
|