Spaces:
No application file
No application file
| $criticalMigrations = []; // List of critical migrations | |
| $baseDir = __DIR__; | |
| // Check if the version is in a branch or tag | |
| $args = getopt('b::', ['repackage']); | |
| $gitSourceLocation = (isset($args['b'])) ? ' ' : ' tags/'; | |
| /* | |
| * Build a release package, this should be run after the new version is tagged; note the tag must match the version string in AppKernel | |
| * so if the version string is 1.0.0-beta2 then the tag must be 1.0.0-beta2 | |
| */ | |
| // We need the version number so get the app kernel | |
| require_once dirname(__DIR__).'/vendor/autoload.php'; | |
| require_once dirname(__DIR__).'/app/AppKernel.php'; | |
| $releaseMetadata = \Mautic\CoreBundle\Release\ThisRelease::getMetadata(); | |
| $appVersion = $releaseMetadata->getVersion(); | |
| $minimalVersion = $releaseMetadata->getMinSupportedMauticVersion(); | |
| // Use branch if applicable otherwise a version tag | |
| $gitSource = (!empty($args['b'])) ? $args['b'] : $appVersion; | |
| if (!isset($args['repackage'])) { | |
| // Preparation - Remove previous packages | |
| echo "Preparing environment\n"; | |
| umask(022); | |
| chdir(__DIR__); | |
| system('rm -rf packaging'); | |
| // Preparation - Provision packaging space | |
| mkdir(__DIR__.'/packaging'); | |
| // Grab the system git path so we can process git commands | |
| ob_start(); | |
| passthru('which git', $systemGit); | |
| $systemGit = trim(ob_get_clean()); | |
| // set the diff limit to ensure we get all files | |
| system($systemGit.' config diff.renamelimit 8192'); | |
| // Checkout the version tag into the packaging space | |
| chdir(dirname(__DIR__)); | |
| system($systemGit.' archive '.$gitSource.' | tar -x -C '.__DIR__.'/packaging', $result); | |
| // Get a list of all files in this release | |
| ob_start(); | |
| passthru($systemGit.' ls-tree -r -t --name-only '.$gitSource, $releaseFiles); | |
| $releaseFiles = explode("\n", trim(ob_get_clean())); | |
| if (0 !== $result) { | |
| exit; | |
| } | |
| chdir(__DIR__); | |
| system('cd '.__DIR__.'/packaging && composer install --no-dev --no-scripts --optimize-autoloader && cd ..', $result); | |
| if (0 !== $result) { | |
| exit; | |
| } | |
| // Compile prod assets | |
| system('cd '.__DIR__.'/packaging && npm ci && npx patch-package && php bin/console mautic:assets:generate -e prod', $result); | |
| if (0 !== $result) { | |
| exit; | |
| } | |
| // Common steps | |
| include_once __DIR__.'/processfiles.php'; | |
| // In this step, we'll compile a list of files that may have been deleted so our update script can remove them | |
| // First, get a list of git tags since the minimal version. | |
| ob_start(); | |
| passthru($systemGit.' for-each-ref --sort=creatordate --format \'%(refname)\' refs/tags | cut -d\/ -f3 | sed \'/-/!{s/$/_/}\' | sort -V | sed \'s/_$//\' | sed -n \'/^'.$minimalVersion.'$/,${p;/^'.$gitSource.'$/q}\' | sed \'$d\'', $tags); | |
| $tags = explode("\n", trim(ob_get_clean())); | |
| // Only add deleted files to our list; new and modified files will be covered by the archive | |
| $deletedFiles = []; | |
| $modifiedFiles = [ | |
| 'deleted_files.txt' => true, | |
| 'critical_migrations.txt' => true, | |
| 'upgrade.php' => true, | |
| // Temp fix for GrapesJs builder | |
| 'plugins/GrapesJsBuilderBundle/' => true, | |
| ]; | |
| // Ensure the generated media files don't end up in the deleted files by explicitly adding them to the release files. | |
| foreach (['css', 'js', 'libraries/ckeditor', 'libraries/ckeditor/translations'] as $dir) { | |
| $files = array_diff(scandir(__DIR__.'/packaging/media/'.$dir), ['..', '.']); | |
| array_walk($files, function (&$item) use ($dir) { $item = 'media/'.$dir.'/'.$item; }); | |
| $releaseFiles = array_merge($releaseFiles, $files); | |
| } | |
| // Create a flag to check if the vendors changed | |
| $vendorsChanged = false; | |
| // Get a list of changed files since 1.0.0 | |
| foreach ($tags as $tag) { | |
| ob_start(); | |
| passthru($systemGit.' diff tags/'.$tag.$gitSourceLocation.$gitSource.' --name-status', $fileDiff); | |
| $fileDiff = explode("\n", trim(ob_get_clean())); | |
| foreach ($fileDiff as $fileInfo) { | |
| [$type, $filename, $newFileName] = explode("\t", $fileInfo."\t"); | |
| $folderPath = explode('/', $filename); | |
| $baseFolderName = $folderPath[0]; | |
| if (!$vendorsChanged && 'composer.lock' == $filename) { | |
| $vendorsChanged = true; | |
| } | |
| if ('D' == $type) { | |
| if (!in_array($filename, $releaseFiles)) { | |
| $deletedFiles[$filename] = true; | |
| } | |
| } elseif (str_starts_with($type, 'R')) { | |
| if (!in_array($filename, $releaseFiles)) { | |
| $deletedFiles[$filename] = true; | |
| } | |
| $modifiedFiles[$newFileName] = true; | |
| } elseif (in_array($filename, $releaseFiles)) { | |
| $modifiedFiles[$filename] = true; | |
| } | |
| } | |
| } | |
| // Include assets just in case they weren't | |
| $assetFiles = [ | |
| 'media/css/' => true, | |
| 'media/js/' => true, | |
| 'media/libraries/' => true, | |
| ]; | |
| $modifiedFiles = $modifiedFiles + $assetFiles; | |
| // Package the vendor folder if the lock changed | |
| if ($vendorsChanged) { | |
| $modifiedFiles['vendor/'] = true; | |
| $modifiedFiles['app/bootstrap.php.cache'] = true; | |
| } | |
| $modifiedFiles = array_keys($modifiedFiles); | |
| sort($modifiedFiles); | |
| $deletedFiles = array_keys($deletedFiles); | |
| sort($deletedFiles); | |
| // Write our files arrays into text files | |
| file_put_contents(__DIR__.'/packaging/deleted_files.txt', json_encode($deletedFiles)); | |
| file_put_contents(__DIR__.'/packaging/modified_files.txt', implode("\n", $modifiedFiles)); | |
| file_put_contents(__DIR__.'/packaging/critical_migrations.txt', json_encode($criticalMigrations)); | |
| } | |
| // Post-processing - ZIP it up | |
| chdir(__DIR__.'/packaging'); | |
| system("rm -f ../packages/{$appVersion}.zip ../packages/{$appVersion}-update.zip"); | |
| echo "Packaging Mautic Full Installation\n"; | |
| system('zip -qr ../packages/'.$appVersion.'.zip . -x@../exclude_files.txt -x@../exclude_files_full.txt'); | |
| system('zip -qr ../packages/'.$appVersion.'.zip ./config/.gitkeep'); | |
| echo "Packaging Mautic Update Package\n"; | |
| system('zip -qr ../packages/'.$appVersion.'-update.zip -x@../exclude_files.txt -@ < modified_files.txt'); | |
| system('zip -qr ../packages/'.$appVersion.'-update.zip ./config/.gitkeep'); | |
| // Write output to file (so that the CI pipeline can add it to the release notes), then output to console | |
| system('cd ../packages && openssl sha1 '.$appVersion.'.zip > build-sha1-all'); | |
| system('cd ../packages && openssl sha1 '.$appVersion.'-update.zip >> build-sha1-all'); | |
| system('cat ../packages/build-sha1-all'); | |