From 450b83c3ef60cc6e7c50774f81b86143fba8c27a Mon Sep 17 00:00:00 2001 From: Snowykami Date: Sun, 20 Apr 2025 15:21:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20cloudreve-aio=20Dockerfile?= =?UTF-8?q?=EF=BC=8C=E6=9B=B4=E6=96=B0=E5=90=8C=E6=AD=A5=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=BB=A5=E6=94=AF=E6=8C=81=20Dockerfile=20=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dockerfiles/cloudreve-aio.Dockerfile | 9 ++++++++ images.yaml | 5 ++++- pyproject.toml | 6 ------ sync.py | 32 ++++++++++++++++++++++++---- 4 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 dockerfiles/cloudreve-aio.Dockerfile diff --git a/dockerfiles/cloudreve-aio.Dockerfile b/dockerfiles/cloudreve-aio.Dockerfile new file mode 100644 index 0000000..6719c90 --- /dev/null +++ b/dockerfiles/cloudreve-aio.Dockerfile @@ -0,0 +1,9 @@ +FROM cloudreve/cloudreve:latest + +# Install ffmpeg LibreOffice and VIPS + +RUN apk add --no-cache \ + ffmpeg \ + libreoffice \ + vips \ + && rm -rf /var/cache/apk/* \ No newline at end of file diff --git a/images.yaml b/images.yaml index 6e752c2..5aab322 100644 --- a/images.yaml +++ b/images.yaml @@ -24,4 +24,7 @@ images: - "20" - "20-slim" - "18" - - "18-slim" \ No newline at end of file + - "18-slim" + + - dockerfile: "./dockerfiles/cloudreve-aio.Dockerfile" + target: "reg.liteyuki.icu/library/cloudreve-aio:latest" \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index d001aed..d2e5a65 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,6 @@ dependencies = [ "aiofiles>=24.1.0", "pydantic>=2.11.3", "pyyaml>=6.0.2", - "test-pypi>=0.1.1", ] @@ -16,8 +15,3 @@ dependencies = [ name = "liteyuki" url = "https://git.liteyuki.icu/api/packages/snowykami/pypi/simple" explicit = true - -[tool.uv.sources] -test-pypi = [ - { index = "liteyuki" }, -] \ No newline at end of file diff --git a/sync.py b/sync.py index e9add73..8e8ad9b 100644 --- a/sync.py +++ b/sync.py @@ -9,6 +9,7 @@ class Config(BaseModel): images: list["Images"] = [] class Images(BaseModel): + dockerfile: str | None = None source: str target: str tags: list[str] = [] @@ -40,7 +41,11 @@ async def docker_push(image: str) -> int | None: print(f"Pushing image {image}...") return await run_command(f"docker push {image}") -async def docker_task(source: str, target: str) -> int | None: +async def docker_build(dockerfile: str, target: str) -> int | None: + print(f"Building image from {dockerfile}...") + return await run_command(f"docker build -t {target} -f {dockerfile} .") + +async def docker_sync_task(source: str, target: str) -> int | None: print(f"Pulling image {source}...") if r := await docker_pull(source): if r != 0: @@ -53,6 +58,16 @@ async def docker_task(source: str, target: str) -> int | None: return r return 0 +async def docker_build_task(dockerfile: str, target: str) -> int | None: + print(f"Building image from {dockerfile}...") + if r := await docker_build(dockerfile, target): + if r != 0: + return r + if r := await docker_push(target): + if r != 0: + return r + return 0 + semaphore = asyncio.Semaphore(5) async def limited_task[T: Any](semaphore: asyncio.Semaphore, task: Callable[[], Coroutine[None, None, T]]) -> T: @@ -72,11 +87,20 @@ async def main(): tasks = [] for image in config.images: - if len(image.tags) > 0: + if image.dockerfile: + # 若有dockerfile提供,則使用docker build + if len(image.tags) > 0: + # 若有tags提供,則使用docker build和docker tag + for tag in image.tags: + tasks.append(limited_task(semaphore, partial(docker_build_task, image.dockerfile, f"{image.target}:{tag}"))) + else: + tasks.append(limited_task(semaphore, partial(docker_build_task, image.dockerfile, image.target))) + elif len(image.tags) > 0: + # 若有tags提供,則使用docker pull和docker tag for tag in image.tags: - tasks.append(limited_task(semaphore, partial(docker_task, f"{image.source}:{tag}", f"{image.target}:{tag}"))) + tasks.append(limited_task(semaphore, partial(docker_sync_task, f"{image.source}:{tag}", f"{image.target}:{tag}"))) else: - tasks.append(limited_task(semaphore, partial(docker_task, image.source, image.target))) + tasks.append(limited_task(semaphore, partial(docker_sync_task, image.source, image.target))) results = await asyncio.gather(*tasks) failed_tasks = sum(1 for result in results if result is not None and result != 0)