Skip to content

Commit 7101e8c

Browse files
authored
feat: upgrade s5cmd to 2.3.0 (#15)
update hashes; add script to auto-generate hashes
1 parent b668c2d commit 7101e8c

File tree

3 files changed

+151
-19
lines changed

3 files changed

+151
-19
lines changed

s5cmdUrls.cmake

+24-18
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

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

tests/test_executable.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def _get_scripts():
4747

4848
@all_tools
4949
def test_package_script(tool):
50-
expected_version = "2.2.2"
50+
expected_version = "2.3.0"
5151
scripts = [script for script in _get_scripts() if script.stem == tool]
5252
assert len(scripts) == 1
5353
output = subprocess.check_output([str(scripts[0]), "version"]).decode("ascii")

0 commit comments

Comments
 (0)