From eefec4cbc04f6018427297f158048ef53caacf7b Mon Sep 17 00:00:00 2001 From: Mario Mueller Date: Sun, 4 May 2014 08:55:04 +0200 Subject: [PATCH] Added three new tasks. One task for generating the composer production autoloader, one for linking shared files and folders into the release and one to set filesystem acls while rolling out a new release. --- .../BuiltIn/Composer/GenerateAutoload.php | 40 ++++++++++++++ Mage/Task/BuiltIn/Filesystem/ApplyFacls.php | 50 +++++++++++++++++ .../BuiltIn/Filesystem/LinkSharedFiles.php | 53 +++++++++++++++++++ 3 files changed, 143 insertions(+) create mode 100644 Mage/Task/BuiltIn/Composer/GenerateAutoload.php create mode 100644 Mage/Task/BuiltIn/Filesystem/ApplyFacls.php create mode 100644 Mage/Task/BuiltIn/Filesystem/LinkSharedFiles.php diff --git a/Mage/Task/BuiltIn/Composer/GenerateAutoload.php b/Mage/Task/BuiltIn/Composer/GenerateAutoload.php new file mode 100644 index 0000000..00ae10a --- /dev/null +++ b/Mage/Task/BuiltIn/Composer/GenerateAutoload.php @@ -0,0 +1,40 @@ +getConfig()->release('directory', 'releases'); + $releasesDirectory = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $releasesDirectory; + $currentCopy = $releasesDirectory . '/' . $this->getConfig()->getReleaseId(); + + $sharedFolderName = $this->getParameter('shared', 'shared'); + $sharedFolderName = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $sharedFolderName; + + $composerPath = $this->getParameter('composer', "$sharedFolderName/composer.phar"); + return $this->runCommandRemote("/usr/bin/env php $composerPath --working-dir=$currentCopy dumpautoload --optimize", $output); + } +} diff --git a/Mage/Task/BuiltIn/Filesystem/ApplyFacls.php b/Mage/Task/BuiltIn/Filesystem/ApplyFacls.php new file mode 100644 index 0000000..02a014d --- /dev/null +++ b/Mage/Task/BuiltIn/Filesystem/ApplyFacls.php @@ -0,0 +1,50 @@ +getConfig()->release('directory', 'releases'); + $releasesDirectory = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $releasesDirectory; + $currentCopy = $releasesDirectory . '/' . $this->getConfig()->getReleaseId(); + + + $aclParam = $this->getParameter('acl_param', ''); + if (empty($aclParam)) { + throw new SkipException('Parameter acl_param not set.'); + } + + $folders = $this->getParameter('folders', []); + $recursive = $this->getParameter('recursive', false) ? ' -R ' : ' '; + + foreach ($folders as $folder) { + $this->runCommandRemote("setfacl$recursive-m $aclParam $currentCopy/$folder", $output); + } + + return true; + } +} diff --git a/Mage/Task/BuiltIn/Filesystem/LinkSharedFiles.php b/Mage/Task/BuiltIn/Filesystem/LinkSharedFiles.php new file mode 100644 index 0000000..5b01a76 --- /dev/null +++ b/Mage/Task/BuiltIn/Filesystem/LinkSharedFiles.php @@ -0,0 +1,53 @@ +getParameter('linked_files', []); + $linkedFolders = $this->getParameter('linked_folders', []); + if (sizeof($linkedFiles) == 0 && sizeof($linkedFolders) == 0) { + throw new SkipException('No files and folders configured for sym-linking.'); + } + + $sharedFolderName = $this->getParameter('shared', 'shared'); + $sharedFolderName = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $sharedFolderName; + $releasesDirectory = $this->getConfig()->release('directory', 'releases'); + $releasesDirectory = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $releasesDirectory; + + $currentCopy = $releasesDirectory . '/' . $this->getConfig()->getReleaseId(); + foreach ($linkedFolders as $folder) { + $command = "ln -nfs $sharedFolderName/$folder $currentCopy/$folder"; + $this->runCommandRemote($command); + } + + foreach ($linkedFiles as $folder) { + $command = "ln -nfs $sharedFolderName/$folder $currentCopy/$folder"; + $this->runCommandRemote($command); + } + + return true; + } +}