From 16d06eace6384f414187f5f7d5dc0697c9d4bd4e Mon Sep 17 00:00:00 2001 From: vincentsarago Date: Thu, 20 Aug 2026 15:34:08 +0200 Subject: [PATCH 1/2] refactor: use wolfi docker image --- Dockerfile | 59 +++++++++++++++++++++++++++--------------------- uv.lock | 66 +++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 78 insertions(+), 47 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1fe242f..3ebcf1f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,31 @@ +FROM cgr.dev/chainguard/wolfi-base:latest@sha256:003627df3c1e1bba0c4116afcddb314aca9594ee2328c7e876a8081a6c988b2e AS base + ARG PYTHON_VERSION=3.14 +ENV PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 + +# Install runtime dependencies. Versions deliberately unpinned: Wolfi rolls +# forward and garbage-collects old versions, so an "=" pin breaks the +# build within days. The guardrails are the version-scoped names plus the +# digest above. No pip: uv (below) installs everything. +# libstdc++ NOT optional: the rasterio/pyproj/duckdb manylinux wheels list +# libstdc++.so.6 in DT_NEEDED and auditwheel does not vendor it. +# bash, tzdata, curl parity with the old Debian base: /bin/sh is busybox, +# Wolfi ships no /usr/share/zoneinfo, curl is for in-pod debugging. +RUN apk add --no-cache \ + python-${PYTHON_VERSION} \ + libstdc++ bash tzdata curl libexpat1 + # uv as a pass-through stage rather than a direct COPY --from=: # Dependabot only parses FROM lines (dependabot/dependabot-core#5103), so this # keeps the version pinned *and* auto-updated by the docker ecosystem. FROM ghcr.io/astral-sh/uv:0.12.5@sha256:e85be844203885286c60ffad8a858d48afb6c5a5c237ca0e67f12e74b8f174b1 AS uv -FROM python:${PYTHON_VERSION} AS builder +# Build stage +FROM base AS builder + +ARG PYTHON_VERSION # Set build labels LABEL stage=builder @@ -13,22 +33,18 @@ LABEL org.opencontainers.image.source="https://github.com/developmentseed/titile LABEL org.opencontainers.image.description="TiTiler STAC API" LABEL org.opencontainers.image.licenses="MIT" -# Set environment variables -ENV PYTHONUNBUFFERED=1 \ - PYTHONDONTWRITEBYTECODE=1 - -# Install build dependencies -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - libexpat1 curl && \ - rm -rf /var/lib/apt/lists/* - # Install uv COPY --from=uv /uv /uvx /usr/local/bin/ # Configure uv-managed virtual environment +# UV_PYTHON: the apk python above, so the venv's interpreter symlinks resolve +# against the same path in the runtime stage +# UV_COMPILE_BYTECODE: .pyc at install time, as pip did, so cold starts +# don't pay the compile on first import ENV UV_LINK_MODE=copy \ UV_PROJECT_ENVIRONMENT=/opt/venv \ + UV_PYTHON=python${PYTHON_VERSION} \ + UV_COMPILE_BYTECODE=1 \ PATH="/opt/venv/bin:${PATH}" WORKDIR /tmp/app @@ -42,32 +58,23 @@ COPY titiler/ titiler/ RUN uv pip install --no-deps . # Runtime stage -FROM python:${PYTHON_VERSION}-slim +FROM base # Set runtime labels LABEL org.opencontainers.image.source="https://github.com/developmentseed/titiler-stacapi" LABEL org.opencontainers.image.description="TiTiler STAC API" LABEL org.opencontainers.image.licenses="MIT" -# Set environment variables -ENV PYTHONUNBUFFERED=1 \ - PYTHONDONTWRITEBYTECODE=1 \ - PATH="/opt/venv/bin:$PATH" - -# Install runtime dependencies -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - libexpat1 fonts-dejavu \ - curl && \ - rm -rf /var/lib/apt/lists/* +# The chart execs `command: ["uvicorn"]` — a bare binary, resolved against the +# image's PATH. +ENV PATH="/opt/venv/bin:${PATH}" # Copy virtual environment from builder COPY --from=builder /opt/venv /opt/venv -RUN groupadd -g 1000 user && \ - useradd -u 1000 -g user -s /bin/bash -m user +WORKDIR /tmp -USER user +USER nonroot ################################################### # For compatibility (might be removed at one point) diff --git a/uv.lock b/uv.lock index 0f499b9..34eb1af 100644 --- a/uv.lock +++ b/uv.lock @@ -583,32 +583,56 @@ wheels = [ [[package]] name = "color-operations" -version = "0.2.0" +version = "0.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, { name = "numpy", version = "2.5.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/49/d5/8daa1179809f0d8eab39bd83ce8131e84691eb6ba55f19b7b365a822fea3/color_operations-0.2.0.tar.gz", hash = "sha256:f1bff5cff5992ec7d240f1979320a981f2e9f77d983e9298291e02f3ffaac9bf", size = 18042, upload-time = "2025-03-27T08:42:14.222Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/18/ed195e388f55ef46b89cee994a5dc7c36a6c76fd3c40ed1960b86dcba4ba/color_operations-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6fb9b74b9dc33832d08afc8f71ec4161531f48e8bf105d0412e9a718904c5369", size = 86416, upload-time = "2025-03-27T09:18:16.848Z" }, - { url = "https://files.pythonhosted.org/packages/32/60/a9955ab7077309241d47f0b88d43b993abd49b753ed69449b8f2ced7c30c/color_operations-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:05838eee03df5304e014de76bd3ff19974964fc57dad8ce52cf56a9a62f5d572", size = 50869, upload-time = "2025-03-27T09:18:17.761Z" }, - { url = "https://files.pythonhosted.org/packages/b5/79/3fb8aee10ceb0278bd256eee35dd9fd9607370e4bb75a75a56173fb04394/color_operations-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5222cf35ca089637d3424eb42a0c9bfa25aa91dbf771759f6c8003b09b5134cc", size = 49243, upload-time = "2025-03-27T09:18:18.814Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b5/1783a6834d10960a13c18b6a34f27597052510142ce89125662276184f99/color_operations-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b807de37a40ee1d6fa91d122b0afe1df5f17ee60b9ef1bd38e8c134ffb3070d", size = 189098, upload-time = "2025-03-27T09:18:20.093Z" }, - { url = "https://files.pythonhosted.org/packages/91/d8/c33469d020f135414a5cd936bd31f4d3d2e3db557df94847ed59cf99a422/color_operations-0.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:780685c51e103f378c7bdffbafdd3e24f89b6dcd64079b7d6b3fbab7a23a06bf", size = 195175, upload-time = "2025-03-27T09:18:21.577Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b6/1dbff90606551f6e802fbabb4e422d3261552a7d8b7a5f4e00f5727e7525/color_operations-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:676812cd90ef37e8ca214c376d0a43f223f2717bf37d0b513a4a57c2e1fcfc62", size = 133689, upload-time = "2025-03-27T09:18:22.696Z" }, - { url = "https://files.pythonhosted.org/packages/50/69/e8c09a930c45cbdf6d3cf84e32a6e53a44a200c447bed8ddf94a75a3f372/color_operations-0.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:98a3348d1dab6c5fdd79a9eeb90cd81bf6f5bf6ca65a24414460d90be76c2c37", size = 86112, upload-time = "2025-03-27T09:18:23.824Z" }, - { url = "https://files.pythonhosted.org/packages/72/eb/d66611577d721318d5a70dcfcd8d26194cfa14e958bd14a02631c1e712f2/color_operations-0.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:55a10f40ca59505a260e0f8b1ee392a2c049314177d3858ae477e8cc5daff07d", size = 50735, upload-time = "2025-03-27T09:18:24.727Z" }, - { url = "https://files.pythonhosted.org/packages/b1/57/13dbcc9913967489851f0b7d1c8d27840abe86e02d6e2e133d16db16d0d5/color_operations-0.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3d791eee208f208da9428f38ec9cad80bae4fa55bcde2af1b6d7e939d4f298d7", size = 49066, upload-time = "2025-03-27T09:18:26.084Z" }, - { url = "https://files.pythonhosted.org/packages/ab/47/b143e2f0ef04cb3e7e4b7236f8a572449ea7340860baf88374ed5ac4f358/color_operations-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4061484091fab17f9cd71620ee10ae5902ae643fddd18dc01f1ba85636d9a0e1", size = 198667, upload-time = "2025-03-27T09:18:27Z" }, - { url = "https://files.pythonhosted.org/packages/e4/f4/e754800604d6449d895d7118b346bc2f3c5176cb759934b245aae530138d/color_operations-0.2.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dfba9c174f3bbd425da388fab22a9670500711d0982e6f82e9999792542d3bf", size = 204259, upload-time = "2025-03-27T09:18:28.096Z" }, - { url = "https://files.pythonhosted.org/packages/56/45/fbd35c3ebb1a2d85339d70262739502f99447aab76220a7126adcb3722f9/color_operations-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7c7fea5d7d0e7dd8d469e93e1bdd29c03afb63cebfcb02747104e482be85ea97", size = 133391, upload-time = "2025-03-27T09:18:29.26Z" }, - { url = "https://files.pythonhosted.org/packages/b4/93/fdd2e32eb1dd8929d36aabf8703adb9f438cfc79eb563b23140d0dd42475/color_operations-0.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fda310b57befc0aa3a02bf3863ff62adfedf7781ea8aab071887c5e82e5ab6c8", size = 84609, upload-time = "2025-03-27T09:18:30.902Z" }, - { url = "https://files.pythonhosted.org/packages/e2/c4/abdcc64288c8249f5f312dd7b8ff0ccddc31ddf2d776e13796e3464dcc21/color_operations-0.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bf3218834d19e4d195885cb0fbf7b1f98db2f4fc6dd43ca5d035655d7ad3b6f7", size = 50084, upload-time = "2025-03-27T09:18:32.294Z" }, - { url = "https://files.pythonhosted.org/packages/bb/75/5ce7c78e44f0660713e0b398620baa87d4ef1d98ec8ae42da2153afaf8d0/color_operations-0.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cee7d7da762f04110f15615ebd894820db38ab2aa262a940178a3d41350d2a0d", size = 48205, upload-time = "2025-03-27T09:18:33.22Z" }, - { url = "https://files.pythonhosted.org/packages/28/54/eeffafffc815a8bb550d4ac1ae5a7bc86df0891e505b78c37a575ca35cb3/color_operations-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d2eb9dd747c081a801fc3b831bdf28f5115857934b00c4950c9ceecfb90d91f", size = 193013, upload-time = "2025-03-27T09:18:34.191Z" }, - { url = "https://files.pythonhosted.org/packages/7f/87/835e83190dd00e2737162f9d66e5a1afcff2b6fb580b6545760749a2e0ec/color_operations-0.2.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fcca6e5593f05cf164d1a302c91c012acab2edf5a4d38c6cc0d4bc7b62388e7", size = 198605, upload-time = "2025-03-27T09:18:35.794Z" }, - { url = "https://files.pythonhosted.org/packages/60/a4/b1a27ad6490fd316a2e6ba4d05c8dd9f5d867414707d1cd18dcfdb3dbe1f/color_operations-0.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:317d11b425ab802e1c343d8d1356f538e102d6ca57e435b7386593c69f630ac5", size = 132514, upload-time = "2025-03-27T09:18:37.22Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/cc/78/374bd6414bebe42e85b5c20471980d165afd31dd44ef0139742667110dcd/color_operations-0.4.0.tar.gz", hash = "sha256:456b21e5784c7c9ee2ddf3c6041e66a501f173d286e3e088779cf716fd1b321d", size = 15389, upload-time = "2026-08-20T12:50:20.795Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/d7/7849d1e337215a2052ac003c45fdfde64cc3b4471f7690d541fe0b6cbd74/color_operations-0.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:067b070021e2deb32f25606b2e4b609acf21136a91eb866852c38b7f4bc74e6c", size = 88093, upload-time = "2026-08-20T12:48:55.358Z" }, + { url = "https://files.pythonhosted.org/packages/49/a1/8b20e698ce369019e8d88fd9a0c2e1a49f94acea233825b3f9698442f8f9/color_operations-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44157038608f7b48b7550e928bf0f63626500737988a5b5a97bb7f288d2ef986", size = 50734, upload-time = "2026-08-20T12:48:57.228Z" }, + { url = "https://files.pythonhosted.org/packages/5b/08/3205e288fc3b52ccbdf24852ca3b7b57e7916054f198a7fa13bea39873a5/color_operations-0.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af3825e7d36a2b8519a0230c658d2b515d29d4db719526ffb5da5711ed7b95c2", size = 50897, upload-time = "2026-08-20T12:48:59.603Z" }, + { url = "https://files.pythonhosted.org/packages/11/a9/3e8e0d982b14bc39e71e6fa4e59c152ecaff2021aa2c97be184e2a30bfde/color_operations-0.4.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:89bcdbec83a1d8e0f650ef47e2246896c700e8e2abebce5cc9a57ac79fa6d686", size = 197709, upload-time = "2026-08-20T12:49:01.854Z" }, + { url = "https://files.pythonhosted.org/packages/f8/df/b1da30ce972593e3b1b0b1b02c8cef83a6e0f817e13fc36d4c5cdc9a4c74/color_operations-0.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8d746cce07a4bf881f2a778d2b0cdef58aa366b1458d6a765ab085fb21ec7074", size = 194226, upload-time = "2026-08-20T12:49:04.664Z" }, + { url = "https://files.pythonhosted.org/packages/98/d1/d564a77efaca119e9e5640b732b6da5087c800ff210bf574000f6ea84aca/color_operations-0.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:09ab6d4d7d472be02423d1706c368630b10079cb1b4299d753c85abc0c01ecd3", size = 51413, upload-time = "2026-08-20T12:49:06.503Z" }, + { url = "https://files.pythonhosted.org/packages/72/c3/7b67e05de2be8c08cbf0efe0e94412355f3d8a0dbc5a5334e8fb43f6d61b/color_operations-0.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:43c206fad4793e5d9d6e85a3485c929668c345977722c9b2e66611bb244cbc23", size = 162467, upload-time = "2026-08-20T12:49:08.826Z" }, + { url = "https://files.pythonhosted.org/packages/10/fb/28c295a5241246edc65dcc3718b6d1801e2f1fee61a169fd2a0fabc4c0d8/color_operations-0.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8ade5792c3945a9d3e1bd92023f6e2a0a43a72a9e35914eedb6ce7d239c7c076", size = 125134, upload-time = "2026-08-20T12:49:10.714Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b9/18bb714c3dbb21bd05f7c4024dab81ac2bc4f27e7f7fd1612bfc193bcf11/color_operations-0.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3877b99daa03455e62684e6ec1ff517b6bad25cc8255487606469406846a5649", size = 125026, upload-time = "2026-08-20T12:49:13.108Z" }, + { url = "https://files.pythonhosted.org/packages/4c/48/9828919153dabbf65c1de23d9c27d701dd27ca2ab37009082ee3d45fa624/color_operations-0.4.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ff209fecec60e87e2f7d7cabae141ce16c94adc24bc0bb0d0df7c6217e8cd71c", size = 399537, upload-time = "2026-08-20T12:49:16.209Z" }, + { url = "https://files.pythonhosted.org/packages/4c/7f/57c4b3d2295bf972d198183e51dab9d17221e7cd7d1f50e58533fb670ca4/color_operations-0.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:889888537019da35b3f57cf35eabdd2cbfc897a368128b18e146f02e5af8e441", size = 390807, upload-time = "2026-08-20T12:49:17.812Z" }, + { url = "https://files.pythonhosted.org/packages/a7/86/02f931acca2e6d94a8ba343d69bab934cd47eeea23a1abc8a6ce31b2ab32/color_operations-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:72f3a77e2f444bae7f8a9863b95e4443aabd6925855f68c9453d22b376b3eed7", size = 89464, upload-time = "2026-08-20T12:49:19.961Z" }, + { url = "https://files.pythonhosted.org/packages/16/46/53c75a4fba7cc6bbe8145df0faf665a02f47e8647d9f8098ecf4613d4854/color_operations-0.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1f7de6295e219e0565679e6c895b6f531ac5e32247d91f1e909eca8201fef713", size = 235449, upload-time = "2026-08-20T12:49:21.747Z" }, + { url = "https://files.pythonhosted.org/packages/58/ca/d15464094004ea00ecc9b21c567886ed96cf3e520e7a55679e13229e53c1/color_operations-0.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:af008d021b205b4131512f4be6b1207e4bcebeb1533c5b5b8cedb3b033b5cf11", size = 198885, upload-time = "2026-08-20T12:49:24.458Z" }, + { url = "https://files.pythonhosted.org/packages/e0/06/8654c05640238cc9d8669fc75635da28034562113417ea5b3851cbf5c97b/color_operations-0.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b338111879f071a98af53cdf976b6882506964c74e8d1179fb8bbd00fa1268c7", size = 198531, upload-time = "2026-08-20T12:49:26.299Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b2/3c63227d377ddd12d0df41f373282c8e204ffae997bb3fcf54bb3d4e5930/color_operations-0.4.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:43de8b6c80467569713dc4ef8dbcdf4d2f94789391ff9a9accb7c3d1b74a42c5", size = 593096, upload-time = "2026-08-20T12:49:28.803Z" }, + { url = "https://files.pythonhosted.org/packages/07/98/75ac6f8c84bc141d831fd800d0d74ea23c3899978c109e53a72c6a103e6a/color_operations-0.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b7516e4cd2c4029c77a0fe93f5edb4a1309e87b2de6411293964fabade8ff771", size = 579022, upload-time = "2026-08-20T12:49:31.009Z" }, + { url = "https://files.pythonhosted.org/packages/a7/7e/f0fe9e02ba7a0cb67db68f939a6ecbb1bd00495f4e98f41d4c64c8a5f36e/color_operations-0.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:6ad9cdb4fd79f7b4160071bb5db553c6f7b585da7ed69d1cb920d471a91cc147", size = 126633, upload-time = "2026-08-20T12:49:33.618Z" }, + { url = "https://files.pythonhosted.org/packages/13/84/79f349c15ae50b086ccbc94f59ecdbff57b444d2f39528fb5839679411be/color_operations-0.4.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:ca0de69ee368140b77b45c819b9f8d07dab665302fab2404e3e3a05c6383dce0", size = 308668, upload-time = "2026-08-20T12:49:35.758Z" }, + { url = "https://files.pythonhosted.org/packages/e2/35/2e3f7d1154fd97cfd85d4a8371909135f8e653beb4db47aae44062e4f131/color_operations-0.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:246050f58c86dd3cc4504fb8a73777fc4e04c6b90007cbb31f8d1d382c013624", size = 271944, upload-time = "2026-08-20T12:49:37.807Z" }, + { url = "https://files.pythonhosted.org/packages/52/28/2b2a47233549140a9485221871de65b32cd5bc41e3565ba0a77c9709df16/color_operations-0.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c9f9d63143f69776e468b133da648b51dff5027b5eda5b67e48ecdaa3a13c91b", size = 271699, upload-time = "2026-08-20T12:49:39.837Z" }, + { url = "https://files.pythonhosted.org/packages/d7/6e/8c3b86e96248f32c3c40b2f4157fb78a440ccc040ad316ca2003e043cba9/color_operations-0.4.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f2493d4cb1a64b85825b3cddf6c99f68810f4345d4a5344e8b0c6c79e5a90388", size = 784847, upload-time = "2026-08-20T12:49:42.317Z" }, + { url = "https://files.pythonhosted.org/packages/93/bd/561c3cb27229f5056aff1659db79c9f8cc92b4333aa3606478d1eb1e74e7/color_operations-0.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fa16550d9d64d5559d0b283f0d107b040f3236ecf43efdd7fa303da67c02fbef", size = 766903, upload-time = "2026-08-20T12:49:44.689Z" }, + { url = "https://files.pythonhosted.org/packages/9f/73/83f4aa5029f12eae8f5636ea11290ee09fae0c2b7f73df1b4f7fc7a33fc3/color_operations-0.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:78c0f73268e89f4317146bc428dcc1eb853a65f56ed4bd1ad615fa7d2a1582bc", size = 169335, upload-time = "2026-08-20T12:49:46.335Z" }, + { url = "https://files.pythonhosted.org/packages/36/b0/21e5cbccde99de01a1367f2cc075a826303d9ce5637320861fdec4e2c6b9/color_operations-0.4.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:f5f0f1985d23aa28cf31600b39509ee34bf2873340f3f2a9901014ff0461418e", size = 387522, upload-time = "2026-08-20T12:49:48.066Z" }, + { url = "https://files.pythonhosted.org/packages/16/35/108146a505680f80a7caf7ab4c976bc87e70ecaee293fea5dcb9918f1a0a/color_operations-0.4.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:02ea02dc3b7071649c55a69a0cf48409124cea910e408408f8cfc08dcb41350b", size = 347820, upload-time = "2026-08-20T12:49:49.677Z" }, + { url = "https://files.pythonhosted.org/packages/4f/99/e61081050d4ab6099f5b1ec74ceccd96204a799d1145b8fa2817cd661588/color_operations-0.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a5b9f71d03350a37007ecb1edb6c89e5c6b0be8b64cd9e803aae345cc08bf0f1", size = 348192, upload-time = "2026-08-20T12:49:51.538Z" }, + { url = "https://files.pythonhosted.org/packages/8d/5c/b4acdb7acf862d457a7ecde6792177343163e894c2ccdc097953c8f64bb4/color_operations-0.4.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec566b17a0ef16ec815b0bbbbcb9b9763a3ea43edae34f89a9e6c6443aa2f47d", size = 1015154, upload-time = "2026-08-20T12:49:54.313Z" }, + { url = "https://files.pythonhosted.org/packages/ad/47/cca05232b9291e24b094ab27b9effc7d5253d0365bf8a623738e0317c48a/color_operations-0.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:146cb2be40bf8506364338556cf244d1adeb447f424522405658470206ba9dd0", size = 997685, upload-time = "2026-08-20T12:49:56.889Z" }, + { url = "https://files.pythonhosted.org/packages/ee/e1/1052ac6b51e88ee83c8f7a88db4220944cb394ad8a08d888396459e681e3/color_operations-0.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:c3dace76c501e5f4e78a2e634791c8e906205d0b93a32d2a0091a3328e6385ad", size = 212843, upload-time = "2026-08-20T12:49:58.425Z" }, + { url = "https://files.pythonhosted.org/packages/2b/5b/244184c2243a47be3b854c13d26a7e697976660ced7eae7fc1aa2d0654f4/color_operations-0.4.0-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:31da2d8e2d10ebd9624672b89e959b76ebf810fe055d6068eb7567315d0c3fff", size = 460806, upload-time = "2026-08-20T12:50:00.316Z" }, + { url = "https://files.pythonhosted.org/packages/9a/45/cd132bdf78db28f4bd623eaf04b49cc1316f8ad12548d68263cd956f2af2/color_operations-0.4.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:07494e4713cf2ba13192552a0eca8a4632eebbb759b0dba7d14989ed4f7a5bc8", size = 424068, upload-time = "2026-08-20T12:50:01.732Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e9/7958f4e197bc73a76678609bc94243f48bdcc97ef13860e76886b6694bdb/color_operations-0.4.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:aa16971aea0956af37b41c6a7eca64c4c600c7018bcf1b9913316ca8ac426ff1", size = 423802, upload-time = "2026-08-20T12:50:03.543Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1e/80e63fbb0137733bfa9b9661762a94dcadcf3708f9345947126071c166cb/color_operations-0.4.0-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d5cc39dc3452b2f99d4e925b073e762180a55387c2a30ff20ffcc3afc116747", size = 1207365, upload-time = "2026-08-20T12:50:05.641Z" }, + { url = "https://files.pythonhosted.org/packages/82/a1/11ee8bd1f481096a8faf6bf24296a44a867ad53c6d6c5aaab9e03bb16415/color_operations-0.4.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46edee7e3936da02606cc67b53d4c610c73f38da9b58613aefcc1192e07dfb62", size = 1186354, upload-time = "2026-08-20T12:50:07.511Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a4/4e974e2691adb73f27945b49efb7286e741533b85fdf03236185b1e74a60/color_operations-0.4.0-cp315-cp315-win_amd64.whl", hash = "sha256:4f75b2c30b0faf9a9e348e41f940305792e08cd8a9a5025acf5da9b5ca8b45fa", size = 251380, upload-time = "2026-08-20T12:50:08.996Z" }, + { url = "https://files.pythonhosted.org/packages/64/63/32260d7ac39bd394b59c471287a58fb0939b5e064fce12f9e3c69fcf6b05/color_operations-0.4.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:6b02c94792661d97b675821ad7a721a20d08802ac890fb86a5b6c6421eef41a1", size = 539440, upload-time = "2026-08-20T12:50:10.448Z" }, + { url = "https://files.pythonhosted.org/packages/7b/01/55eeae700cb4575ebc8a2afac9a2f8c4ab3e6c1d8acb665080023d733460/color_operations-0.4.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:44a6f659402983450ee44a16527cf0ea7e935c646f43a1e4e3fd3a0d07ffab9f", size = 499785, upload-time = "2026-08-20T12:50:11.964Z" }, + { url = "https://files.pythonhosted.org/packages/3a/32/bee764d8bf4476a8ccef1f5ce0ea9204813f7dd4fe05d1fc246369813b97/color_operations-0.4.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:7f43b5abfdfa8d26c78e91e752365c4ad787a7a8d0feea4dab3b1abc3833977c", size = 500243, upload-time = "2026-08-20T12:50:13.734Z" }, + { url = "https://files.pythonhosted.org/packages/f3/20/e26b85fdc8293f57b5f810e1721f5e55c77acac77ee570b1e1f0ccb55263/color_operations-0.4.0-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4a6ffa7198373598e19ca64b126138ea0ff76a3a90905074be861a279b8a7a35", size = 1436277, upload-time = "2026-08-20T12:50:15.904Z" }, + { url = "https://files.pythonhosted.org/packages/2a/24/e54078247359c168057c532b26e7f81c6ce36c426afd7f0ee1bf4fddd1ef/color_operations-0.4.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5a847b91686e8fa6ba3098752539c6afc57b9fb9f7ff25cd9c1ec6a449d3ecf", size = 1416078, upload-time = "2026-08-20T12:50:17.545Z" }, + { url = "https://files.pythonhosted.org/packages/f0/62/de415245e5e612027e25b9764c6b33ed05ad12468bf6512bc17cfd332264/color_operations-0.4.0-cp315-cp315t-win_amd64.whl", hash = "sha256:093ac83e6a490d54280fb8e7ba7318b003cedc9af2aafe54e38220e6433455df", size = 294711, upload-time = "2026-08-20T12:50:19.358Z" }, ] [[package]] From d3b2e29ec98fca3e19fdfc65240d9e93fbc8e845 Mon Sep 17 00:00:00 2001 From: vincentsarago Date: Fri, 21 Aug 2026 08:55:37 +0200 Subject: [PATCH 2/2] ci: allow benchmark to comment --- .github/workflows/benchmark.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 98bad23..7b77fb3 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -25,7 +25,8 @@ jobs: benchmark: runs-on: ubuntu-latest permissions: - contents: write + contents: write # Push benchmark results to gh-benchmarks branch + pull-requests: write # Leave PR comments when benchmark regressions exceed alert threshold env: PGSTAC_VERSION: '0.9.11' steps: