SERVER-107602 Move lint poetry lock to bazel run lint (#38999)

GitOrigin-RevId: 8cb267d093a5e92b07e91a6176d39f2deab41c0b
This commit is contained in:
Zac 2025-07-24 10:56:12 -07:00 committed by MongoDB Bot
parent 531c9cabf6
commit 0f12f16e00
4 changed files with 27 additions and 43 deletions

View File

@ -202,7 +202,7 @@ def run_rules_lint(bazel_bin: str, args: List[str]) -> bool:
return False return False
lint_all = "..." in args or "--all" in args or "//..." in args lint_all = "..." in args or "--all" in args or "//..." in args
files_to_format = args files_to_lint = args
if not lint_all and len([arg for arg in args if not arg.startswith("--")]) == 0: if not lint_all and len([arg for arg in args if not arg.startswith("--")]) == 0:
origin_branch = "origin/master" origin_branch = "origin/master"
for arg in args: for arg in args:
@ -221,34 +221,33 @@ def run_rules_lint(bazel_bin: str, args: List[str]) -> bool:
) )
lint_all = True lint_all = True
else: else:
files_to_format = [ files_to_lint = [
file file
for file in _get_files_changed_since_fork_point(origin_branch) for file in _get_files_changed_since_fork_point(origin_branch)
if file.endswith((".cpp", ".c", ".h", ".py", ".js", ".mjs", ".json")) if file.endswith((".cpp", ".c", ".h", ".py", ".js", ".mjs", ".json", ".lock", ".toml"))
] ]
# Default to linting everything in rules_lint if no path was passed in. # Default to linting everything in rules_lint if no path was passed in.
if len([arg for arg in args if not arg.startswith("--")]) == 0: if len([arg for arg in args if not arg.startswith("--")]) == 0:
args = ["//..."] + args args = ["//..."] + args
if lint_all or "sbom.json" in files_to_format: if lint_all or "sbom.json" in files_to_lint:
subprocess.run([bazel_bin, "run", "//buildscripts:sbom_linter"], check=True) subprocess.run([bazel_bin, "run", "//buildscripts:sbom_linter"], check=True)
if lint_all or any(file.endswith(".h") or file.endswith(".cpp") for file in files_to_format): if lint_all or any(file.endswith((".h", ".cpp")) for file in files_to_lint):
subprocess.run( subprocess.run(
[bazel_bin, "run", "//buildscripts:quickmongolint", "--", "lint"], check=True [bazel_bin, "run", "//buildscripts:quickmongolint", "--", "lint"], check=True
) )
if lint_all or any( if lint_all or any(
file.endswith(".cpp") file.endswith((".cpp", ".c", ".h", ".py", ".idl"))
or file.endswith(".c") for file in files_to_lint
or file.endswith(".h")
or file.endswith(".py")
or file.endswith(".idl")
for file in files_to_format
): ):
subprocess.run([bazel_bin, "run", "//buildscripts:errorcodes", "--", "--quiet"], check=True) subprocess.run([bazel_bin, "run", "//buildscripts:errorcodes", "--", "--quiet"], check=True)
if lint_all or "poetry.lock" in files_to_lint or "pyproject.toml" in files_to_lint:
subprocess.run([bazel_bin, "run", "//buildscripts:poetry_lock_check"], check=True)
fix = "" fix = ""
with tempfile.NamedTemporaryFile(delete=False) as buildevents: with tempfile.NamedTemporaryFile(delete=False) as buildevents:
buildevents_path = buildevents.name buildevents_path = buildevents.name

View File

@ -270,6 +270,18 @@ py_binary(
)], )],
) )
py_binary(
name = "poetry_lock_check",
srcs = ["poetry_lock_check.py"],
visibility = ["//visibility:public"],
deps = [
dependency(
"poetry",
group = "export",
),
],
)
# TODO(SERVER-105817): The following library is autogenerated, please split these out into individual python targets # TODO(SERVER-105817): The following library is autogenerated, please split these out into individual python targets
py_library( py_library(
name = "all_python_files", name = "all_python_files",

View File

@ -5,17 +5,20 @@ Check to make sure poetry.lock is synced with pyproject.toml.
Returns nonzero if poetry.lock and pyproject.toml are not synced Returns nonzero if poetry.lock and pyproject.toml are not synced
""" """
import os
import subprocess import subprocess
POETRY_LOCK_V200 = ( POETRY_LOCK_V200 = (
"""# This file is automatically @generated by Poetry 2.0.0 and should not be changed by hand.""" """# This file is automatically @generated by Poetry 2.0.0 and should not be changed by hand."""
) )
REPO_ROOT = os.environ.get("BUILD_WORKSPACE_DIRECTORY", ".")
# This has a great error message as part of the failure case # This has a great error message as part of the failure case
subprocess.run(["poetry", "check", "--lock"], check=True) subprocess.run(["python", "-m", "poetry", "check", "--lock"], check=True, cwd=REPO_ROOT)
# Check if the poetry lock file was generated with poetry 2.0.0 # Check if the poetry lock file was generated with poetry 2.0.0
with open("poetry.lock", "r") as poetry_lock: with open(f"{REPO_ROOT}/poetry.lock", "r") as poetry_lock:
if POETRY_LOCK_V200 not in poetry_lock.read(len(POETRY_LOCK_V200)): if POETRY_LOCK_V200 not in poetry_lock.read(len(POETRY_LOCK_V200)):
raise Exception("""Poetry lockfile was not generated by poetry 2.0.0. raise Exception("""Poetry lockfile was not generated by poetry 2.0.0.
Make sure to have poetry 2.0.0 installed when running poetry lock. Make sure to have poetry 2.0.0 installed when running poetry lock.

View File

@ -824,36 +824,6 @@ tasks:
- "--exclude" - "--exclude"
- "src/third_party/*" - "src/third_party/*"
# Confirm that the poetry.lock file is up to date with pyproject.toml
- name: lint_poetry_lock
tags:
[
"assigned_to_jira_team_devprod_build",
"development_critical_single_variant",
"lint",
]
commands:
- command: timeout.update
params:
# 20 mins
exec_timeout_secs: 1200
- func: "f_expansions_write"
- command: manifest.load
- func: "git get project and add git tag"
- func: "f_expansions_write"
- func: "kill processes"
- func: "cleanup environment"
- func: "set up venv"
- func: "upload pip requirements"
- command: subprocess.exec
type: test
params:
binary: bash
args:
- "src/evergreen/run_python_script_with_report.sh"
- "lint-poetry-lock"
- "evergreen/functions/poetry_lock_check.py"
- name: lint_pyright - name: lint_pyright
tags: tags:
[ [