|
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