Skip to content

Commit 249c0b6

Browse files
committed
Improved CI script.
1 parent 6a2c1f2 commit 249c0b6

File tree

1 file changed

+67
-38
lines changed

1 file changed

+67
-38
lines changed

ci/build-tool

+67-38
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# -*- coding: utf-8 -*-
33
#
44
# Unified Build Tool
5-
# Copyright (C) 2021-2025 by Thomas Dreibholz
5+
# Copyright (C) 2021-2024 by Thomas Dreibholz
66
#
77
# This program is free software: you can redistribute it and/or modify
88
# it under the terms of the GNU General Public License as published by
@@ -370,10 +370,12 @@ def readRPMPackagingInformation():
370370
rpm_spec_names = glob.glob('rpm/*.spec')
371371
if len(rpm_spec_names) == 1:
372372
packageInfo['rpm_spec_name'] = rpm_spec_names[0]
373+
packageInfo['rpm_packages'] = [ ]
373374

374375
re_rpm_name = re.compile(r'^(Name:[ \t]*)(\S+)')
375376
re_rpm_version = re.compile(r'^(Version:[ \t]*)(\d+)\.(\d+)\.(\d+)(.*|)')
376377
re_rpm_release = re.compile(r'^(Release:[ \t]*)(\d+)')
378+
re_rpm_package = re.compile(r'^(%package[ \t]+)([a-zA-Z0-9+-]+)')
377379
try:
378380
rpmSpecFile = open(packageInfo['rpm_spec_name'], 'r', encoding='utf-8')
379381
rpmSpecFileContents = rpmSpecFile.readlines()
@@ -397,17 +399,32 @@ def readRPMPackagingInformation():
397399
match = re_rpm_name.match(line)
398400
if match != None:
399401
packageInfo['rpm_package_name'] = match.group(2)
402+
else:
403+
match = re_rpm_package.match(line)
404+
if match != None:
405+
packageInfo['rpm_packages'].append(
406+
packageInfo['rpm_package_name'] + '-' + \
407+
match.group(2) + '-' + \
408+
packageInfo['rpm_version_string'] + '-' + \
409+
str(packageInfo['rpm_version_packaging']))
410+
400411
rpmSpecFile.close()
401412

402413
except Exception as e:
403414
sys.stderr.write('ERROR: Unable to read ' + packageInfo['rpm_spec_name'] + ': ' + str(e) + '\n')
404415
sys.exit(1)
405416

406417
# ====== Check whether information is complete ========================
407-
if ( (not 'rpm_package_name' in packageInfo) or
408-
(not 'rpm_version_packaging' in packageInfo) ):
418+
if ( (not 'rpm_package_name' in packageInfo) or
419+
(not 'rpm_version_packaging' in packageInfo) or
420+
(not 'rpm_version_string' in packageInfo) ):
409421
sys.stderr.write('ERROR: Cannot find required package versioning details in ' + packageInfo['rpm_spec_name'] + '!\n')
410422
sys.exit(1)
423+
packageInfo['rpm_packages'].append(
424+
packageInfo['rpm_package_name'] + '-' +
425+
packageInfo['rpm_version_string'] + '-' +
426+
str(packageInfo['rpm_version_packaging']))
427+
print(packageInfo['rpm_packages'])
411428

