Skip to content

Commit 9333893

Browse files
committed
Add an unsigned key mangler
1 parent 87ef2ca commit 9333893

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

mangle/koji/unsigned.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#!/usr/bin/env python3
2+
# Checks for unsigned packages in a given tag and key name
3+
4+
import sys
5+
import argparse
6+
import koji
7+
builds = []
8+
binfos = []
9+
rpmdict = {}
10+
unsigned = []
11+
errors = {}
12+
13+
STATUS = 0
14+
HUB = 'https://kojidev.rockylinux.org/kojihub'
15+
16+
# Place all known keys here. IMA signing does not matter. What matters is that
17+
# they are signed with the given key ID.
18+
KEYS = {
19+
'rocky-linux-8': {'id': '6d745a60'},
20+
'rocky-linux-10': {'id': '6fedfc85'}
21+
}
22+
23+
parser = argparse.ArgumentParser(description="Koji Signing Check")
24+
parser.add_argument('--key', type=str, help="Signing key name", required=True)
25+
parser.add_argument('--tag', type=str, help="Tag", required=True)
26+
parsed = parser.parse_args()
27+
28+
key = parsed.key
29+
tag = parsed.tag
30+
31+
if not key in KEYS:
32+
print(f'Unknown key {key}')
33+
sys.exit(1)
34+
35+
kojisession = koji.ClientSession(HUB)
36+
builds = [build['nvr'] for build in
37+
kojisession.listTagged(tag, latest=True, inherit=True)]
38+
39+
builds = sorted(builds)
40+
41+
kojisession.multicall = True
42+
for build in builds:
43+
kojisession.getBuild(build, strict=True)
44+
45+
for build, result in zip(builds, kojisession.multiCall()):
46+
if isinstance(result, list):
47+
binfos.append(result)
48+
else:
49+
errors.setdefault('Builds', []).append(build)
50+
STATUS += 1
51+
52+
kojisession.multicall = True
53+
for [binfo] in binfos:
54+
kojisession.listRPMs(buildID=binfo['id'])
55+
56+
results = kojisession.multiCall()
57+
for [rpms] in results:
58+
for rpm in rpms:
59+
rpmdict[f"{rpm['nvr']}.{rpm['arch']}"] = rpm['id']
60+
61+
# Get unsigned packages
62+
kojisession.multicall = True
63+
for rpm in rpmdict.keys():
64+
kojisession.queryRPMSigs(rpm_id=rpmdict[rpm], sigkey=KEYS[key]['id'])
65+
66+
results = kojisession.multiCall()
67+
for ([result], rpm) in zip(results, rpmdict.keys()):
68+
if not result:
69+
unsigned.append(rpm)
70+
71+
print('\n'.join(unsigned))

0 commit comments

Comments
 (0)