ci(pre-commit): enforce presence of 'upload-time' field in uv.lock

Add a pre-commit hook to ensure all contributions use a uv.lock file
that contains the 'upload-time' field (older uv versions do not include that)

Refs: #2887
This commit is contained in:
Rebai Mohamed 2025-07-26 14:51:38 +01:00
parent 09abdb0a37
commit e99bf60288
2 changed files with 45 additions and 0 deletions

View file

@ -155,6 +155,14 @@ repos:
require_serial: true require_serial: true
files: ^.github/workflows/.*$ files: ^.github/workflows/.*$
- repo: local
hooks:
- id: check-uv-upload-time
name: Check upload-time in uv.lock
entry: python3 scripts/check_uv_upload_time.py
language: system
files: ^uv\.lock$
ci: ci:
autofix_commit_msg: 🎨 [pre-commit.ci] Auto format from pre-commit.com hooks autofix_commit_msg: 🎨 [pre-commit.ci] Auto format from pre-commit.com hooks
autoupdate_commit_msg: ⬆ [pre-commit.ci] pre-commit autoupdate autoupdate_commit_msg: ⬆ [pre-commit.ci] pre-commit autoupdate

View file

@ -0,0 +1,37 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.
import re
import sys
def check_upload_time_regex(file_content):
sdist_pattern = re.compile(r'sdist\s*=\s*\{[^}]*upload-time\s*=\s*".*?"[^}]*\}', re.DOTALL)
sdist_found = bool(sdist_pattern.search(file_content))
return sdist_found
def main():
try:
with open("uv.lock", encoding="utf-8") as f:
content = f.read()
except Exception as e:
print(f"Error reading uv.lock: {e}")
sys.exit(1)
if not check_upload_time_regex(content):
print(
"It looks like you're using an old version of uv. "
"The lock file does not include upload-time fields for the packages. "
"Please update uv and regenerate the lock file"
)
sys.exit(1)
sys.exit(0)
if __name__ == "__main__":
main()