/** * Release a library * * @param OutputInterface $output * @param LibraryRelease $releasePlan The library to tag */ protected function releaseRecursive(OutputInterface $output, LibraryRelease $releasePlan) { // Skip upgrade-only modules if (!$releasePlan->getIsNewRelease()) { return; } // Before releasing a version, make sure to tag all nested dependencies foreach ($releasePlan->getItems() as $item) { $this->releaseRecursive($output, $item); } // Release this library $this->releaseLibrary($output, $releasePlan); }
/** * Generate changelogs for this release, and all child nodes * * @param OutputInterface $output * @param LibraryRelease $release */ protected function recursiveGenerateChangelog(OutputInterface $output, LibraryRelease $release) { // Don't generate changelogs for non-release upgrades (e.g. bump to existing tag) if (!$release->getIsNewRelease()) { return; } // Generate changelog for this library only $this->generateChangelog($output, $release); // Recurse foreach ($release->getItems() as $child) { $this->recursiveGenerateChangelog($output, $child); } }
/** * Update branches for the given library recursively * * @param OutputInterface $output * @param LibraryRelease $libraryRelease */ protected function recursiveBranchLibrary(OutputInterface $output, LibraryRelease $libraryRelease) { // Recursively rewrite and branch child dependencies first foreach ($libraryRelease->getItems() as $childLibrary) { $this->recursiveBranchLibrary($output, $childLibrary); } // Skip if not tagging this library (upgrade only) if ($libraryRelease->getIsNewRelease()) { // Update this library $this->branchLibrary($output, $libraryRelease); // Update dev dependencies for the given module $this->incrementDevDependencies($output, $libraryRelease); } else { $this->checkoutLibrary($output, $libraryRelease->getLibrary(), $libraryRelease->getVersion()); } }
/** * Update selected version of a given library * * @param LibraryRelease $selectedVersion * @param Version $newVersion New version */ protected function modifyLibraryReleaseVersion(LibraryRelease $selectedVersion, $newVersion) { $wasNewRelease = $selectedVersion->getIsNewRelease(); // Replace tag $selectedVersion->setVersion($newVersion); // If the "create new release" tag changes, we need to re-generate all child dependencies $isNewRelease = $selectedVersion->getIsNewRelease(); if ($wasNewRelease !== $isNewRelease) { // Need to either clear, or regenerate all children $selectedVersion->clearItems(); // Changing to require a new tag will populate children again from scratch if ($isNewRelease) { $this->generateChildReleases($selectedVersion); } } }