Change-Id: I72c06e169f9ebed59eab44d119b7bd44075c2b12
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/1343
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Divya Thaluru <dthaluru@vmware.com>
| ... | ... |
@@ -41,18 +41,29 @@ else |
| 41 | 41 |
PHOTON_PUBLISH_RPMS := publish-rpms |
| 42 | 42 |
endif |
| 43 | 43 |
|
| 44 |
-ifdef PHOTON_ENABLE_RPMCHECK |
|
| 45 |
-PHOTON_RPMCHECK_OPTION := -u |
|
| 44 |
+# Tri state RPMCHECK: |
|
| 45 |
+# 1) RPMCHECK is not specified: just build |
|
| 46 |
+# 2) RPMCHECK=enable: build and run %check section. do not stop on error. will generate report file. |
|
| 47 |
+# 3) RPMCHECK=enable_stop_on_error: build and run %check section. stop on first error. |
|
| 48 |
+# |
|
| 49 |
+# We use 2 parameters: |
|
| 50 |
+# -u: enable checking. |
|
| 51 |
+# -q: quit on error. if -q is not specified it will keep going |
|
| 52 |
+ |
|
| 53 |
+ifeq ($(RPMCHECK),enable) |
|
| 54 |
+PHOTON_RPMCHECK_FLAGS := -u |
|
| 55 |
+else ifeq ($(RPMCHECK),enable_stop_on_error) |
|
| 56 |
+PHOTON_RPMCHECK_FLAGS := -u -q |
|
| 46 | 57 |
else |
| 47 |
-PHOTON_RPMCHECK_OPTION := |
|
| 58 |
+PHOTON_RPMCHECK_FLAGS := |
|
| 48 | 59 |
endif |
| 49 | 60 |
|
| 50 | 61 |
TOOLS_BIN := $(SRCROOT)/tools/bin |
| 51 | 62 |
CONTAIN := $(TOOLS_BIN)/contain |
| 52 | 63 |
|
| 53 | 64 |
.PHONY : all iso clean photon-build-machine photon-vagrant-build photon-vagrant-local cloud-image \ |
| 54 |
-check check-docker check-bison check-g++ check-gawk check-createrepo check-vagrant check-packer check-packer-ovf-plugin check-sanity \ |
|
| 55 |
-clean-install clean-chroot build-updated-packages |
|
| 65 |
+check-tools check-docker check-bison check-g++ check-gawk check-createrepo check-vagrant check-packer check-packer-ovf-plugin check-sanity \ |
|
| 66 |
+clean-install clean-chroot build-updated-packages check |
|
| 56 | 67 |
|
| 57 | 68 |
THREADS?=1 |
| 58 | 69 |
|
| ... | ... |
@@ -61,7 +72,7 @@ all: iso minimal-iso docker-image ostree-host-iso live-iso cloud-image-all src-i |
| 61 | 61 |
micro: micro-iso |
| 62 | 62 |
@: |
| 63 | 63 |
|
| 64 |
-micro-iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES_MICRO) |
|
| 64 |
+micro-iso: check-tools $(PHOTON_STAGE) $(PHOTON_PACKAGES_MICRO) |
|
| 65 | 65 |
@echo "Building Photon Micro ISO..." |
| 66 | 66 |
@cd $(PHOTON_INSTALLER_DIR) && \ |
| 67 | 67 |
$(PHOTON_INSTALLER) \ |
| ... | ... |
@@ -75,7 +86,7 @@ micro-iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES_MICRO) |
| 75 | 75 |
-f > \ |
| 76 | 76 |
$(PHOTON_LOGS_DIR)/installer.log 2>&1 |
| 77 | 77 |
|
| 78 |
-packages-micro: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) generate-dep-lists |
|
| 78 |
+packages-micro: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) generate-dep-lists |
|
| 79 | 79 |
@echo "Building all Micro RPMS..." |
| 80 | 80 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
| 81 | 81 |
$(PHOTON_PACKAGE_BUILDER) -o full \ |
| ... | ... |
@@ -90,13 +101,13 @@ packages-micro: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) g |
| 90 | 90 |
-d $(PHOTON_DIST_TAG) \ |
| 91 | 91 |
-n $(PHOTON_BUILD_NUMBER) \ |
| 92 | 92 |
-v $(PHOTON_RELEASE_VERSION) \ |
| 93 |
- $(PHOTON_RPMCHECK_OPTION) \ |
|
| 93 |
+ $(PHOTON_RPMCHECK_FLAGS) \ |
|
| 94 | 94 |
-t ${THREADS}
|
| 95 | 95 |
|
| 96 | 96 |
minimal: minimal-iso |
| 97 | 97 |
@: |
| 98 | 98 |
|
| 99 |
-minimal-iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES_MINIMAL) |
|
| 99 |
+minimal-iso: check-tools $(PHOTON_STAGE) $(PHOTON_PACKAGES_MINIMAL) |
|
| 100 | 100 |
@echo "Building Photon Minimal ISO..." |
| 101 | 101 |
@cd $(PHOTON_INSTALLER_DIR) && \ |
| 102 | 102 |
$(PHOTON_INSTALLER) \ |
| ... | ... |
@@ -110,7 +121,7 @@ minimal-iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES_MINIMAL) |
| 110 | 110 |
-f > \ |
| 111 | 111 |
$(PHOTON_LOGS_DIR)/installer.log 2>&1 |
| 112 | 112 |
|
| 113 |
-ostree-host-iso: check $(PHOTON_STAGE) ostree-repo |
|
| 113 |
+ostree-host-iso: check-tools $(PHOTON_STAGE) ostree-repo |
|
| 114 | 114 |
@echo "Building Photon OSTree Host ISO..." |
| 115 | 115 |
@cd $(PHOTON_INSTALLER_DIR) && \ |
| 116 | 116 |
$(PHOTON_INSTALLER) \ |
| ... | ... |
@@ -124,7 +135,7 @@ ostree-host-iso: check $(PHOTON_STAGE) ostree-repo |
| 124 | 124 |
-f > \ |
| 125 | 125 |
$(PHOTON_LOGS_DIR)/installer.log 2>&1 |
| 126 | 126 |
|
| 127 |
-live-iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES_MINIMAL) minimal-iso |
|
| 127 |
+live-iso: check-tools $(PHOTON_STAGE) $(PHOTON_PACKAGES_MINIMAL) minimal-iso |
|
| 128 | 128 |
@echo "Building Photon Minimal LIVE ISO..." |
| 129 | 129 |
@cd $(PHOTON_INSTALLER_DIR) && \ |
| 130 | 130 |
$(PHOTON_INSTALLER) \ |
| ... | ... |
@@ -138,7 +149,7 @@ live-iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES_MINIMAL) minimal-iso |
| 138 | 138 |
-f > \ |
| 139 | 139 |
$(PHOTON_LOGS_DIR)/installer.log 2>&1 |
| 140 | 140 |
|
| 141 |
-packages-minimal: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) generate-dep-lists |
|
| 141 |
+packages-minimal: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) generate-dep-lists |
|
| 142 | 142 |
@echo "Building all RPMS..." |
| 143 | 143 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
| 144 | 144 |
$(PHOTON_PACKAGE_BUILDER) -o full \ |
| ... | ... |
@@ -153,10 +164,10 @@ packages-minimal: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) |
| 153 | 153 |
-d $(PHOTON_DIST_TAG) \ |
| 154 | 154 |
-n $(PHOTON_BUILD_NUMBER) \ |
| 155 | 155 |
-v $(PHOTON_RELEASE_VERSION) \ |
| 156 |
- $(PHOTON_RPMCHECK_OPTION) \ |
|
| 156 |
+ $(PHOTON_RPMCHECK_FLAGS) \ |
|
| 157 | 157 |
-t ${THREADS}
|
| 158 | 158 |
|
| 159 |
-iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES) ostree-repo |
|
| 159 |
+iso: check-tools $(PHOTON_STAGE) $(PHOTON_PACKAGES) ostree-repo |
|
| 160 | 160 |
@echo "Building Photon Full ISO..." |
| 161 | 161 |
@cd $(PHOTON_INSTALLER_DIR) && \ |
| 162 | 162 |
sudo $(PHOTON_INSTALLER) \ |
| ... | ... |
@@ -171,7 +182,7 @@ iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES) ostree-repo |
| 171 | 171 |
-f > \ |
| 172 | 172 |
$(PHOTON_LOGS_DIR)/installer.log 2>&1 |
| 173 | 173 |
|
| 174 |
-custom-iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES) |
|
| 174 |
+custom-iso: check-tools $(PHOTON_STAGE) $(PHOTON_PACKAGES) |
|
| 175 | 175 |
@echo "Building Photon custom ISO..." |
| 176 | 176 |
@cd $(PHOTON_INSTALLER_DIR) && \ |
| 177 | 177 |
sudo $(PHOTON_INSTALLER) \ |
| ... | ... |
@@ -186,7 +197,7 @@ custom-iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES) |
| 186 | 186 |
-f > \ |
| 187 | 187 |
$(PHOTON_LOGS_DIR)/installer.log 2>&1 |
| 188 | 188 |
|
| 189 |
-src-iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES) |
|
| 189 |
+src-iso: check-tools $(PHOTON_STAGE) $(PHOTON_PACKAGES) |
|
| 190 | 190 |
@echo "Building Photon Full Source ISO..." |
| 191 | 191 |
@cd $(PHOTON_INSTALLER_DIR) && \ |
| 192 | 192 |
sudo $(PHOTON_INSTALLER) \ |
| ... | ... |
@@ -215,7 +226,7 @@ who-needs: |
| 215 | 215 |
@cd $(PHOTON_SPECDEPS_DIR) && \ |
| 216 | 216 |
$(PHOTON_SPECDEPS) -s $(PHOTON_SPECS_DIR) -i who-needs -p $(pkg) |
| 217 | 217 |
|
| 218 |
-packages: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 218 |
+packages: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 219 | 219 |
@echo "Building all RPMS..." |
| 220 | 220 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
| 221 | 221 |
$(PHOTON_PACKAGE_BUILDER) -o full \ |
| ... | ... |
@@ -233,10 +244,10 @@ packages: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTA |
| 233 | 233 |
-v $(PHOTON_RELEASE_VERSION) \ |
| 234 | 234 |
-w $(PHOTON_DATA_DIR)/pkg_info.json \ |
| 235 | 235 |
-g $(PHOTON_DATA_DIR)/pkg_build_options.json \ |
| 236 |
- $(PHOTON_RPMCHECK_OPTION) \ |
|
| 236 |
+ $(PHOTON_RPMCHECK_FLAGS) \ |
|
| 237 | 237 |
-t ${THREADS}
|
| 238 | 238 |
|
| 239 |
-updated-packages: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 239 |
+updated-packages: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 240 | 240 |
@echo "Building only updated RPMS..." |
| 241 | 241 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
| 242 | 242 |
$(PHOTON_PACKAGE_BUILDER) -o full \ |
| ... | ... |
@@ -252,10 +263,10 @@ updated-packages: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) |
| 252 | 252 |
-n $(PHOTON_BUILD_NUMBER) \ |
| 253 | 253 |
-v $(PHOTON_RELEASE_VERSION) \ |
| 254 | 254 |
-k $(PHOTON_INPUT_RPMS_DIR) \ |
| 255 |
- $(PHOTON_RPMCHECK_OPTION) \ |
|
| 255 |
+ $(PHOTON_RPMCHECK_FLAGS) \ |
|
| 256 | 256 |
-t ${THREADS}
|
| 257 | 257 |
|
| 258 |
-tool-chain-stage1: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 258 |
+tool-chain-stage1: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 259 | 259 |
@echo "Building all RPMS..." |
| 260 | 260 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
| 261 | 261 |
$(PHOTON_PACKAGE_BUILDER) -o full \ |
| ... | ... |
@@ -272,10 +283,10 @@ tool-chain-stage1: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES |
| 272 | 272 |
-d $(PHOTON_DIST_TAG) \ |
| 273 | 273 |
-n $(PHOTON_BUILD_NUMBER) \ |
| 274 | 274 |
-v $(PHOTON_RELEASE_VERSION) \ |
| 275 |
- $(PHOTON_RPMCHECK_OPTION) \ |
|
| 275 |
+ $(PHOTON_RPMCHECK_FLAGS) \ |
|
| 276 | 276 |
-m stage1 |
| 277 | 277 |
|
| 278 |
-tool-chain-stage2: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 278 |
+tool-chain-stage2: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 279 | 279 |
@echo "Building all RPMS..." |
| 280 | 280 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
| 281 | 281 |
$(PHOTON_PACKAGE_BUILDER) -o full \ |
| ... | ... |
@@ -292,7 +303,7 @@ tool-chain-stage2: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES |
| 292 | 292 |
-d $(PHOTON_DIST_TAG) \ |
| 293 | 293 |
-n $(PHOTON_BUILD_NUMBER) \ |
| 294 | 294 |
-v $(PHOTON_RELEASE_VERSION) \ |
| 295 |
- $(PHOTON_RPMCHECK_OPTION) \ |
|
| 295 |
+ $(PHOTON_RPMCHECK_FLAGS) \ |
|
| 296 | 296 |
-m stage2 |
| 297 | 297 |
|
| 298 | 298 |
|
| ... | ... |
@@ -453,7 +464,7 @@ cloud-image-all: $(PHOTON_STAGE) iso |
| 453 | 453 |
$(PHOTON_CLOUD_IMAGE_BUILDER) $(PHOTON_CLOUD_IMAGE_BUILDER_DIR) ova $(SRCROOT) $(PHOTON_GENERATED_DATA_DIR) $(PHOTON_STAGE)/photon-$(PHOTON_RELEASE_VERSION)-$(PHOTON_BUILD_NUMBER).iso $(ADDITIONAL_RPMS_PATH) |
| 454 | 454 |
|
| 455 | 455 |
|
| 456 |
-check: check-bison check-g++ check-gawk check-createrepo check-texinfo check-sanity check-docker |
|
| 456 |
+check-tools: check-bison check-g++ check-gawk check-createrepo check-texinfo check-sanity check-docker |
|
| 457 | 457 |
|
| 458 | 458 |
check-docker: |
| 459 | 459 |
@command -v docker >/dev/null 2>&1 || { echo "Package docker not installed. Aborting." >&2; exit 1; }
|
| ... | ... |
@@ -491,7 +502,32 @@ endif |
| 491 | 491 |
check-packer-ovf-plugin: |
| 492 | 492 |
@[[ -e ~/.packer.d/plugins/packer-post-processor-vagrant-vmware-ovf ]] || { echo "Packer OVF post processor not installed. Aborting" >&2; exit 1; }
|
| 493 | 493 |
|
| 494 |
-%: check $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) |
|
| 494 |
+check: packages |
|
| 495 |
+ ifeq ($(RPMCHECK),enable_stop_on_error) |
|
| 496 |
+ $(eval rpmcheck_stop_on_error = -q) |
|
| 497 |
+ endif |
|
| 498 |
+ @echo "Testing all RPMS ..." |
|
| 499 |
+ @cd $(PHOTON_PKG_BUILDER_DIR) && \ |
|
| 500 |
+ $(PHOTON_PACKAGE_BUILDER) -o full \ |
|
| 501 |
+ -s $(PHOTON_SPECS_DIR) \ |
|
| 502 |
+ -r $(PHOTON_RPMS_DIR) \ |
|
| 503 |
+ -a $(PHOTON_SRPMS_DIR) \ |
|
| 504 |
+ -x $(PHOTON_SRCS_DIR) \ |
|
| 505 |
+ -b $(PHOTON_CHROOT_PATH) \ |
|
| 506 |
+ -l $(PHOTON_LOGS_DIR) \ |
|
| 507 |
+ -p $(PHOTON_PUBLISH_RPMS_DIR) \ |
|
| 508 |
+ -j $(PHOTON_GENERATED_DATA_DIR)/$(FULL_PACKAGE_LIST_FILE) \ |
|
| 509 |
+ -c $(PHOTON_BINTRAY_CONFIG) \ |
|
| 510 |
+ -d $(PHOTON_DIST_TAG) \ |
|
| 511 |
+ -n $(PHOTON_BUILD_NUMBER) \ |
|
| 512 |
+ -v $(PHOTON_RELEASE_VERSION) \ |
|
| 513 |
+ -w $(PHOTON_DATA_DIR)/pkg_info.json \ |
|
| 514 |
+ -g $(PHOTON_DATA_DIR)/pkg_build_options.json \ |
|
| 515 |
+ -u \ |
|
| 516 |
+ $(rpmcheck_stop_on_error) \ |
|
| 517 |
+ -t ${THREADS}
|
|
| 518 |
+ |
|
| 519 |
+%: check-tools $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) |
|
| 495 | 520 |
$(eval PKG_NAME = $@) |
| 496 | 521 |
@echo "Building package $(PKG_NAME) ..." |
| 497 | 522 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
| ... | ... |
@@ -507,7 +543,7 @@ check-packer-ovf-plugin: |
| 507 | 507 |
-n $(PHOTON_BUILD_NUMBER) \ |
| 508 | 508 |
-v $(PHOTON_RELEASE_VERSION) \ |
| 509 | 509 |
-g $(PHOTON_DATA_DIR)/pkg_build_options.json \ |
| 510 |
- $(PHOTON_RPMCHECK_OPTION) \ |
|
| 510 |
+ $(PHOTON_RPMCHECK_FLAGS) \ |
|
| 511 | 511 |
-l $(PHOTON_LOGS_DIR) |
| 512 | 512 |
|
| 513 | 513 |
$(TOOLS_BIN): |
| ... | ... |
@@ -32,9 +32,6 @@ class PackageBuilder(object): |
| 32 | 32 |
if not returnVal: |
| 33 | 33 |
raise Exception("Unable to prepare build root")
|
| 34 | 34 |
tUtils=ToolChainUtils(self.logName,self.logPath) |
| 35 |
-# if isToolChainPackage: |
|
| 36 |
-# tUtils.installCoreToolChainPackages(chrootID) |
|
| 37 |
-# else: |
|
| 38 | 35 |
tUtils.installToolChain(chrootID) |
| 39 | 36 |
except Exception as e: |
| 40 | 37 |
if chrootID is not None: |
| ... | ... |
@@ -87,9 +84,15 @@ class PackageBuilder(object): |
| 87 | 87 |
|
| 88 | 88 |
def buildPackage(self,package): |
| 89 | 89 |
#do not build if RPM is already built |
| 90 |
+ #test only if the package is in the testForceRPMS with rpmCheck |
|
| 91 |
+ #build only if the package is not in the testForceRPMS with rpmCheck |
|
| 90 | 92 |
if self.checkIfPackageIsAlreadyBuilt(package): |
| 91 |
- self.logger.info("Skipping building the package:"+package)
|
|
| 92 |
- return |
|
| 93 |
+ if not constants.rpmCheck: |
|
| 94 |
+ self.logger.info("Skipping building the package:"+package)
|
|
| 95 |
+ return |
|
| 96 |
+ elif constants.rpmCheck and package not in constants.testForceRPMS: |
|
| 97 |
+ self.logger.info("Skipping testing the package:"+package)
|
|
| 98 |
+ return |
|
| 93 | 99 |
|
| 94 | 100 |
#should initialize a logger based on package name |
| 95 | 101 |
chrUtils = ChrootUtils(self.logName,self.logPath) |
| ... | ... |
@@ -104,12 +107,13 @@ class PackageBuilder(object): |
| 104 | 104 |
if not os.path.isdir(destLogPath): |
| 105 | 105 |
cmdUtils = CommandUtils() |
| 106 | 106 |
cmdUtils.runCommandInShell("mkdir -p "+destLogPath)
|
| 107 |
- |
|
| 107 |
+ |
|
| 108 | 108 |
listInstalledPackages=self.findInstalledPackages(chrootID) |
| 109 |
- self.logger.info("List of installed packages")
|
|
| 110 |
- self.logger.info(listInstalledPackages) |
|
| 111 | 109 |
listDependentPackages=self.findBuildTimeRequiredPackages(package) |
| 112 |
- |
|
| 110 |
+ if constants.rpmCheck and package in constants.testForceRPMS: |
|
| 111 |
+ testPackages=set(constants.listMakeCheckRPMPkgtoInstall)-set(listInstalledPackages)-set([package]) |
|
| 112 |
+ listDependentPackages.extend(testPackages) |
|
| 113 |
+ |
|
| 113 | 114 |
pkgUtils = PackageUtils(self.logName,self.logPath) |
| 114 | 115 |
if len(listDependentPackages) != 0: |
| 115 | 116 |
self.logger.info("Installing the build time dependent packages......")
|
| ... | ... |
@@ -117,6 +121,7 @@ class PackageBuilder(object): |
| 117 | 117 |
self.installPackage(pkgUtils, pkg,chrootID,destLogPath,listInstalledPackages) |
| 118 | 118 |
pkgUtils.installRPMSInAOneShot(chrootID,destLogPath) |
| 119 | 119 |
self.logger.info("Finished installing the build time dependent packages......")
|
| 120 |
+ |
|
| 120 | 121 |
pkgUtils.adjustGCCSpecs(package, chrootID, destLogPath) |
| 121 | 122 |
pkgUtils.buildRPMSForGivenPackage(package,chrootID,self.listBuildOptionPackages,self.pkgBuildOptionFile,destLogPath) |
| 122 | 123 |
self.logger.info("Successfully built the package:"+package)
|
| ... | ... |
@@ -162,3 +167,4 @@ class PackageBuilder(object): |
| 162 | 162 |
if pkg in listInstalledPackages: |
| 163 | 163 |
continue |
| 164 | 164 |
self.installPackage(pkgUtils,pkg,chrootID,destLogPath,listInstalledPackages) |
| 165 |
+ |
| ... | ... |
@@ -86,16 +86,16 @@ class PackageManager(object): |
| 86 | 86 |
needToRebuild = True |
| 87 | 87 |
if needToRebuild: |
| 88 | 88 |
self.listOfPackagesAlreadyBuilt.remove(pkg) |
| 89 |
- |
|
| 89 |
+ |
|
| 90 | 90 |
listPackagesToBuild=listPackages[:] |
| 91 | 91 |
for pkg in listPackages: |
| 92 |
- if pkg in self.listOfPackagesAlreadyBuilt: |
|
| 92 |
+ if pkg in self.listOfPackagesAlreadyBuilt and not constants.rpmCheck: |
|
| 93 | 93 |
listPackagesToBuild.remove(pkg) |
| 94 |
- |
|
| 94 |
+ |
|
| 95 | 95 |
if not self.readPackageBuildData(listPackagesToBuild): |
| 96 | 96 |
return False |
| 97 | 97 |
return True |
| 98 |
- |
|
| 98 |
+ |
|
| 99 | 99 |
def buildToolChain(self): |
| 100 | 100 |
try: |
| 101 | 101 |
tUtils=ToolChainUtils() |
| ... | ... |
@@ -104,17 +104,28 @@ class PackageManager(object): |
| 104 | 104 |
self.logger.error("Unable to build tool chain")
|
| 105 | 105 |
self.logger.error(e) |
| 106 | 106 |
raise e |
| 107 |
- |
|
| 107 |
+ |
|
| 108 | 108 |
def buildToolChainPackages(self, listBuildOptionPackages, pkgBuildOptionFile, buildThreads): |
| 109 | 109 |
self.buildToolChain() |
| 110 | 110 |
self.buildGivenPackages(constants.listToolChainPackages, buildThreads) |
| 111 |
- |
|
| 111 |
+ |
|
| 112 |
+ def buildTestPackages(self, listBuildOptionPackages, pkgBuildOptionFile, buildThreads): |
|
| 113 |
+ self.buildToolChain() |
|
| 114 |
+ self.buildGivenPackages(constants.listMakeCheckRPMPkgtoInstall, buildThreads) |
|
| 115 |
+ |
|
| 112 | 116 |
def buildPackages(self,listPackages, listBuildOptionPackages, pkgBuildOptionFile, buildThreads): |
| 113 | 117 |
self.listBuildOptionPackages = listBuildOptionPackages |
| 114 | 118 |
self.pkgBuildOptionFile = pkgBuildOptionFile |
| 115 |
- self.buildToolChainPackages(listBuildOptionPackages, pkgBuildOptionFile, buildThreads) |
|
| 116 |
- self.buildGivenPackages(listPackages, buildThreads) |
|
| 117 |
- |
|
| 119 |
+ if constants.rpmCheck: |
|
| 120 |
+ constants.rpmCheck=False |
|
| 121 |
+ self.buildToolChainPackages(listBuildOptionPackages, pkgBuildOptionFile, buildThreads) |
|
| 122 |
+ self.buildTestPackages(listBuildOptionPackages, pkgBuildOptionFile, buildThreads) |
|
| 123 |
+ constants.rpmCheck=True |
|
| 124 |
+ self.buildGivenPackages(listPackages, buildThreads) |
|
| 125 |
+ else: |
|
| 126 |
+ self.buildToolChainPackages(listBuildOptionPackages, pkgBuildOptionFile, buildThreads) |
|
| 127 |
+ self.buildGivenPackages(listPackages, buildThreads) |
|
| 128 |
+ |
|
| 118 | 129 |
def initializeThreadPool(self,statusEvent): |
| 119 | 130 |
ThreadPool.clear() |
| 120 | 131 |
ThreadPool.mapPackageToCycle=self.mapPackageToCycle |
| ... | ... |
@@ -123,46 +134,49 @@ class PackageManager(object): |
| 123 | 123 |
ThreadPool.pkgBuildOptionFile=self.pkgBuildOptionFile |
| 124 | 124 |
ThreadPool.logger=self.logger |
| 125 | 125 |
ThreadPool.statusEvent=statusEvent |
| 126 |
- |
|
| 126 |
+ |
|
| 127 | 127 |
def initializeScheduler(self,statusEvent): |
| 128 | 128 |
Scheduler.setLog(self.logName, self.logPath) |
| 129 | 129 |
Scheduler.setParams(self.sortedPackageList, self.listOfPackagesAlreadyBuilt) |
| 130 | 130 |
Scheduler.setEvent(statusEvent) |
| 131 | 131 |
Scheduler.stopScheduling=False |
| 132 |
- |
|
| 132 |
+ |
|
| 133 | 133 |
def buildGivenPackages (self, listPackages, buildThreads): |
| 134 |
+ if constants.rpmCheck: |
|
| 135 |
+ alreadyBuiltRPMS=self.readAlreadyAvailablePackages() |
|
| 136 |
+ listPackages=list(set(listPackages)|(set(constants.listMakeCheckRPMPkgtoInstall)-set(alreadyBuiltRPMS))) |
|
| 137 |
+ |
|
| 134 | 138 |
returnVal=self.calculateParams(listPackages) |
| 135 | 139 |
if not returnVal: |
| 136 | 140 |
self.logger.error("Unable to set paramaters. Terminating the package manager.")
|
| 137 | 141 |
raise Exception("Unable to set paramaters")
|
| 138 |
- |
|
| 142 |
+ |
|
| 139 | 143 |
statusEvent=threading.Event() |
| 140 | 144 |
self.initializeScheduler(statusEvent) |
| 141 | 145 |
self.initializeThreadPool(statusEvent) |
| 142 |
- |
|
| 146 |
+ |
|
| 143 | 147 |
i=0 |
| 144 | 148 |
while i < buildThreads: |
| 145 | 149 |
workerName="WorkerThread"+str(i) |
| 146 | 150 |
ThreadPool.addWorkerThread(workerName) |
| 147 | 151 |
ThreadPool.startWorkerThread(workerName) |
| 148 | 152 |
i = i + 1 |
| 149 |
- |
|
| 153 |
+ |
|
| 150 | 154 |
statusEvent.wait() |
| 151 | 155 |
Scheduler.stopScheduling=True |
| 152 | 156 |
self.logger.info("Waiting for all remaining worker threads")
|
| 153 | 157 |
listWorkerObjs=ThreadPool.getAllWorkerObjects() |
| 154 | 158 |
for w in listWorkerObjs: |
| 155 | 159 |
w.join() |
| 156 |
- |
|
| 160 |
+ |
|
| 157 | 161 |
setFailFlag=False |
| 158 | 162 |
allPackagesBuilt=False |
| 159 |
- |
|
| 160 | 163 |
if Scheduler.isAnyPackagesFailedToBuild(): |
| 161 | 164 |
setFailFlag=True |
| 162 |
- |
|
| 165 |
+ |
|
| 163 | 166 |
if Scheduler.isAllPackagesBuilt(): |
| 164 | 167 |
allPackagesBuilt=True |
| 165 |
- |
|
| 168 |
+ |
|
| 166 | 169 |
if setFailFlag: |
| 167 | 170 |
self.logger.error("Some of the packages failed:")
|
| 168 | 171 |
self.logger.error(Scheduler.listOfFailedPackages) |
| ... | ... |
@@ -174,6 +188,6 @@ class PackageManager(object): |
| 174 | 174 |
else: |
| 175 | 175 |
self.logger.error("Build stopped unexpectedly.Unknown error.")
|
| 176 | 176 |
raise Exception("Unknown error")
|
| 177 |
- |
|
| 177 |
+ |
|
| 178 | 178 |
self.logger.info("Terminated")
|
| 179 | 179 |
|
| ... | ... |
@@ -28,6 +28,7 @@ class PackageUtils(object): |
| 28 | 28 |
self.rpmbuildBinary = "rpmbuild" |
| 29 | 29 |
self.rpmbuildBuildallOption = "-ba --clean" |
| 30 | 30 |
self.rpmbuildNocheckOption = "--nocheck" |
| 31 |
+ self.rpmbuildCheckOption ="-bi --clean" |
|
| 31 | 32 |
self.rpmbuildDistOption = '--define \\\"dist %s\\\"' % constants.dist |
| 32 | 33 |
self.queryRpmPackageOptions = "-qa" |
| 33 | 34 |
self.forceRpmPackageOptions = "--force" |
| ... | ... |
@@ -68,7 +69,7 @@ class PackageUtils(object): |
| 68 | 68 |
rpmfile=self.findRPMFileForGivenPackage(package) |
| 69 | 69 |
if rpmfile is None: |
| 70 | 70 |
self.logger.error("No rpm file found for package:"+package)
|
| 71 |
- raise Exception("Missing rpm file")
|
|
| 71 |
+ raise Exception("Missing rpm file: "+package)
|
|
| 72 | 72 |
|
| 73 | 73 |
rpmDestFile = self.copyRPM(rpmfile, chrootID+constants.topDirPath+"/RPMS") |
| 74 | 74 |
rpmFile=rpmDestFile.replace(chrootID,"") |
| ... | ... |
@@ -197,10 +198,16 @@ class PackageUtils(object): |
| 197 | 197 |
raise e |
| 198 | 198 |
finally: |
| 199 | 199 |
if destLogPath is not None: |
| 200 |
- shutil.copy2(chrootLogsFilePath, destLogPath) |
|
| 200 |
+ if constants.rpmCheck and package in constants.testForceRPMS and constants.specData.isCheckAvailable(package): |
|
| 201 |
+ cmd="sed -i '/^Executing(%check):/,/^Processing files:/{//!b};d' "+ chrootLogsFilePath
|
|
| 202 |
+ logFile = destLogPath+"/adjustTestFile.log" |
|
| 203 |
+ returnVal = CommandUtils().runCommandInShell(cmd, logFile) |
|
| 204 |
+ testLogFile = destLogPath+"/"+package+"-test.log" |
|
| 205 |
+ shutil.copyfile(chrootLogsFilePath, testLogFile) |
|
| 206 |
+ else: |
|
| 207 |
+ shutil.copy2(chrootLogsFilePath, destLogPath) |
|
| 201 | 208 |
self.logger.info("RPM build is successful")
|
| 202 |
- arch = self.getRPMArch(listRPMFiles[0]) |
|
| 203 |
- |
|
| 209 |
+ |
|
| 204 | 210 |
for rpmFile in listRPMFiles: |
| 205 | 211 |
self.copyRPM(chrootID+"/"+rpmFile, constants.rpmPath) |
| 206 | 212 |
|
| ... | ... |
@@ -208,14 +215,26 @@ class PackageUtils(object): |
| 208 | 208 |
self.copyRPM(chrootID+"/"+srpmFile, constants.sourceRpmPath) |
| 209 | 209 |
srpmName = os.path.basename(srpmFile) |
| 210 | 210 |
package,version,release = self.findPackageInfoFromSourceRPMFile(srpmFile) |
| 211 |
+ arch = self.getRPMArch(listRPMFiles[0]) |
|
| 211 | 212 |
SourcePackageInfo.addSRPMData(package,version,release,arch,srpmName) |
| 212 | 213 |
|
| 213 | 214 |
|
| 214 | 215 |
def buildRPM(self,specFile,logFile,chrootCmd,package,macros): |
| 215 | 216 |
|
| 216 |
- rpmBuildcmd= self.rpmbuildBinary+" "+self.rpmbuildBuildallOption+" "+self.rpmbuildDistOption |
|
| 217 |
- if not constants.rpmCheck: |
|
| 218 |
- rpmBuildcmd+=" "+self.rpmbuildNocheckOption |
|
| 217 |
+ rpmBuildcmd=self.rpmbuildBinary+" "+self.rpmbuildBuildallOption+" "+self.rpmbuildDistOption |
|
| 218 |
+ |
|
| 219 |
+ if constants.rpmCheck and package in constants.testForceRPMS: |
|
| 220 |
+ self.logger.info("#"*(68+2*len(package)))
|
|
| 221 |
+ if not constants.specData.isCheckAvailable(package): |
|
| 222 |
+ self.logger.info("####### "+package+" MakeCheck is not available. Skipping MakeCheck TEST for "+package+ " #######")
|
|
| 223 |
+ rpmBuildcmd=self.rpmbuildBinary+" --clean" |
|
| 224 |
+ else: |
|
| 225 |
+ self.logger.info("####### "+package+" MakeCheck is available. Running MakeCheck TEST for "+package+ " #######")
|
|
| 226 |
+ rpmBuildcmd=self.rpmbuildBinary+" "+self.rpmbuildCheckOption |
|
| 227 |
+ self.logger.info("#"*(68+2*len(package)))
|
|
| 228 |
+ else: |
|
| 229 |
+ rpmBuildcmd+=" "+self.rpmbuildNocheckOption |
|
| 230 |
+ |
|
| 219 | 231 |
for macro in macros: |
| 220 | 232 |
rpmBuildcmd+=' --define \\\"%s\\\"' % macro |
| 221 | 233 |
rpmBuildcmd+=" "+specFile |
| ... | ... |
@@ -224,10 +243,23 @@ class PackageUtils(object): |
| 224 | 224 |
self.logger.info("Building rpm....")
|
| 225 | 225 |
self.logger.info(rpmBuildcmd) |
| 226 | 226 |
returnVal = cmdUtils.runCommandInShell(rpmBuildcmd, logFile, chrootCmd) |
| 227 |
- if not returnVal: |
|
| 228 |
- self.logger.error("Building rpm is failed "+specFile)
|
|
| 229 |
- raise Exception("RPM Build failed")
|
|
| 230 |
- |
|
| 227 |
+ if constants.rpmCheck and package in constants.testForceRPMS: |
|
| 228 |
+ if not constants.specData.isCheckAvailable(package): |
|
| 229 |
+ constants.testLogger.info(package+" : N/A") |
|
| 230 |
+ elif returnVal: |
|
| 231 |
+ constants.testLogger.info(package+" : PASS") |
|
| 232 |
+ else: |
|
| 233 |
+ constants.testLogger.error(package+" : FAIL" ) |
|
| 234 |
+ |
|
| 235 |
+ if constants.rpmCheck: |
|
| 236 |
+ if not returnVal and constants.rpmCheckStopOnError: |
|
| 237 |
+ self.logger.error("Checking rpm is failed "+specFile)
|
|
| 238 |
+ raise Exception("RPM check failed")
|
|
| 239 |
+ else: |
|
| 240 |
+ if not returnVal: |
|
| 241 |
+ self.logger.error("Building rpm is failed "+specFile)
|
|
| 242 |
+ raise Exception("RPM build failed")
|
|
| 243 |
+ |
|
| 231 | 244 |
#Extracting rpms created from log file |
| 232 | 245 |
logfile=open(logFile,'r') |
| 233 | 246 |
fileContents=logfile.readlines() |
| ... | ... |
@@ -29,7 +29,7 @@ class Scheduler(object): |
| 29 | 29 |
Scheduler.sortedList=sortedList |
| 30 | 30 |
Scheduler.listOfAlreadyBuiltPackages=listOfAlreadyBuiltPackages |
| 31 | 31 |
for x in Scheduler.sortedList: |
| 32 |
- if x not in Scheduler.listOfAlreadyBuiltPackages: |
|
| 32 |
+ if x not in Scheduler.listOfAlreadyBuiltPackages or x in constants.testForceRPMS: |
|
| 33 | 33 |
Scheduler.listOfPackagesToBuild.append(x) |
| 34 | 34 |
Scheduler.listOfPackagesCurrentlyBuilding=[] |
| 35 | 35 |
Scheduler.listOfPackagesNextToBuild=[] |
| ... | ... |
@@ -42,6 +42,7 @@ class Scheduler(object): |
| 42 | 42 |
listRequiredRPMPackages.extend(constants.specData.getRequiresAllForPackage(package)) |
| 43 | 43 |
|
| 44 | 44 |
listRequiredPackages=[] |
| 45 |
+ |
|
| 45 | 46 |
for pkg in listRequiredRPMPackages: |
| 46 | 47 |
basePkg=constants.specData.getSpecName(pkg) |
| 47 | 48 |
if basePkg not in listRequiredPackages: |
| ... | ... |
@@ -46,6 +46,7 @@ class SerializableSpecObjectsUtils(object): |
| 46 | 46 |
specObj.checksums=spec.getChecksums() |
| 47 | 47 |
specObj.listPatches=spec.getPatchNames() |
| 48 | 48 |
specObj.securityHardening=spec.getSecurityHardeningOption() |
| 49 |
+ specObj.isCheckAvailable=spec.isCheckAvailable() |
|
| 49 | 50 |
for specPkg in specObj.listPackages: |
| 50 | 51 |
if specPkg in self.mapPackageToSpec: |
| 51 | 52 |
existingObj = self.mapSerializableSpecObjects[self.mapPackageToSpec[specPkg]] |
| ... | ... |
@@ -163,18 +164,22 @@ class SerializableSpecObjectsUtils(object): |
| 163 | 163 |
return specName |
| 164 | 164 |
self.logger.error("Could not able to find "+package+" package from specs")
|
| 165 | 165 |
raise Exception("Invalid package:"+package)
|
| 166 |
- |
|
| 166 |
+ |
|
| 167 | 167 |
def isRPMPackage(self,package): |
| 168 | 168 |
if self.mapPackageToSpec.has_key(package): |
| 169 | 169 |
specName=self.mapPackageToSpec[package] |
| 170 | 170 |
if self.mapSerializableSpecObjects.has_key(specName): |
| 171 | 171 |
return True |
| 172 | 172 |
return False |
| 173 |
- |
|
| 173 |
+ |
|
| 174 | 174 |
def getSecurityHardeningOption(self, package): |
| 175 | 175 |
specName=self.getSpecName(package) |
| 176 | 176 |
return self.mapSerializableSpecObjects[specName].securityHardening |
| 177 | 177 |
|
| 178 |
+ def isCheckAvailable(self, package): |
|
| 179 |
+ specName=self.getSpecName(package) |
|
| 180 |
+ return self.mapSerializableSpecObjects[specName].isCheckAvailable |
|
| 181 |
+ |
|
| 178 | 182 |
def printAllObjects(self): |
| 179 | 183 |
listSpecs=self.mapSerializableSpecObjects.keys() |
| 180 | 184 |
for spec in listSpecs: |
| ... | ... |
@@ -210,6 +210,12 @@ class Specutils(object): |
| 210 | 210 |
def getSecurityHardeningOption(self): |
| 211 | 211 |
return self.spec.globalSecurityHardening |
| 212 | 212 |
|
| 213 |
+ def isCheckAvailable(self): |
|
| 214 |
+ check=False |
|
| 215 |
+ if self.spec.checkMacro is not None: |
|
| 216 |
+ check=True |
|
| 217 |
+ return check |
|
| 218 |
+ |
|
| 213 | 219 |
def main(): |
| 214 | 220 |
spec = Specutils("/workspace1/myrepos/photon/SPECS/docker/docker.spec")
|
| 215 | 221 |
print "packages",spec.getPackageNames() |
| ... | ... |
@@ -38,6 +38,7 @@ def main(): |
| 38 | 38 |
parser.add_option("-a", "--source-rpm-path", dest="sourceRpmPath", default="../../stage/SRPMS")
|
| 39 | 39 |
parser.add_option("-w", "--pkginfo-file", dest="pkgInfoFile", default="../../common/data/pkg_info.json")
|
| 40 | 40 |
parser.add_option("-g", "--pkg-build-option-file", dest="pkgBuildOptionFile", default="../../common/data/pkg_build_options.json")
|
| 41 |
+ parser.add_option("-q", "--rpmcheck-stop-on-error", dest="rpmCheckStopOnError", default=False, action ="store_true")
|
|
| 41 | 42 |
|
| 42 | 43 |
(options, args) = parser.parse_args() |
| 43 | 44 |
cmdUtils=CommandUtils() |
| ... | ... |
@@ -103,6 +104,7 @@ def main(): |
| 103 | 103 |
logger.info("Log Path :" + options.logPath)
|
| 104 | 104 |
logger.info("Top Dir Path :" + options.topDirPath)
|
| 105 | 105 |
logger.info("Publish RPMS Path :" + options.publishRPMSPath)
|
| 106 |
+ |
|
| 106 | 107 |
if not options.installPackage: |
| 107 | 108 |
logger.info("JSON File :" + options.inputJSONFile)
|
| 108 | 109 |
else: |
| ... | ... |
@@ -281,6 +283,8 @@ def buildAPackage(package, listBuildOptionPackages, pkgBuildOptionFile, buildThr |
| 281 | 281 |
listPackages=[] |
| 282 | 282 |
listPackages.append(package) |
| 283 | 283 |
pkgManager = PackageManager() |
| 284 |
+ if constants.rpmCheck: |
|
| 285 |
+ constants.setTestForceRPMS(listPackages[:]) |
|
| 284 | 286 |
pkgManager.buildPackages(listPackages, listBuildOptionPackages, pkgBuildOptionFile, buildThreads) |
| 285 | 287 |
|
| 286 | 288 |
def buildPackagesFromGivenJSONFile(inputJSONFile, buildOption, listBuildOptionPackages, pkgBuildOptionFile, logger, buildThreads): |
| ... | ... |
@@ -292,6 +296,8 @@ def buildPackagesFromGivenJSONFile(inputJSONFile, buildOption, listBuildOptionPa |
| 292 | 292 |
listPackagesToBuild.append(str(p)) |
| 293 | 293 |
logger.info("List of packages to build:")
|
| 294 | 294 |
logger.info(listPackagesToBuild) |
| 295 |
+ if constants.rpmCheck: |
|
| 296 |
+ constants.setTestForceRPMS(listPackagesToBuild[:]) |
|
| 295 | 297 |
pkgManager = PackageManager() |
| 296 | 298 |
pkgManager.buildPackages(listPackagesToBuild, listBuildOptionPackages, pkgBuildOptionFile, buildThreads) |
| 297 | 299 |
|
| ... | ... |
@@ -1,4 +1,5 @@ |
| 1 | 1 |
from SpecData import SerializableSpecObjectsUtils |
| 2 |
+from Logger import Logger |
|
| 2 | 3 |
|
| 3 | 4 |
class constants(object): |
| 4 | 5 |
specPath="" |
| ... | ... |
@@ -251,6 +252,44 @@ class constants(object): |
| 251 | 251 |
"man-pages", |
| 252 | 252 |
"cpio"] |
| 253 | 253 |
|
| 254 |
+ listMakeCheckRPMPkgtoInstall=[ |
|
| 255 |
+ "python2", |
|
| 256 |
+ "python2-devel", |
|
| 257 |
+ "python2-libs", |
|
| 258 |
+ "python2-tools", |
|
| 259 |
+ "libffi", |
|
| 260 |
+ "python-setuptools", |
|
| 261 |
+ "ca-certificates", |
|
| 262 |
+ "linux", |
|
| 263 |
+ "createrepo", |
|
| 264 |
+ "sudo", |
|
| 265 |
+ "ruby", |
|
| 266 |
+ "curl", |
|
| 267 |
+ "pcre-devel", |
|
| 268 |
+ "boost-devel", |
|
| 269 |
+ "which", |
|
| 270 |
+ "go", |
|
| 271 |
+ "e2fsprogs-devel", |
|
| 272 |
+ "shadow", |
|
| 273 |
+ "check", |
|
| 274 |
+ "libacl-devel", |
|
| 275 |
+ "device-mapper", |
|
| 276 |
+ "wget", |
|
| 277 |
+ "tar", |
|
| 278 |
+ "pkg-config", |
|
| 279 |
+ "git", |
|
| 280 |
+ "openssl", |
|
| 281 |
+ "net-tools", |
|
| 282 |
+ "less", |
|
| 283 |
+ "yum-metadata-parser", |
|
| 284 |
+ "yum", |
|
| 285 |
+ "rpm-devel", |
|
| 286 |
+ "rpm", |
|
| 287 |
+ "libxml2", |
|
| 288 |
+ "python-xml", |
|
| 289 |
+ "libacl", |
|
| 290 |
+ "tzdata", |
|
| 291 |
+ "Linux-PAM"] |
|
| 254 | 292 |
|
| 255 | 293 |
@staticmethod |
| 256 | 294 |
def initialize(options): |
| ... | ... |
@@ -269,9 +308,13 @@ class constants(object): |
| 269 | 269 |
constants.specData.readSpecsAndConvertToSerializableObjects(constants.specPath) |
| 270 | 270 |
constants.pullsourcesConfig = options.pullsourcesConfig |
| 271 | 271 |
constants.inputRPMSPath=options.inputRPMSPath |
| 272 |
- constants.rpmCheck = options.rpmCheck |
|
| 273 | 272 |
constants.updateRPMMacros() |
| 274 |
- |
|
| 273 |
+ constants.testForceRPMS=[] |
|
| 274 |
+ constants.rpmCheck = options.rpmCheck |
|
| 275 |
+ constants.rpmCheckStopOnError = options.rpmCheckStopOnError |
|
| 276 |
+ if constants.rpmCheck: |
|
| 277 |
+ constants.testLogger=Logger.getLogger("MakeCheckTest",constants.logPath)
|
|
| 278 |
+ |
|
| 275 | 279 |
@staticmethod |
| 276 | 280 |
def updateRPMMacros(): |
| 277 | 281 |
#adding distribution rpm macro |
| ... | ... |
@@ -299,4 +342,8 @@ class constants(object): |
| 299 | 299 |
kernelsubrelease = kernelsubrelease.replace(constants.dist,"") |
| 300 | 300 |
if kernelsubrelease: |
| 301 | 301 |
kernelsubrelease = "."+kernelsubrelease |
| 302 |
- constants.specData.addMacro("kernelsubrelease",kernelsubrelease)
|
|
| 302 |
+ constants.specData.addMacro("kernelsubrelease",kernelsubrelease)
|
|
| 303 |
+ |
|
| 304 |
+ @staticmethod |
|
| 305 |
+ def setTestForceRPMS(listsPackages): |
|
| 306 |
+ constants.testForceRPMS=listsPackages |