| 
12 | 12 |    first job.  | 
13 | 13 | 
  | 
14 | 14 | #. `DoBuild` checks presence of the object in the Storage and runs  | 
15 |  | -   `prebuildJob` chained with `uploadJob` and `buildJob` if the object is missing.  | 
16 |  | -   Only `buildJob` is run otherwise.  | 
 | 15 | +   `prebuildJob` chained with `uploadPrebuildJob`, `buildJob`,  | 
 | 16 | +   `uploadPatchJob` and `testJob` if the object is missing.  | 
 | 17 | +   Only `buildJob` and it's children are run otherwise.  | 
17 | 18 | 
  | 
18 | 19 |    This is used to build missing parts such as an archive with the baseline  | 
19 | 20 |    source code called `prebuilt` which is listed as optional for the  | 
@@ -625,7 +626,7 @@ def __init__(self, fileName, url):  | 
625 | 626 |         self.fileName = fileName  | 
626 | 627 |         super(S3DownloadJob, self).__init__(  | 
627 | 628 |                 memory="1M", cores=1, unitName="download %s" % url,  | 
628 |  | -                disk=self.obj['ContentLength'])  | 
 | 629 | +                disk=max(4096, self.obj['ContentLength']))  | 
629 | 630 | 
 
  | 
630 | 631 |     def run(self, fileStore):  | 
631 | 632 |         with fileStore.writeGlobalFileStream() as (fh, fileId):  | 
@@ -731,24 +732,35 @@ class DoBuild(Job):  | 
731 | 732 |     """If prebuild archive is not in storage do a prebuild and upload it to the  | 
732 | 733 |     specified location. Otherwise just do a build."""  | 
733 | 734 | 
 
  | 
734 |  | -    def __init__(self, fileName, prebuildJob, uploadJob, buildJob):  | 
 | 735 | +    def __init__(self, prebuildFileName, buildFileName, prebuildJob, uploadPrebuildJob, buildJob, uploadPatchJob, testJob):  | 
735 | 736 |         super(DoBuild, self).__init__(memory="256M")  | 
736 | 737 | 
 
  | 
737 |  | -        self.fileName = fileName  | 
 | 738 | +        self.prebuildFileName = prebuildFileName  | 
 | 739 | +        self.buildFileName = buildFileName  | 
738 | 740 |         self.prebuildJob = prebuildJob  | 
739 | 741 |         self.buildJob = buildJob  | 
740 |  | -        self.uploadJob = uploadJob  | 
 | 742 | +        self.uploadPrebuildJob = uploadPrebuildJob  | 
 | 743 | +        self.uploadPatchJob = uploadPatchJob  | 
 | 744 | +        self.testJob = testJob  | 
741 | 745 | 
 
  | 
742 | 746 |     def run(self, fileStore):  | 
743 |  | -        if self.fileName not in self.storage:  | 
 | 747 | +        if self.prebuildFileName not in self.storage:  | 
744 | 748 |             self.addChild(self.prebuildJob)  | 
745 | 749 | 
 
  | 
746 | 750 |             self.prebuildJob.addChildNoStorage(self.buildJob)  | 
747 |  | -            self.prebuildJob.addChildNoStorage(self.uploadJob)  | 
 | 751 | +            self.prebuildJob.addChildNoStorage(self.uploadPrebuildJob)  | 
 | 752 | + | 
 | 753 | +            self.buildJob.addChildNoStorage(self.uploadPatchJob)  | 
 | 754 | +            self.buildJob.addChildNoStorage(self.testJob)  | 
748 | 755 |         else:  | 
749 |  | -            self.addChild(self.buildJob)  | 
 | 756 | +            if self.buildFileName not in self.storage:  | 
 | 757 | +	        self.addChild(self.buildJob)  | 
 | 758 | +                self.buildJob.addChildNoStorage(self.uploadPatchJob)  | 
 | 759 | +                self.buildJob.addChildNoStorage(self.testJob)  | 
 | 760 | +            else:  | 
 | 761 | +                self.addChild(self.testJob)  | 
750 | 762 | 
 
  | 
751 |  | -        self._storage = self.buildJob.storage  | 
 | 763 | +        self._storage = self.testJob.storage  | 
752 | 764 | 
 
  | 
753 | 765 | 
 
  | 
754 | 766 | class BuildPatchJob(toilJob):  | 
@@ -784,21 +796,33 @@ def run(self, fileStore):  | 
784 | 796 |         prebuildUrl = self.packageDescription['prebuild']  | 
785 | 797 |         prebuildName = os.path.basename(prebuildUrl)  | 
786 | 798 | 
 
  | 
 | 799 | +        patchUrl = self.packageDescription['patch']  | 
 | 800 | +        buildName = os.path.basename(patchUrl)  | 
 | 801 | + | 
787 | 802 |         prebuildJob = DockerScriptJob(  | 
788 | 803 |                 script=self.script,  | 
789 | 804 |                 image=self.image,  | 
790 |  | -                args=['-p'],  | 
 | 805 | +                args=['--prebuild'],  | 
791 | 806 |                 logfileName="prebuild.log")  | 
792 |  | -        uploadJob = UploadJob([(prebuildName, prebuildUrl)])  | 
 | 807 | +        uploadPrebuildJob = UploadJob([(prebuildName, prebuildUrl)])  | 
 | 808 | + | 
793 | 809 | 
 
  | 
794 | 810 |         buildJob = DockerScriptJob(  | 
795 | 811 |                 script=self.script,  | 
796 | 812 |                 image=self.image,  | 
797 | 813 |                 logfileName="build.log")  | 
 | 814 | +        uploadPatchJob = UploadJob([(buildName, patchUrl)])  | 
798 | 815 | 
 
  | 
 | 816 | +        testJob = DockerScriptJob(  | 
 | 817 | +                script=self.script,  | 
 | 818 | +                image=self.image,  | 
 | 819 | +                args=['--test'],  | 
 | 820 | +                logfileName="test.log")  | 
 | 821 | + | 
 | 822 | +        doBuild = DoBuild(prebuildFileName=prebuildName, buildFileName=buildName, prebuildJob=prebuildJob,  | 
 | 823 | +                          uploadPrebuildJob=uploadPrebuildJob, buildJob=buildJob,  | 
 | 824 | +			  uploadPatchJob=uploadPatchJob, testJob=testJob)  | 
799 | 825 | 
 
  | 
800 |  | -        doBuild = DoBuild(fileName=prebuildName, prebuildJob=prebuildJob,  | 
801 |  | -                          uploadJob=uploadJob, buildJob=buildJob)  | 
802 | 826 |         tail.addFollowOn(doBuild)  | 
803 | 827 |         tail = doBuild  | 
804 | 828 | 
 
  | 
@@ -831,6 +855,11 @@ def readPackageDescription(packageFile):  | 
831 | 855 |         prebuildUrl = '*' + prebuildUrl  | 
832 | 856 |     inputs.append(prebuildUrl)  | 
833 | 857 | 
 
  | 
 | 858 | +    patchUrl = packageDescription['patch']  | 
 | 859 | +    if not patchUrl.startswith('*'):  | 
 | 860 | +        patchUrl = '*' + patchUrl  | 
 | 861 | +    inputs.append(patchUrl)  | 
 | 862 | + | 
834 | 863 |     return packageDescription  | 
835 | 864 | 
 
  | 
836 | 865 | def start(toil):  | 
 | 
0 commit comments