Skip to content

Commit 1434cb7

Browse files
committed
update hashes; add script to auto-generate hashes
1 parent b668c2d commit 1434cb7

File tree

2 files changed

+149
-18
lines changed

2 files changed

+149
-18
lines changed

s5cmdUrls.cmake

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,39 @@
11
# Checksum copied from "s5cmd_checksums.txt" associated with the s5cmd GitHub release
22

3-
set(version "2.2.2")
3+
# The section below is auto-generated by scripts/update_s5cmdUrls.cmake.py
4+
# Do not edit this section directly.
45

5-
set(linux32_filename "s5cmd_${version}_Linux-32bit.tar.gz")
6-
set(linux32_sha256 "dc9ebe570fb5abcf5781511901d93425879022d56e73ab44dd32c45b2bfbc04b")
6+
set(version "2.3.0")
77

8-
set(linux64_filename "s5cmd_${version}_Linux-64bit.tar.gz")
9-
set(linux64_sha256 "a15f83d2a6dc091e43b2a120f29f8f6c86d146c381766c0197ec75d7985af2b6")
8+
set(linux32_filename "s5cmd_${version}_Linux-32bit.tar.gz")
9+
set(linux32_sha256 "33e73005f183e5758161b32440ec65b15c934eb60c3b42795fb335418ca110ac")
1010

11-
set(linuxarm64_filename "s5cmd_${version}_Linux-arm64.tar.gz")
12-
set(linuxarm64_sha256 "eabf18082398c332d33c692d383a889be204b1e7716f820e014bf11474ad345b")
11+
set(linux64_filename "s5cmd_${version}_Linux-64bit.tar.gz")
12+
set(linux64_sha256 "de0fdbfa3aceae55e069ba81a0fc17b2026567637603734a387b2fca06c299b4")
13+
14+
set(linuxarm64_filename "s5cmd_${version}_Linux-arm64.tar.gz")
15+
set(linuxarm64_sha256 "1439f0d00ecedcd2a2f1f2c6749bbb0152b2257bf5086f29646ec8ae38798e24")
1316

1417
set(linuxppc64le_filename "s5cmd_${version}_Linux-ppc64le.tar.gz")
15-
set(linuxppc64le_sha256 "90e5f0b774745a93795a04add18f63b5f96e61bcd5d36d7dc26cfec38412cd23")
18+
set(linuxppc64le_sha256 "cb9f6926f94787f635f0a9de9242fca24b1461befd9a14b8a1084b04f76dbb45")
19+
20+
set(macos64_filename "s5cmd_${version}_macOS-64bit.tar.gz")
21+
set(macos64_sha256 "df6f76f6d317c4d051ad083219ed36eb8d8e5ebc55ceeeb91f5e66cdc3ac71fb")
1622

17-
set(macos64_filename "s5cmd_${version}_macOS-64bit.tar.gz")
18-
set(macos64_sha256 "5503a3308e239f081e5238e0af57958ae618e0de8b9c71142fe80f38be77e1c7")
23+
set(macosarm64_filename "s5cmd_${version}_macOS-arm64.tar.gz")
24+
set(macosarm64_sha256 "ae007bc96276f498ae3c1fb017e57630cf93ef260cfe7e97b365522e240c973f")
1925

20-
set(macosarm64_filename "s5cmd_${version}_macOS-arm64.tar.gz")
21-
set(macosarm64_sha256 "fa3ae7e093fd6ac8a5236a000d5373779eb403c57ee955fc7da9549668644e38")
26+
set(win32_filename "s5cmd_${version}_Windows-32bit.zip")
27+
set(win32_sha256 "a5ff4e82f679dbd45310a0d57519fcfe66c1df2703d883ff9f40a20db7e65fe8")
2228

23-
set(win32_filename "s5cmd_${version}_Windows-32bit.zip")
24-
set(win32_sha256 "ee667eb01b955a7dda588456bd102982f8344bed393a8b63b5d4c9c325e01349")
29+
set(win64_filename "s5cmd_${version}_Windows-64bit.zip")
30+
set(win64_sha256 "9d8a98c1d9f6284c6d54aeec3daeb5f1412fd101850ae756c1e70dd8ffe52166")
2531

26-
set(win64_filename "s5cmd_${version}_Windows-64bit.zip")
27-
set(win64_sha256 "f7c311907c78efa56e27a25fba1f87520754c402bbe1cb4901d3522f12a75497")
32+
set(winarm64_filename "s5cmd_${version}_Windows-arm64.zip")
33+
set(winarm64_sha256 "0d99ce0cbf4a266e7fd9b3cd2682384fb7b432754eb52f17f9a9f7cbe6bcca55")
2834

29-
set(winarm64_filename "s5cmd_${version}_Windows-arm64.zip")
30-
set(winarm64_sha256 "61e0adf3635334fa62714a5cf221e03f3549392e9613f9a7591a03d8e6fe0d64")
35+
# The section above is auto-generated by scripts/update_s5cmdUrls.cmake.py
36+
# Do not edit this section directly.
3137

