def _build_rpm(cls, srpm, workdir, results_dir, builder_options=None): """ Build RPM using rpmbuild. :param srpm: abs path to SRPM :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :return: If build process ends successfully returns list of abs paths to built RPMs, otherwise 'None'. """ logger.info("Building RPMs") output = os.path.join(results_dir, "build.log") cmd = [cls.CMD, '--rebuild', srpm] if builder_options is not None: cmd.extend(builder_options) ret = ProcessHelper.run_subprocess_cwd_env(cmd, env={'HOME': workdir}, output=output) if ret != 0: return None else: return [f for f in PathHelper.find_all_files(workdir, '*.rpm') if not f.endswith('.src.rpm')]
def _do_build_srpm(cls, spec, workdir, results_dir): """ Build SRPM using rpmbuild. :param spec: abs path to SPEC file inside the rpmbuild/SPECS in workdir. :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :return: If build process ends successfully returns abs path to built SRPM, otherwise 'None'. """ logger.info("Building SRPM") spec_loc, spec_name = os.path.split(spec) output = os.path.join(results_dir, "build.log") cmd = ['rpmbuild', '-bs', spec_name] ret = ProcessHelper.run_subprocess_cwd_env(cmd, cwd=spec_loc, env={'HOME': workdir}, output=output) if ret != 0: return None else: return PathHelper.find_first_file(workdir, '*.src.rpm')
def _build_rpm(cls, srpm, workdir, results_dir, rpm_results_dir, builder_options=None): """ Build RPM using rpmbuild. :param srpm: abs path to SRPM :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :param rpm_results_dir: path directory to where RPMs will be placed. :return: abs paths to built RPMs. """ logger.info("Building RPMs") output = os.path.join(results_dir, "build.log") cmd = [cls.CMD, '--rebuild', srpm] if builder_options is not None: cmd.extend(builder_options) ret = ProcessHelper.run_subprocess_cwd_env(cmd, env={'HOME': workdir}, output_file=output) build_log_path = os.path.join(rpm_results_dir, 'build.log') if ret == 0: return [f for f in PathHelper.find_all_files(workdir, '*.rpm') if not f.endswith('.src.rpm')] # An error occurred, raise an exception logfile = build_log_path cls.logs.extend([l for l in PathHelper.find_all_files(rpm_results_dir, '*.log')]) raise BinaryPackageBuildError("Building RPMs failed!", results_dir, logfile=logfile)
def _build_rpm(cls, srpm, workdir, results_dir, builder_options=None): """ Build RPM using rpmbuild. :param srpm: abs path to SRPM :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :return: If build process ends successfully returns list of abs paths to built RPMs, otherwise 'None'. """ logger.info("Building RPMs") output = os.path.join(results_dir, "build.log") cmd = [cls.CMD, '--rebuild', srpm] if builder_options is not None: cmd.extend(builder_options) ret = ProcessHelper.run_subprocess_cwd_env(cmd, env={'HOME': workdir}, output=output) if ret != 0: return None else: return [ f for f in PathHelper.find_all_files(workdir, '*.rpm') if not f.endswith('.src.rpm') ]
def _do_build_srpm(cls, spec, workdir, results_dir): """ Build SRPM using rpmbuild. :param spec: abs path to SPEC file inside the rpmbuild/SPECS in workdir. :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :return: If build process ends successfully returns abs path to built SRPM, otherwise 'None'. """ logger.info("Building SRPM") spec_loc, spec_name = os.path.split(spec) output = os.path.join(results_dir, "build.log") cmd = ['rpmbuild', '-bs', spec_name] ret = ProcessHelper.run_subprocess_cwd_env(cmd, cwd=spec_loc, env={'HOME': workdir}, output=output) if ret != 0: return None else: return PathHelper.find_first_file(workdir, '*.src.rpm')
def _build_srpm(cls, spec, workdir, results_dir, srpm_results_dir, srpm_builder_options): """ Build SRPM using mock. :param spec: abs path to SPEC file inside the rpmbuild/SPECS in workdir. :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :param srpm_results_dir: path to directory where SRPM will be placed. :param srpm_builder_options: list of additional options for mock build tool(eg. '-r fedora-XX-x86_64'). :return: abs path to built SRPM. """ logger.info("Building SRPM") spec_loc = os.path.dirname(spec) output = os.path.join(results_dir, "build.log") path_to_sources = os.path.join(workdir, 'SOURCES') cmd = ['mock', '--old-chroot', '--buildsrpm'] if srpm_builder_options is not None: cmd.extend(srpm_builder_options) cmd.extend(['--spec', spec]) cmd.extend(['--sources', path_to_sources]) cmd.extend(['--resultdir', results_dir]) ret = ProcessHelper.run_subprocess_cwd_env(cmd, cwd=spec_loc, env={'HOME': workdir}, output_file=output) build_log_path = os.path.join(srpm_results_dir, 'build.log') mock_log_path = os.path.join(srpm_results_dir, 'mock_output.log') root_log_path = os.path.join(srpm_results_dir, 'root.log') if ret == 0: return PathHelper.find_first_file(workdir, '*.src.rpm') if ret == 1: if not os.path.exists(build_log_path) and os.path.exists( mock_log_path): logfile = mock_log_path else: logfile = build_log_path else: logfile = root_log_path cls.logs = [ l for l in PathHelper.find_all_files(srpm_results_dir, '*.log') ] raise SourcePackageBuildError("Building SRPM failed!", logfile=logfile)
def test_setting_existing_env(self): # make copy of existing environment en_variables = list(os.environ.copy().keys()) # there are no variables set on the system -> nothing to test if not en_variables: pass assert os.environ.get(en_variables[0]) != self.PHRASE cmd = 'echo "$' + en_variables[0] + '"' ret = ProcessHelper.run_subprocess_cwd_env( cmd, env={en_variables[0]: self.PHRASE}, output=self.OUT_FILE, shell=True ) assert ret == 0 assert os.path.exists(self.OUT_FILE) assert open(self.OUT_FILE).readline().strip("\n") == self.PHRASE
def test_setting_new_env(self): # make copy of existing environment en_variables = os.environ.copy().keys() # pick up non-existing name while True: rand_name = "".join(random.choice(string.ascii_letters) for _ in range(6)).upper() if rand_name not in en_variables: break cmd = 'echo "$' + rand_name + '"' ret = ProcessHelper.run_subprocess_cwd_env( cmd, env={rand_name: self.PHRASE}, output=self.OUT_FILE, shell=True ) assert ret == 0 assert os.path.exists(self.OUT_FILE) assert open(self.OUT_FILE).readline().strip("\n") == self.PHRASE
def test_setting_existing_env(self): # make copy of existing environment en_variables = list(os.environ.copy().keys()) # there are no variables set on the system -> nothing to test if not en_variables: pass assert os.environ.get(en_variables[0]) != self.PHRASE cmd = 'echo "$' + en_variables[0] + '"' ret = ProcessHelper.run_subprocess_cwd_env(cmd, env={en_variables[0]: self.PHRASE}, output=self.OUT_FILE, shell=True) assert ret == 0 assert os.path.exists(self.OUT_FILE) assert open(self.OUT_FILE).readline().strip("\n") == self.PHRASE
def test_setting_new_env(self): # make copy of existing environment en_variables = os.environ.copy().keys() # pick up non-existing name while True: rand_name = ''.join(random.choice(string.ascii_letters) for _ in range(6)).upper() if rand_name not in en_variables: break cmd = 'echo "$' + rand_name + '"' ret = ProcessHelper.run_subprocess_cwd_env(cmd, env={rand_name: self.PHRASE}, output=self.OUT_FILE, shell=True) assert ret == 0 assert os.path.exists(self.OUT_FILE) assert open(self.OUT_FILE).readline().strip("\n") == self.PHRASE
def _build_srpm(cls, spec, workdir, results_dir, srpm_results_dir, srpm_builder_options): """ Build SRPM using rpmbuild. :param spec: abs path to SPEC file inside the rpmbuild/SPECS in workdir. :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :param srpm_results_dir: path to directory where SRPM will be placed. :param srpm_builder_options: list of additional options to rpmbuild. :return: abs path to built SRPM. """ logger.info("Building SRPM") spec_loc, spec_name = os.path.split(spec) output = os.path.join(results_dir, "build.log") cmd = ['rpmbuild', '-bs', spec_name] if srpm_builder_options is not None: cmd.extend(srpm_builder_options) ret = ProcessHelper.run_subprocess_cwd_env(cmd, cwd=spec_loc, env={'HOME': workdir}, output_file=output) build_log_path = os.path.join(srpm_results_dir, 'build.log') if ret == 0: return PathHelper.find_first_file(workdir, '*.src.rpm') # An error occurred, raise an exception logfile = build_log_path cls.logs = [ l for l in PathHelper.find_all_files(srpm_results_dir, '*.log') ] raise SourcePackageBuildError("Building SRPM failed!", logfile=logfile)