From 05cf35a196f4b0e9d1a51ac4e5dde6de275d85b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Tue, 5 Nov 2024 14:02:52 +0100 Subject: [PATCH] feat: utilize uv CI cache This removes need to build binary wheels repeatedly. Fixes #2588 --- .github/workflows/bleeding.yml | 28 ++++++++++++++++++++++++++++ .github/workflows/dockerimage.yml | 28 ++++++++++++++++++++++++++++ Dockerfile | 10 +++++----- 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/.github/workflows/bleeding.yml b/.github/workflows/bleeding.yml index f879c4016..17fa3c95a 100644 --- a/.github/workflows/bleeding.yml +++ b/.github/workflows/bleeding.yml @@ -49,6 +49,20 @@ jobs: run: .github/bin/bleeding ${{needs.bleeding.outputs.weblate_sha}} ${{needs.bleeding.outputs.weblate_date}} - name: Configure Docker build run: .github/bin/get-buildx-args + - name: Cache + uses: actions/cache@v3 + id: cache + with: + path: uv-cache + key: uv-cache-${{ hashFiles('Dockerfile') }}-${{ matrix.architecture }} + - name: inject cache into docker + uses: reproducible-containers/buildkit-cache-dance@v3.1.0 + with: + cache-map: | + { + "uv-cache": "/.uv-cache" + } + skip-extraction: ${{ steps.cache.outputs.cache-hit }} - name: Build the Docker image run: .github/bin/docker-build @@ -80,6 +94,20 @@ jobs: run: .github/bin/bleeding ${{needs.bleeding.outputs.weblate_sha}} ${{needs.bleeding.outputs.weblate_date}} - name: Configure Docker build run: .github/bin/get-buildx-args + - name: Cache + uses: actions/cache@v3 + id: cache + with: + path: uv-cache + key: uv-cache-${{ hashFiles('Dockerfile') }}-${{ matrix.architecture }} + - name: inject cache into docker + uses: reproducible-containers/buildkit-cache-dance@v3.1.0 + with: + cache-map: | + { + "uv-cache": "/.uv-cache" + } + skip-extraction: ${{ steps.cache.outputs.cache-hit }} - name: Build the Docker image run: .github/bin/docker-build diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 58e025ba0..63291261b 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -35,6 +35,20 @@ jobs: version: v0.18.0 - name: Configure Docker build run: .github/bin/get-buildx-args + - name: Cache + uses: actions/cache@v3 + id: cache + with: + path: uv-cache + key: uv-cache-${{ hashFiles('Dockerfile') }}-${{ matrix.architecture }} + - name: inject cache into docker + uses: reproducible-containers/buildkit-cache-dance@v3.1.0 + with: + cache-map: | + { + "uv-cache": "/.uv-cache" + } + skip-extraction: ${{ steps.cache.outputs.cache-hit }} - name: Build the Docker image run: .github/bin/docker-build @@ -62,6 +76,20 @@ jobs: version: v0.18.0 - name: Configure Docker build run: .github/bin/get-buildx-args + - name: Cache + uses: actions/cache@v3 + id: cache + with: + path: uv-cache + key: uv-cache-${{ hashFiles('Dockerfile') }}-${{ matrix.architecture }} + - name: inject cache into docker + uses: reproducible-containers/buildkit-cache-dance@v3.1.0 + with: + cache-map: | + { + "uv-cache": "/.uv-cache" + } + skip-extraction: ${{ steps.cache.outputs.cache-hit }} - name: Build the Docker image run: .github/bin/docker-build diff --git a/Dockerfile b/Dockerfile index 1077f779f..05c0a4812 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,13 +11,13 @@ COPY --link requirements.txt patches /app/src/ # Install dependencies # hadolint ignore=DL3008,DL3013,SC2046,DL3003 -RUN \ - uv venv /app/venv \ +RUN --mount=type=cache,target=/.uv-cache \ + export UV_CACHE_DIR=/.uv-cache UV_LINK_MODE=copy \ + && uv venv /app/venv \ && . /app/venv/bin/activate \ && case "$WEBLATE_VERSION" in \ *+* ) \ uv pip install \ - --no-cache-dir \ --compile-bytecode \ -r /app/src/requirements.txt \ "https://github.com/translate/translate/archive/master.zip" \ @@ -26,12 +26,12 @@ RUN \ ;; \ * ) \ uv pip install \ - --no-cache-dir \ --compile-bytecode \ -r /app/src/requirements.txt \ "Weblate[$WEBLATE_EXTRAS]==$WEBLATE_VERSION" \ ;; \ - esac + esac \ + && uv cache prune --ci RUN /app/venv/bin/python -c 'from phply.phpparse import make_parser; make_parser()' RUN ln -s /app/venv/share/weblate/examples/ /app/