# Copyright 2017 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# The following is experimental API and currently not intended for use outside this example.
load("@rules_python//python/uv/private:lock.bzl", "lock")  # buildifier: disable=bzl-visibility

licenses(["notice"])  # Apache 2.0

lock(
    name = "bzlmod_requirements_3_12",
    srcs = ["bzlmod/pyproject.toml"],
    out = "bzlmod/requirements_lock_3_12.txt",
    args = [
        "--emit-index-url",
        "--universal",
        "--python-version=3.12",
    ],
    python_version = "3.12",
)

lock(
    name = "bzlmod_requirements_3_12_windows",
    srcs = ["bzlmod/pyproject.toml"],
    out = "bzlmod/requirements_windows_3_12.txt",
    args = [
        "--emit-index-url",
        "--python-platform",
        "windows",
        "--python-version=3.12",
    ],
    python_version = "3.12",
)

lock(
    name = "bzlmod_requirements_3_13",
    srcs = ["bzlmod/pyproject.toml"],
    out = "bzlmod/requirements_lock_3_13.txt",
    args = [
        "--emit-index-url",
        "--universal",
        "--python-version=3.13",
    ],
    python_version = "3.13",
)

lock(
    name = "bzlmod_requirements_3_13_windows",
    srcs = ["bzlmod/pyproject.toml"],
    out = "bzlmod/requirements_windows_3_13.txt",
    args = [
        "--emit-index-url",
        "--python-platform",
        "windows",
        "--python-version=3.13",
    ],
    python_version = "3.13",
)

lock(
    name = "bzlmod_requirements_3_14",
    srcs = ["bzlmod/pyproject.toml"],
    out = "bzlmod/requirements_lock_3_14.txt",
    args = [
        "--emit-index-url",
        "--universal",
        "--python-version=3.14",
    ],
    python_version = "3.14",
)

lock(
    name = "bzlmod_requirements_3_14_windows",
    srcs = ["bzlmod/pyproject.toml"],
    out = "bzlmod/requirements_windows_3_14.txt",
    args = [
        "--emit-index-url",
        "--python-platform",
        "windows",
        "--python-version=3.14",
    ],
    python_version = "3.14",
)
