1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/anolis-keentuned

Клонировать/Скачать
packup.py 4.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
liuwengchao Отправлено 20.09.2024 12:03 2cebbe8
# Copyright (c) 2021-2023 Alibaba Cloud Computing Ltd.
# SPDX-License-Identifier: MulanPSL-2.0
import re
import os
import sys
import subprocess
from datetime import datetime
USAGE = "python3 packup.py [auto] \n" \
"\ne.g. \n" \
"\tpython3 packup.py auto \n" \
"\tpython3 packup.py"
POST_AUTO_START_SERVICE = '%post \n' \
'%systemd_post keentuned.service \n' \
'if [ -f "%{_prefix}/lib/systemd/system/keentuned.service" ]; then \n' \
' systemctl enable keentuned.service || : \n' \
' systemctl start keentuned.service || : \n' \
'fi'
POSTUN_AUTO_START_SERVICE = "%postun \n" \
"%systemd_postun_with_restart keentuned.service"
SPEC_NAME = "keentuned.spec"
PACKAGE_NAME = "keentuned"
PACKAGE_FILEs = ["api", "cli", "common", "daemon", "modules", "vendor", \
"go.mod", "go.sum", "misc", "LICENSE", "Makefile", "README.md", \
"../.git"]
source_dir = os.path.split(os.path.realpath(__file__))[0]
def sysCommand(command: str, cwd: str = "./"):
result = subprocess.run(
command,
shell=True,
close_fds=True,
cwd=cwd,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE
)
suc = (result.returncode == 0)
out = result.stdout.decode('UTF-8', 'strict').strip()
error = result.stderr.decode('UTF-8', 'strict').strip()
if not suc:
return suc, error
else:
return suc, out
def checkspec():
print("[+] check spec file:{}".format(SPEC_NAME))
with open(os.path.join(source_dir, SPEC_NAME),'r') as f:
spec = f.read()
verison = re.search("Version: ([\d.]+)\n",spec).group(1)
release = re.search("define alinux_release (\d)\n",spec).group(1)
print("[+] version = {}, release = {}".format(verison, release))
print("[+] check change log")
if not re.search(" - {}-{}".format(verison, release), spec):
print("[-] leak of change log of {}-{} in {}".format(verison, release, SPEC_NAME))
exit(1)
date_items = re.findall(r"\* (\w+) (\w+) (\d+) (\d+) .*",spec)
for date in date_items:
_date = datetime.strptime("{} {} {}".format(date[3], date[1], date[2]),"%Y %b %d")
if not _date.strftime("%a") == date[0]:
print("[-] date error:'{}', should be '{}' in {}".format(date, _date.strftime("%a"), SPEC_NAME))
exit(1)
return verison, release
def checksetup(version):
print("[+] check setup.py")
with open(os.path.join(source_dir,"setup.py"), 'r') as f:
script = f.read()
if not re.search(r'version\s*= "{}",'.format(version),script):
print("[-] wrong version in setup.py")
exit(1)
def packup(version, release):
if os.path.exists("{}-{}".format(PACKAGE_NAME, version)):
sysCommand("rm -rf {}-{}".format(PACKAGE_NAME, version))
print("[+] create package dir: {}-{}".format(PACKAGE_NAME, version))
sysCommand("mkdir {}-{}".format(PACKAGE_NAME, version))
for file in PACKAGE_FILEs:
print("[+] packup file: {}".format(file))
sysCommand("cp -r {file} {pkg_name}-{version}".format(
file = os.path.join(source_dir,file),
pkg_name = PACKAGE_NAME,
version = version))
sysCommand("tar -cvzf {pkg_name}-{version}-{release}.tar.gz --exclude=**/__pycache__ {pkg_name}-{version}".format(
pkg_name = PACKAGE_NAME,
version = version,
release = release
))
if os.path.exists("{}-{}".format(PACKAGE_NAME, version)):
sysCommand("rm -rf {}-{}".format(PACKAGE_NAME, version))
def copySpec(replace = False):
print("[+] copy spec file from {}".format(os.path.join(source_dir, SPEC_NAME)))
with open(os.path.join(source_dir, SPEC_NAME),'r') as f:
spec = f.read()
if replace:
spec = re.sub(r"%post\n%.*", POST_AUTO_START_SERVICE, spec)
spec = re.sub(r"%preun\n%.*", POSTUN_AUTO_START_SERVICE, spec)
with open(os.path.join("./", SPEC_NAME),'w') as f:
f.write(spec)
if __name__ == "__main__":
if sys.argv.__len__() < 1:
print(USAGE)
exit(0)
suc, res = sysCommand("go mod vendor", cwd=source_dir)
if not suc:
print("[-] fail to run go mod vendor: {}".format(res))
exit(0)
version, release = checkspec()
packup(version, release)
if sys.argv.__len__() > 1 and sys.argv[1] == "auto":
copySpec(True)
else:
copySpec(False)

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/anolis-keentuned.git
git@api.gitlife.ru:oschina-mirror/anolis-keentuned.git
oschina-mirror
anolis-keentuned
anolis-keentuned
master