From f21d19b7d8468e9b751d7e99bdae1e868bd6f826 Mon Sep 17 00:00:00 2001 From: Steven Honson Date: Thu, 12 Sep 2024 01:45:10 +1000 Subject: [PATCH] Cache wheels --- .github/workflows/container.yml | 38 +++++++++++++++++++++++++++++++-- Dockerfile | 10 +++++++-- requirements.txt | 2 +- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index d7f19e3..65a494b 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -17,11 +17,25 @@ jobs: matrix: platform: [linux/amd64, linux/386, linux/arm64, linux/arm/v6, linux/arm/v7] steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Declare platform run: | platform=${{ matrix.platform }} echo "PLATFORM=${platform//\//-}" >> $GITHUB_ENV + - name: Cache wheels + uses: actions/cache@v4 + with: + path: ${{ github.workspace }}/wheels + key: wheels-${{ env.PLATFORM }}-${{ github.run_id }} + restore-keys: | + wheels-${{ env.PLATFORM }}- + + - name: List wheels + run: ls -lR ${{ github.workspace }}/wheels || true + - name: Setup QEMU uses: docker/setup-qemu-action@v3 @@ -41,19 +55,34 @@ jobs: with: images: ghcr.io/${{ github.repository }} - - name: Build images and push by digest + - name: Build stage id: build uses: docker/build-push-action@v6 with: + context: . platforms: ${{ matrix.platform }} + provenance: false + labels: ${{ steps.meta.outputs.labels }} + outputs: type=local,dest=/tmp/build-output + cache-to: type=local,dest=/tmp/build-cache,mode=max + target: build + + - name: Final stage and push by digest + id: final + uses: docker/build-push-action@v6 + with: + context: . + platforms: ${{ matrix.platform }} + provenance: false labels: ${{ steps.meta.outputs.labels }} outputs: type=image,name=ghcr.io/${{ github.repository }},push-by-digest=true,name-canonical=true,push=${{ github.event_name != 'pull_request' && 'true' || 'false' }} + cache-from: type=local,src=/tmp/build-cache - name: Export digest if: ${{ github.event_name != 'pull_request' }} run: | mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" + digest="${{ steps.final.outputs.digest }}" touch "/tmp/digests/${digest#sha256:}" - name: Upload digest @@ -65,6 +94,11 @@ jobs: if-no-files-found: error retention-days: 1 + - name: Move and list wheels + run: | + mv -f /tmp/build-output/root/.cache/pip/wheels ${{ github.workspace }}/ || true + ls -lR ${{ github.workspace }}/wheels || true + merge: name: Publish multi-platform image if: ${{ github.event_name != 'pull_request' }} diff --git a/Dockerfile b/Dockerfile index f76a7c1..d6d5e6d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,12 +12,18 @@ RUN apt-get update && \ libatlas-base-dev && \ rm -rf /var/lib/apt/lists/* +# Copy in existing wheels. +COPY wheel[s]/ /root/.cache/pip/wheels/ + +# No wheels might exist. +RUN mkdir -p /root/.cache/pip/wheels/ + # Copy in requirements.txt. COPY requirements.txt /root/chasemapper/requirements.txt # Install Python packages. -RUN pip3 --no-cache-dir install --user --no-warn-script-location \ - --ignore-installed -r /root/chasemapper/requirements.txt +RUN pip3 install --user --break-system-packages --no-warn-script-location \ + --ignore-installed -r /root/chasemapper/requirements.txt && exit 1 # Copy in chasemapper. COPY . /root/chasemapper diff --git a/requirements.txt b/requirements.txt index ab960b5..c2dca24 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ ---no-binary eccodes +eccodes cusfpredict flask flask-socketio