3238
cmake_host_system_information(RESULT is_64bit QUERY IS_64BIT)
3339

scripts/update_s5cmdUrls.cmake.py

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
#!usr/bin/env python3
2+
3+
import argparse
4+
import re
5+
from pathlib import Path
6+
from urllib.request import urlopen
7+
8+
FILENAME_LOOKUP = {
9+
"linux32": "Linux-32bit.tar.gz",
10+
"linux64": "Linux-64bit.tar.gz",
11+
"linuxarm64": "Linux-arm64.tar.gz",
12+
"linuxppc64le": "Linux-ppc64le.tar.gz",
13+
"macos64": "macOS-64bit.tar.gz",
14+
"macosarm64": "macOS-arm64.tar.gz",
15+
"win32": "Windows-32bit.zip",
16+
"win64": "Windows-64bit.zip",
17+
"winarm64": "Windows-arm64.zip",
18+
}
19+
VERSION_RE = r"^s5cmd_([\d\.]+)_"
20+
TEXT_RE = r"\# The section.+\n\# Do not edit this[\S\s]+\# The section.+\n\# Do not edit this.+\n"
21+
22+
23+
def parse_args() -> argparse.Namespace:
24+
parser = argparse.ArgumentParser(
25+
description="Update s5cmd files and hashes in `s5cmdUrls.cmake`.",
26+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
27+
)
28+
29+
parser.add_argument(
30+
"-c",
31+
"--checksum-file",
32+
type=str,
33+
help="Path or URL to the checksum file",
34+
required=True,
35+
)
36+
parser.add_argument(
37+
"-s",
38+
"--s5cmd-file",
39+
type=str,
40+
help="Path to the s5cmd file",
41+
default=Path(__file__).parents[1].joinpath("s5cmdUrls.cmake").as_posix(),
42+
)
43+
args = parser.parse_args()
44+
return args
45+
46+
47+
def read_checksum_text(path: str) -> str:
48+
if path.startswith("http"):
49+
response = urlopen(path)
50+
return response.read().decode("utf-8")
51+
52+
_path = Path(path)
53+
if not _path.exists() or not _path.is_file():
54+
raise FileNotFoundError(f"Checksum file `{_path}` does not exist.")
55+
return _path.read_text(encoding="utf-8")
56+
57+
58+
def generate_cmake_text(text: str) -> str:
59+
checksums = [l.split() for l in text.rstrip("\n").split("\n")]
60+
61+
version = re.search(VERSION_RE, checksums[0][1]).group(1)
62+
if version is None:
63+
msg = f"Cannot find version in {checksums[0][1]}"
64+
raise ValueError(msg)
65+
66+
output_lines = [
67+
"# The section below is auto-generated by scripts/update_s5cmdUrls.cmake.py",
68+
"# Do not edit this section directly.",
69+
"",
70+
f'set(version "{version}")',
71+
"",
72+
]
73+
74+
for shortname, postfix in FILENAME_LOOKUP.items():
75+
hash_ = None
76+
for c in checksums:
77+
_filename = f"s5cmd_{version}_{postfix}"
78+
if _filename == c[1]:
79+
hash_ = c[0]
80+
break
81+
if hash_ is None:
82+
msg = f"Cannot find hash for `{_filename}` in {checksums}"
83+
raise ValueError(msg)
84+
85+
output_lines.append(
86+
f"set({shortname}_filename".ljust(26) + f'"s5cmd_${{version}}_{postfix}")'
87+
)
88+
output_lines.append(f"set({shortname}_sha256".ljust(26) + f'"{hash_}")')
89+
output_lines.append("")
90+
91+
output_lines.append(
92+
"# The section above is auto-generated by scripts/update_s5cmdUrls.cmake.py"
93+
)
94+
output_lines.append("# Do not edit this section directly.")
95+
output_lines.append("")
96+
97+
return "\n".join(output_lines)
98+
99+
100+
def overwrite_cmake_file(text: str, path: str) -> None:
101+
_path = Path(path)
102+
if not _path.exists() or not _path.is_file():
103+
msg = f"File `{_path}` does not exist."
104+
raise FileNotFoundError(msg)
105+
106+
cmake_text = _path.read_text(encoding="utf-8")
107+
if not re.search(TEXT_RE, cmake_text):
108+
msg = f"Unable to find text in `{_path}`. Please check the regex."
109+
raise ValueError(msg)
110+
111+
replaced_text = re.sub(TEXT_RE, text, cmake_text)
112+
_path.write_text(replaced_text, encoding="utf-8")
113+
114+
print(f"Updated `{_path}` with new checksums.")
115+
116+
117+
def main():
118+
args = parse_args()
119+
text = read_checksum_text(args.checksum_file)
120+
cmake_text = generate_cmake_text(text)
121+
overwrite_cmake_file(cmake_text, args.s5cmd_file)
122+
123+
124+
if __name__ == "__main__":
125+
main()

0 commit comments

Comments
 (0)