diff options
| author | KunoiSayami <[email protected]> | 2022-10-29 02:25:18 +0800 |
|---|---|---|
| committer | KunoiSayami <[email protected]> | 2022-10-29 02:25:18 +0800 |
| commit | befbf3b43fab184d5014cc51fcc6c3c1f0a4cd53 (patch) | |
| tree | c99e9fab7ad17e1d01ceb93f54d3ec537baca936 /utils | |
| parent | 0e7527d3e1555fb7507dc3b5a8ef0f2d8c7f8160 (diff) | |
feat(script): Optimize build fail output
feat(script): Add update-repo-copy.service
Signed-off-by: KunoiSayami <[email protected]>
Diffstat (limited to 'utils')
| -rwxr-xr-x | utils/pkgbuild.py | 59 | ||||
| -rw-r--r-- | utils/systemd/update-repo-copy.service | 8 | ||||
| -rwxr-xr-x | utils/systemd/wait-services.sh | 6 | ||||
| -rw-r--r-- | utils/upload.php | 7 | ||||
| -rwxr-xr-x | utils/upload.py | 4 |
5 files changed, 58 insertions, 26 deletions
diff --git a/utils/pkgbuild.py b/utils/pkgbuild.py index 9194285..89be962 100755 --- a/utils/pkgbuild.py +++ b/utils/pkgbuild.py @@ -25,7 +25,7 @@ CI_COMMIT_TITLE = os.getenv("CI_COMMIT_TITLE", "") BUILD_OVERRIDE = os.getenv("BUILD_OVERRIDE", "") TRUST_GPG_SCRIPT = pathlib.Path("./utils/trust_gpg.sh").resolve() NO_UPLOAD = os.getenv("BUILD_NO_UPLOAD") is None -FAIL_REPOS = {} +FAIL_REPOS = [] async def get_arch() -> str: @@ -83,6 +83,19 @@ class PackageVersion: return f"{self.name} {self.version}" +class MakepkgErrorReason: + package: str + code: int + post_install_dependency: str | None + + def to_str(self) -> str: + if self.post_install_dependency is not None: + return f"{self.package}(dependency)[{self.post_install_dependency}]({self.code})" + else: + return f"{self.package}({self.code})" + + def fetch_database(pkg_db: str) -> dict[str, str]: name_read = False version_read = False @@ -278,9 +291,9 @@ async def run_build( return p.returncode -async def install_dependency_via_yay(dependency: str) -> None: +async def install_dependency_via_yay(dependency: str) -> int: await ( - await asyncio.create_subprocess_exec( + p := await asyncio.create_subprocess_exec( "yay", "--noconfirm", "--asdeps", @@ -291,6 +304,16 @@ async def install_dependency_via_yay(dependency: str) -> None: stdout=None, ) ).wait() + return p.returncode + + +async def build_yay_dependency(target: PackageVersionWithPath, dependency: str) -> int: + if (dep_dir := target.path.parent.joinpath(dependency).resolve()).is_dir(): + os.chdir(str(dep_dir)) + await run_hook(target.path, dependency) + return await run_build_with_install(**BUILD_ENVS.get_dict()) + else: + return await install_dependency_via_yay(dependency) async def do_build(target: PackageVersionWithPath) -> int: @@ -311,20 +334,14 @@ async def do_build(target: PackageVersionWithPath) -> int: ).is_file(): async with aiofiles.open(str(yay_deps)) as fin: while dep := (await fin.readline()).strip(): - logger.debug("Find dep %s, build first", dep) - if (dep_dir := target.path.parent.joinpath(dep).resolve()).is_dir(): - os.chdir(str(dep_dir)) - await run_hook(target.path, dep) - if ( - ret := await run_build_with_install(**BUILD_ENVS.get_dict()) - ): - logger.error( - "Build dependencies package error, skipped next step (%d)", - ret, - ) - return ret - else: - await install_dependency_via_yay(dep) + logger.debug("Find dependency %s, build first", dep) + if ret := await build_yay_dependency(target, dep): + logger.error( + "Build dependencies package error, skipped next step (%d)", + ret, + ) + FAIL_REPOS.append(MakepkgErrorReason(target.name, ret, dep)) + return ret if ( gpg_keys := target.path.parent.joinpath(".gpg_keys") @@ -347,8 +364,7 @@ async def do_build(target: PackageVersionWithPath) -> int: if build_ret == 13: logger.warning("Already build %s, skipped.", base_dir_name) return 0 - # TODO: Optimize fail_repos output - FAIL_REPOS.update({base_dir_name: build_ret}) + FAIL_REPOS.append(MakepkgErrorReason(base_dir_name, build_ret, None)) logger.warning("Build %s fail: %d", base_dir_name, build_ret) return build_ret @@ -358,7 +374,7 @@ async def clean_installed_packages() -> int: p = await asyncio.create_subprocess_exec( "/bin/bash", "-c", - "pacman -Qdtq | ifne sudo pacman --noconfirm -Rcns", + "pacman -Qdtq | ifne sudo pacman --noconfirm -Rcns -", stdout=None, ) await p.wait() @@ -437,11 +453,12 @@ async def do_work( logger.error("Build failed repositories (%d):", len(FAIL_REPOS)) logger.error( "%s", - ", ".join(f"{repo}({ret_code})" for repo, ret_code in FAIL_REPOS.items()), + ", ".join(repo.to_str() for repo in FAIL_REPOS), ) os.chdir(str(home_directory)) if ret := await upload_packages(): + logger.error("Got error in upload packages (%d)", ret) return ret if len(FAIL_REPOS): diff --git a/utils/systemd/update-repo-copy.service b/utils/systemd/update-repo-copy.service new file mode 100644 index 0000000..af79ee5 --- /dev/null +++ b/utils/systemd/update-repo-copy.service @@ -0,0 +1,8 @@ +[Unit] +Description=Update repo copy service + +[Service] +WorkingDirectory=/var/lib/update/packages/ +ExecStartPre=/var/lib/update/wait-services.sh +ExecStart=/usr/bin/rsync -r --links -vct --update --delete . /var/www/packages
\ No newline at end of file diff --git a/utils/systemd/wait-services.sh b/utils/systemd/wait-services.sh new file mode 100755 index 0000000..be20239 --- /dev/null +++ b/utils/systemd/wait-services.sh @@ -0,0 +1,6 @@ +#!/bin/bash +echo "Checking is service running" +while /usr/bin/systemctl status --no-page | grep update-repo@ | grep -v grep; +do + sleep 1 +done
\ No newline at end of file diff --git a/utils/upload.php b/utils/upload.php index da848eb..602ed69 100644 --- a/utils/upload.php +++ b/utils/upload.php @@ -9,11 +9,12 @@ } if (!empty($_FILES['file'])) { - $path = "/var/www/repo/". $_POST['arch'] . "/"; - $path = $path . basename($_FILES['file']['name']); + $path = "/var/www/repo/". $_POST['arch'] . "/"; + $file_name = urldecode($_FILES['file']['name']); + $path = $path . basename($file_name); if (move_uploaded_file($_FILES['file']['tmp_name'], $path)) { - echo "The file " . basename( $_FILES['file']['name']) . " has been uploaded"; + echo "The file " . basename($file_name) . " has been uploaded"; } else { echo "There was an error uploading the file, please try again!"; } diff --git a/utils/upload.py b/utils/upload.py index 8bb3114..c027bed 100755 --- a/utils/upload.py +++ b/utils/upload.py @@ -30,8 +30,8 @@ async def send_file( data.add_field("file", open(file, "rb"), filename=file) data.add_field("token", args.token) data.add_field("arch", args.arch) - async with session.post(args.remote_address, data=data): - pass + async with session.post(args.remote_address, data=data) as req: + logger.info("%s", await req.text()) async def main(args: argparse.Namespace) -> int: |
