Uh oh!
There was an error while loading. Please reload this page.
This repository was archived by the owner on May 28, 2022. It is now read-only.
forked from cloudflare/cloudflared
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgithub_message.py
More file actions
Latest commit
118 lines (95 loc) · 3.29 KB
/
Copy pathgithub_message.py
File metadata and controls
118 lines (95 loc) · 3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/usr/bin/python3
"""
Creates Github Releases Notes with content hashes
"""
importargparse
importlogging
importos
importhashlib
importglob
fromgithubimportGithub, GithubException, UnknownObjectException
FORMAT="%(levelname)s - %(asctime)s: %(message)s"
logging.basicConfig(format=FORMAT)
CLOUDFLARED_REPO=os.environ.get("GITHUB_REPO", "cloudflare/cloudflared")
GITHUB_CONFLICT_CODE="already_exists"
defget_sha256(filename):
""" get the sha256 of a file """
sha256_hash=hashlib.sha256()
withopen(filename,"rb") asf:
forbyte_blockiniter(lambda: f.read(4096),b""):
sha256_hash.update(byte_block)
returnsha256_hash.hexdigest()
defupdate_or_add_message(msg, name, sha):
"""
updates or builds the github version message for each new asset's sha256.
Searches the existing message string to update or create.
"""
new_text='{0}: {1}\n'.format(name, sha)
start=msg.find(name)
if (start!=-1):
end=msg.find("\n", start)
if (end!=-1):
returnmsg.replace(msg[start:end+1], new_text)
back=msg.rfind("```")
if (back!=-1):
return'{0}{1}```'.format(msg[:back], new_text)
return'{0} \n### SHA256 Checksums:\n```\n{1}```'.format(msg, new_text)
defget_release(repo, version):
""" Get a Github Release matching the version tag. """
try:
release=repo.get_release(version)
logging.info("Release %s found", version)
returnrelease
exceptUnknownObjectException:
logging.info("Release %s not found", version)
defparse_args():
""" Parse and validate args """
parser=argparse.ArgumentParser(
description="Creates Github Releases and uploads assets."
)
parser.add_argument(
"--api-key", default=os.environ.get("API_KEY"), help="Github API key"
)
parser.add_argument(
"--release-version",
metavar="version",
default=os.environ.get("VERSION"),
help="Release version",
)
parser.add_argument(
"--dry-run", action="store_true", help="Do not modify the release message"
)
args=parser.parse_args()
is_valid=True
ifnotargs.release_version:
logging.error("Missing release version")
is_valid=False
ifnotargs.api_key:
logging.error("Missing API key")
is_valid=False
ifis_valid:
returnargs
parser.print_usage()
exit(1)
defmain():
""" Attempts to update the Github Release message with the github asset's checksums """
try:
args=parse_args()
client=Github(args.api_key)
repo=client.get_repo(CLOUDFLARED_REPO)
release=get_release(repo, args.release_version)
msg=release.body
forfilepathinglob.glob("artifacts/*"):
pkg_hash=get_sha256(filepath)
# add the sha256 of the new artifact to the release message body
name=os.path.basename(filepath)
msg=update_or_add_message(msg, name, pkg_hash)
ifargs.dry_run:
logging.info("Skipping asset upload because of dry-run")
return
# update the release body text
release.update_release(args.release_version, msg)
exceptExceptionase:
logging.exception(e)
exit(1)
main()