Skip to content

Commit 03ac282

Browse files
authored
Add release-metadata updating script (#19)
* Add release-metadata updating script * Add some checks, accept github module's output format
1 parent d58e3b8 commit 03ac282

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

scripts/update-release-metadata.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#!/usr/bin/env python3
2+
import json
3+
import sys
4+
import boto3
5+
import re
6+
7+
8+
def fetch_metadata():
9+
'''
10+
Pull metadata from s3 as byte stream.
11+
'''
12+
client = boto3.client('s3')
13+
try:
14+
resp = client.get_object(
15+
Bucket='release-metadata',
16+
Key='release-versions'
17+
)
18+
except boto3.S3.Client.exceptions.NoSuchKey:
19+
sys.stderr.write('No release-metadata key found. Check permissions.\n')
20+
return 1
21+
22+
return resp['Body'].read()
23+
24+
25+
def write_metadata(data):
26+
'''
27+
Write metadata file from byte stream.
28+
'''
29+
client = boto3.client('s3')
30+
resp = client.put_object(
31+
Body=data,
32+
Bucket='release-metadata',
33+
Key='release-versions'
34+
)
35+
36+
if resp.ResponseMetadata.HTTPStatusCode != 200:
37+
sys.stderr.write('Unable to upload file. Dumping response metadata.\n')
38+
print(resp, file=sys.stderr)
39+
return 1
40+
41+
42+
def main(module_name, new_ref):
43+
if not new_ref.startswith('refs/tags/'):
44+
sys.stderr.write(
45+
f'Unknown reference format {new_ref}. Expecting refs/tags/v<version>\n')
46+
return 1
47+
# extract the version
48+
new_tag = re.sub('[A-Za-z/]', '', new_ref)
49+
50+
print(f'Releasing version {new_tag} of module {module_name}')
51+
52+
release_data = fetch_metadata()
53+
data = json.loads(release_data)
54+
module_versions = data.get(module_name)
55+
if not module_versions:
56+
sys.stderr.write(
57+
f'Module {module_name} does not exist in release metadata.\n')
58+
return 1
59+
if new_tag in module_versions:
60+
print(f"Tag {new_tag} is already released for module {module_name}. Exiting.")
61+
return 0
62+
module_versions.insert(0, new_tag)
63+
write_metadata(json.dumps(data).encode('utf-8'))
64+
65+
66+
def usage():
67+
print("Usage: python3 update-release-metadata.py <module> <ref>")
68+
return 2
69+
70+
71+
if __name__ == "__main__":
72+
if len(sys.argv) != 3:
73+
sys.exit(usage())
74+
sys.exit(main(*sys.argv[1:]))

0 commit comments

Comments
 (0)