412429
elif len(rpm_spec_names) > 1:
413430
sys.stderr.write('ERROR: More than one spec file found: ' + str(rpm_spec_names) + '!\n')
@@ -1607,19 +1624,20 @@ def buildRPM(packageInfo, releases, architectures, skipPackageSigning, summaryFi
16071624
for buildArchitecture in architectures:
16081625
for release in releases:
16091626

1610-
printSubsection('Creating binary RPM package for ' + release + '/' + buildArchitecture)
1627+
printSubsection('Creating binary RPM package(s) for ' + release + '/' + buildArchitecture)
16111628

16121629
# ====== Check for mock configuration file =========================
16131630
configuration = release + '-' + buildArchitecture
16141631
if not os.path.isfile('/etc/mock/' + configuration + '.cfg'):
16151632
sys.stderr.write('ERROR: Configuration ' + '/etc/mock/' + configuration + '.cfg does not exist!\n')
16161633
sys.exit(1)
16171634

1618-
# ====== Delete old RPM ============================================
1619-
rpmFile = '/var/lib/mock/' + configuration + '/result/' + \
1620-
packageInfo['rpm_package_name'] + '-' + \
1621-
packageInfo['rpm_version_string'] + '-' + str(packageInfo['rpm_version_packaging']) + '.' + \
1622-
buildArchitecture + '.rpm'
1635+
# ====== Delete old RPMs ===========================================
1636+
for rpmFilePrefix in packageInfo['rpm_packages']:
1637+
for architecture in [ 'noarch', buildArchitecture ]:
1638+
rpmFile = '/var/lib/mock/' + configuration + '/result/' + \
1639+
rpmFilePrefix + '.' + \
1640+
architecture + '.rpm'
16231641
try:
16241642
os.unlink(rpmFile)
16251643
except FileNotFoundError:
@@ -1642,38 +1660,49 @@ def buildRPM(packageInfo, releases, architectures, skipPackageSigning, summaryFi
16421660
sys.exit(1)
16431661

16441662
# ------ Check resulting RPM =======================================
1645-
if not os.path.isfile(rpmFile):
1646-
sys.stderr.write('ERROR: RPM ' + rpmFile + ' not found!\n')
1647-
sys.exit(1)
1648-
1649-
# ====== Sign SRPM =================================================
1650-
if skipPackageSigning == False:
1651-
rpmsign = [ 'rpmsign',
1652-
'--define', '_gpg_name ' + packageInfo['packaging_maintainer_key'],
1653-
'--addsign', rpmFile ]
1654-
print(rpmsign)
1655-
try:
1656-
subprocess.run(rpmsign, check = True)
1657-
except Exception as e:
1658-
sys.stderr.write('ERROR: RPMSign run failed: ' + str(e) + '\n')
1663+
for rpmFilePrefix in packageInfo['rpm_packages']:
1664+
rpmArchitecture = None
1665+
found = False
1666+
for architecture in [ 'noarch', buildArchitecture ]:
1667+
rpmFile = '/var/lib/mock/' + configuration + '/result/' + \
1668+
rpmFilePrefix + '.' + \
1669+
architecture + '.rpm'
1670+
if os.path.isfile(rpmFile):
1671+
rpmArchitecture = architecture
1672+
found = True
1673+
break
1674+
if not found:
1675+
sys.stderr.write('ERROR: RPM ' + rpmFile + ' not found!\n')
16591676
sys.exit(1)
16601677

1661-
# ====== Run RPM Lint ==============================================
1662-
if shutil.which('rpmlint') != None:
1663-
rpmlintCommand = 'rpmlint -P ' + rpmFile
1664-
printSubsection('Running RPM Lint')
1665-
print('=> ' + rpmlintCommand)
1666-
try:
1667-
subprocess.run(rpmlintCommand, check=False, shell=True)
1668-
except Exception as e:
1669-
sys.stderr.write('ERROR: RPM Lint run failed: ' + str(e) + '\n')
1670-
sys.exit(1)
1671-
else:
1672-
sys.stderr.write('NOTE: RPM Lint is not installed -> checks skipped!\n')
1678+
# ====== Sign SRPM ==============================================
1679+
if skipPackageSigning == False:
1680+
rpmsign = [ 'rpmsign',
1681+
'--define', '_gpg_name ' + packageInfo['packaging_maintainer_key'],
1682+
'--addsign', rpmFile ]
1683+
print(rpmsign)
1684+
try:
1685+
subprocess.run(rpmsign, check = True)
1686+
except Exception as e:
1687+
sys.stderr.write('ERROR: RPMSign run failed: ' + str(e) + '\n')
1688+
sys.exit(1)
1689+
1690+
# ====== Run RPM Lint ===========================================
1691+
if shutil.which('rpmlint') != None:
1692+
rpmlintCommand = 'rpmlint -P ' + rpmFile
1693+
printSubsection('Running RPM Lint')
1694+
print('=> ' + rpmlintCommand)
1695+
try:
1696+
subprocess.run(rpmlintCommand, check=False, shell=True)
1697+
except Exception as e:
1698+
sys.stderr.write('ERROR: RPM Lint run failed: ' + str(e) + '\n')
1699+
sys.exit(1)
1700+
else:
1701+
sys.stderr.write('NOTE: RPM Lint is not installed -> checks skipped!\n')
16731702

1674-
# ====== Add RPM file to summary ===================================
1675-
if summaryFile != None:
1676-
summaryFile.write('rpmFile: ' + rpmFile + ' ' + release + ' ' + buildArchitecture + '\n')
1703+
# ====== Add RPM file to summary ================================
1704+
if summaryFile != None:
1705+
summaryFile.write('rpmFile: ' + rpmFile + ' ' + release + ' ' + rpmArchitecture + '\n')
16771706

16781707

16791708

0 commit comments

Comments
 (0)