dev/release/release.py (81 lines of code) (raw):
#!/usr/bin/env python3
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# Derived from Apache OpenDAL v0.45.1
# https://github.com/apache/opendal/blob/5079125/scripts/release.py
import re
import subprocess
from pathlib import Path
ROOT_DIR = Path(__file__).parent.parent.parent
def get_package_version():
major_version = None
minor_version = None
patch_version = None
major_pattern = re.compile(r'set\s*\(\s*GRAPHAR_MAJOR_VERSION\s+(\d+)\s*\)', re.IGNORECASE)
minor_pattern = re.compile(r'set\s*\(\s*GRAPHAR_MINOR_VERSION\s+(\d+)\s*\)', re.IGNORECASE)
patch_pattern = re.compile(r'set\s*\(\s*GRAPHAR_PATCH_VERSION\s+(\d+)\s*\)', re.IGNORECASE)
file_path = ROOT_DIR / "cpp/CMakeLists.txt"
with open(file_path, 'r') as file:
for line in file:
major_match = major_pattern.search(line)
minor_match = minor_pattern.search(line)
patch_match = patch_pattern.search(line)
if major_match:
major_version = major_match.group(1)
if minor_match:
minor_version = minor_match.group(1)
if patch_match:
patch_version = patch_match.group(1)
if major_version and minor_version and patch_version:
return f"{major_version}.{minor_version}.{patch_version}"
else:
return None
def archive_source_package():
print(f"Archive source package started")
version = get_package_version()
assert version, "Failed to get the package version"
name = f"apache-graphar-{version}-incubating-src"
archive_command = [
"git",
"archive",
"--prefix",
f"apache-graphar-{version}-incubating-src/",
"-o",
f"{ROOT_DIR}/dist/{name}.tar.gz",
"HEAD",
]
subprocess.run(
archive_command,
cwd=ROOT_DIR,
check=True,
)
print(f"Archive source package to dist/{name}.tar.gz")
def generate_signature():
for i in Path(ROOT_DIR / "dist").glob("*.tar.gz"):
print(f"Generate signature for {i}")
subprocess.run(
["gpg", "--yes", "--armor", "--output", f"{i}.asc", "--detach-sig", str(i)],
cwd=ROOT_DIR / "dist",
check=True,
)
for i in Path(ROOT_DIR / "dist").glob("*.tar.gz"):
print(f"Check signature for {i}")
subprocess.run(
["gpg", "--verify", f"{i}.asc", str(i)], cwd=ROOT_DIR / "dist", check=True
)
def generate_checksum():
for i in Path(ROOT_DIR / "dist").glob("*.tar.gz"):
print(f"Generate checksum for {i}")
subprocess.run(
["sha512sum", str(i.relative_to(ROOT_DIR / "dist"))],
stdout=open(f"{i}.sha512", "w"),
cwd=ROOT_DIR / "dist",
check=True,
)
for i in Path(ROOT_DIR / "dist").glob("*.tar.gz"):
print(f"Check checksum for {i}")
subprocess.run(
["sha512sum", "--check", f"{str(i.relative_to(ROOT_DIR / 'dist'))}.sha512"],
cwd=ROOT_DIR / "dist",
check=True,
)
if __name__ == "__main__":
(ROOT_DIR / "dist").mkdir(exist_ok=True)
archive_source_package()
generate_signature()
generate_checksum()