From 4d4eda13ff4b6f3afe880349b7e41f0cd673867d Mon Sep 17 00:00:00 2001 From: Marly Salazar Date: Tue, 1 Sep 2026 16:57:38 -0700 Subject: [PATCH] fix(ci): setting all the github action jobs to run on the edera runners --- .dockerignore | 1 + .github/workflows/buildenv-diff.yml | 4 +- .github/workflows/buildenv.yml | 8 +- .github/workflows/digestabot.yml | 4 +- .github/workflows/lint.yml | 13 ++- .github/workflows/matrix.yml | 23 +++-- .github/workflows/refresh-nvidia.yml | 4 +- .gitignore | 1 + .python-version | 1 + hack/build/activate-env.sh | 5 +- hack/build/common.sh | 2 +- hack/build/docker-setup.py | 2 +- hack/build/generate-docker-script.py | 3 +- hack/build/generate-docker-script.sh | 3 +- hack/build/generate-matrix.sh | 2 +- hack/build/install-matrix-deps.sh | 2 +- hack/code/format.sh | 4 +- pyproject.toml | 28 ++++++ uv.lock | 138 +++++++++++++++++++++++++++ 19 files changed, 222 insertions(+), 26 deletions(-) create mode 100644 .python-version create mode 100644 pyproject.toml create mode 100644 uv.lock diff --git a/.dockerignore b/.dockerignore index cdbca35e..5b2742a9 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,3 +11,4 @@ /matrix.json /docker.sh **/__pycache__/** +/.venv \ No newline at end of file diff --git a/.github/workflows/buildenv-diff.yml b/.github/workflows/buildenv-diff.yml index c9f9c664..06c743c6 100644 --- a/.github/workflows/buildenv-diff.yml +++ b/.github/workflows/buildenv-diff.yml @@ -13,7 +13,9 @@ permissions: jobs: diff: name: package diff - runs-on: ubuntu-latest + runs-on: + group: Self Hosted + labels: edera-24 steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1 diff --git a/.github/workflows/buildenv.yml b/.github/workflows/buildenv.yml index bd05b517..02e213f3 100644 --- a/.github/workflows/buildenv.yml +++ b/.github/workflows/buildenv.yml @@ -35,7 +35,9 @@ jobs: - arch: arm64 platform: linux/arm64 runner: ubuntu-24.04-arm - runs-on: "${{ matrix.runner }}" + runs-on: + group: Self Hosted + labels: edera-24 steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1 @@ -84,7 +86,9 @@ jobs: merge: name: merge and publish needs: build - runs-on: ubuntu-latest + runs-on: + group: Self Hosted + labels: edera-24 steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1 diff --git a/.github/workflows/digestabot.yml b/.github/workflows/digestabot.yml index e25ddca7..789d048f 100644 --- a/.github/workflows/digestabot.yml +++ b/.github/workflows/digestabot.yml @@ -17,7 +17,9 @@ permissions: jobs: image-update: name: Image digest update - runs-on: ubuntu-latest + runs-on: + group: Self Hosted + labels: edera-24 permissions: contents: write # to push the updates diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 703c8ce4..f84036e2 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -11,11 +11,13 @@ concurrency: cancel-in-progress: true jobs: format: - runs-on: ubuntu-latest + runs-on: + group: Self Hosted + labels: edera-24 env: SHFMT_VERSION: "3.12.0" - BLACK_VERSION: "26.5.1" SHELLCHECK_VERSION: "0.11.0" + UV_PYTHON_INSTALL_DIR: "/opt/uv/python" steps: - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 @@ -29,11 +31,14 @@ jobs: chmod +x "${HOME}/.local/bin/shfmt" curl -sSfL "https://github.com/koalaman/shellcheck/releases/download/v${SHELLCHECK_VERSION}/shellcheck-v${SHELLCHECK_VERSION}.linux.x86_64.tar.xz" | tar -xJ -C /tmp install -m755 "/tmp/shellcheck-v${SHELLCHECK_VERSION}/shellcheck" "${HOME}/.local/bin/shellcheck" - pipx install "black==${BLACK_VERSION}" + - name: Install the latest version of uv + uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 + with: + python-version: "3.14" - name: Show versions run: | shfmt --version - black --version + uv tool run black --version shellcheck --version - name: Check formatting run: ./hack/code/format.sh --check diff --git a/.github/workflows/matrix.yml b/.github/workflows/matrix.yml index b6360573..20f4e5e3 100644 --- a/.github/workflows/matrix.yml +++ b/.github/workflows/matrix.yml @@ -19,7 +19,9 @@ concurrency: jobs: matrix: name: matrix - runs-on: ubuntu-latest + runs-on: + group: Self Hosted + labels: edera-24 steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1 @@ -33,7 +35,7 @@ jobs: - name: install dependencies run: ./hack/build/install-matrix-deps.sh - name: generate matrix - run: 'PATH="${HOME}/go/bin:${PATH}" ./hack/build/generate-matrix.sh "${{ inputs.spec }}"' + run: './hack/build/generate-matrix.sh "${{ inputs.spec }}"' - name: upload matrix uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: @@ -60,7 +62,9 @@ jobs: strategy: fail-fast: false matrix: ${{ fromJSON(needs.matrix.outputs.builds) }} - runs-on: "${{ matrix.builds.runner }}" + runs-on: + group: Self Hosted + labels: edera-24 env: KERNEL_PUBLISH: "${{ inputs.publish }}" KERNEL_VERSION: "${{ matrix.builds.version }}" @@ -70,6 +74,7 @@ jobs: KERNEL_FLAVOR: "${{ matrix.builds.flavor }}" KERNEL_TAGS: "${{ join(matrix.builds.tags, ',') }}" KERNEL_ARCH: "${{ matrix.builds.arch }}" + UV_PYTHON_INSTALL_DIR: "/opt/uv/python" steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1 @@ -92,6 +97,10 @@ jobs: submodules: recursive - name: install cosign uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2 + - name: Install the latest version of uv + uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 + with: + python-version: "3.14" - name: prepare scratch dir # Some runner generations carry a secondary temp disk at /mnt; its # size varies by VM SKU and is not reliably documented, so route the @@ -119,7 +128,7 @@ jobs: echo "keeping build trees on / (${ROOT_AVAIL}K avail vs ${MNT_AVAIL}K on /mnt)" fi - name: docker setup linux-kernel-oci - run: sudo python3 ./hack/build/docker-setup.py + run: sudo uv run ./hack/build/docker-setup.py - name: docker setup buildx uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: docker login ghcr.io @@ -177,7 +186,9 @@ jobs: strategy: fail-fast: false matrix: ${{ fromJSON(needs.matrix.outputs.merges) }} - runs-on: ubuntu-latest + runs-on: + group: Self Hosted + labels: edera-24 env: KERNEL_PUBLISH: "${{ inputs.publish }}" KERNEL_VERSION: "${{ matrix.merges.version }}" @@ -198,7 +209,7 @@ jobs: with: python-version: '3.13' - name: install python deps - run: pip3 install -r requirements.txt + run: uv sync - name: install cosign uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2 - name: docker setup buildx diff --git a/.github/workflows/refresh-nvidia.yml b/.github/workflows/refresh-nvidia.yml index 03a1fde3..17b1e237 100644 --- a/.github/workflows/refresh-nvidia.yml +++ b/.github/workflows/refresh-nvidia.yml @@ -10,7 +10,9 @@ permissions: jobs: refresh: name: Open PR if NVIDIA versions changed - runs-on: ubuntu-latest + runs-on: + group: Self Hosted + labels: edera-24 steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1 diff --git a/.gitignore b/.gitignore index 5beb153e..67f24e98 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ /matrix.json /docker.sh **/__pycache__/** +/.venv \ No newline at end of file diff --git a/.python-version b/.python-version new file mode 100644 index 00000000..a128d5c0 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.14.7 diff --git a/hack/build/activate-env.sh b/hack/build/activate-env.sh index 282b519a..9bb19d91 100755 --- a/hack/build/activate-env.sh +++ b/hack/build/activate-env.sh @@ -7,12 +7,11 @@ unset REAL_SCRIPT activate_env() { if [ ! -d "venv" ]; then - python3 -m venv venv - pip install --upgrade pip + uv venv venv fi # shellcheck source=/dev/null # venv is created at runtime, not present at lint time . venv/bin/activate - pip3 install -qq -r requirements.txt + uv sync } activate_env diff --git a/hack/build/common.sh b/hack/build/common.sh index 73afe60f..0c813975 100644 --- a/hack/build/common.sh +++ b/hack/build/common.sh @@ -77,7 +77,7 @@ if [ ! -f "${KERNEL_SRC}/Makefile" ]; then rm "${KERNEL_SRC}.txz" fi - python3 "hack/build/patchlist.py" "${KERNEL_VERSION}" "${KERNEL_FLAVOR}" | while read -r PATCH_NAME; do + uv run "hack/build/patchlist.py" "${KERNEL_VERSION}" "${KERNEL_FLAVOR}" | while read -r PATCH_NAME; do cd "${KERNEL_SRC}" if [ "${KERNEL_SRC_IS_TAR}" = "1" ]; then patch --verbose -p1 <"${KERNEL_DIR}/${PATCH_NAME}" diff --git a/hack/build/docker-setup.py b/hack/build/docker-setup.py index eff93732..4c97cd17 100644 --- a/hack/build/docker-setup.py +++ b/hack/build/docker-setup.py @@ -18,4 +18,4 @@ docker_daemon_text += "\n" docker_daemon_path.write_text(docker_daemon_text) -os.execve("/usr/bin/systemctl", ["systemctl", "restart", "docker"], env=os.environ) +# os.execve("/usr/bin/pkill", ["-f", "dockerd"], env=os.environ) diff --git a/hack/build/generate-docker-script.py b/hack/build/generate-docker-script.py index 836140a7..d6f9c5a6 100644 --- a/hack/build/generate-docker-script.py +++ b/hack/build/generate-docker-script.py @@ -327,7 +327,8 @@ def docker_build( image_build_command, "stage=build image=%s arch=%s" % (image_root, archs[0]) ) record_command = [ - "python3", + "uv", + "run", "hack/build/record-digest.py", quoted(image_root), quoted(metadata_file), diff --git a/hack/build/generate-docker-script.sh b/hack/build/generate-docker-script.sh index 8403fdbc..c835b613 100755 --- a/hack/build/generate-docker-script.sh +++ b/hack/build/generate-docker-script.sh @@ -3,4 +3,5 @@ set -e cd "$(dirname "${0}")/../.." -python3 "$(dirname "${0}")/generate-docker-script.py" "${@}" +ls -al .venv/bin/ +uv run --link-mode=copy "$(dirname "${0}")/generate-docker-script.py" "${@}" diff --git a/hack/build/generate-matrix.sh b/hack/build/generate-matrix.sh index e4e1221a..de395786 100755 --- a/hack/build/generate-matrix.sh +++ b/hack/build/generate-matrix.sh @@ -3,4 +3,4 @@ set -e cd "$(dirname "${0}")/../.." -python3 "$(dirname "${0}")/generate-matrix.py" "${@}" +uv run "$(dirname "${0}")/generate-matrix.py" "${@}" diff --git a/hack/build/install-matrix-deps.sh b/hack/build/install-matrix-deps.sh index 0d89709d..17905523 100755 --- a/hack/build/install-matrix-deps.sh +++ b/hack/build/install-matrix-deps.sh @@ -2,4 +2,4 @@ set -e go install github.com/google/go-containerregistry/cmd/crane@v0.20.2 -pip3 install -r requirements.txt +uv sync diff --git a/hack/code/format.sh b/hack/code/format.sh index a46f1bb6..baeb5454 100755 --- a/hack/code/format.sh +++ b/hack/code/format.sh @@ -22,12 +22,12 @@ if [ -n "${CHECK}" ]; then # shellcheck disable=SC2086 # word-splitting the file list is intended shfmt -d ${SH_FILES} || RC=1 # shellcheck disable=SC2086 - black --check ${PY_FILES} || RC=1 + uv tool run black --check ${PY_FILES} --target-version py314 || RC=1 else # shellcheck disable=SC2086 shfmt -w ${SH_FILES} # shellcheck disable=SC2086 - black ${PY_FILES} + uv tool run black ${PY_FILES} --target-version py314 fi # The linter has no autofix, so it runs as a check in both modes. diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..450225a1 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,28 @@ +[project] +name = "linux-kernel-oci" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +authors = [ + { name = "Marly Salazar", email = "marly@edera.dev" } +] +requires-python = ">=3.14" +dependencies = [ + "packaging>=26.3", + "pyyaml>=6.0.3", +] + +[project.scripts] +linux-kernel-oci = "linux_kernel_oci:main" + +[build-system] +requires = ["uv_build>=0.12.7,<0.13.0"] +build-backend = "uv_build" + +[dependency-groups] +dev = [ + "black==26.5.1", +] + +[tool.uv] +package = false diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..63cd936d --- /dev/null +++ b/uv.lock @@ -0,0 +1,138 @@ +version = 1 +revision = 3 +requires-python = ">=3.14" + +[[package]] +name = "black" +version = "26.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "mypy-extensions" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "platformdirs" }, + { name = "pytokens" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/37/5628dd55bf2b34257fc7603f0fe97c40e3aaf24265f416a9c85c95ca1436/black-26.5.1.tar.gz", hash = "sha256:dd321f668053961824bcc1be1cc1df748b2d7e4fa28086b08331e577b0100a73", size = 679439, upload-time = "2026-05-18T16:53:36.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/16/a8da8eb208c51c7f4ce74609a45d0dcc6d8a2141e45e81ee5289d1bb0d59/black-26.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e88976690a64b0af98312ca958415849cb42423423c5f2ee74af4b49a97a2168", size = 2004800, upload-time = "2026-05-18T17:05:38.182Z" }, + { url = "https://files.pythonhosted.org/packages/11/8a/a479296a19e383b70a725882a6cf3d786540601ff03cabbaaf1cce864c5a/black-26.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32d5ea7f6c8bdfa6e648326ebca1f02b0764e2a029edc6f8dce2627e19d468c3", size = 1815576, upload-time = "2026-05-18T17:05:40.309Z" }, + { url = "https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea8d16dc41655aa113cd64665e7219446cd7e4ff2248d7178eaa905190c86b18", size = 1877927, upload-time = "2026-05-18T17:05:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/66/76/302e313964bcff7e28df329d39f84f5270095730d85ff0acc260610a0d82/black-26.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:577f21094ea469ef92ec1adaf2c9441a226d2144d01a5be2fa823cecf6543e50", size = 1511860, upload-time = "2026-05-18T17:05:43.943Z" }, + { url = "https://files.pythonhosted.org/packages/27/4e/a3827e35e0e567f9f9ee59e2a0ab979267dca98718f25547ca8c6733afd4/black-26.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:ed1a20af114c301a0269bf01163d51dbef72737fd65f850001e7cbe7f3c7abae", size = 1316632, upload-time = "2026-05-18T17:05:45.521Z" }, + { url = "https://files.pythonhosted.org/packages/94/51/f975cae76d44274cc2868dc9040ac5d58d464784610234455b4e7b19c6ef/black-26.5.1-py3-none-any.whl", hash = "sha256:4ed7f7da04046d2e488437170797d3b4a4ad83906683bcb7dfc68b673bbce5e2", size = 213693, upload-time = "2026-05-18T16:53:33.964Z" }, +] + +[[package]] +name = "click" +version = "8.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" }, +] + +[[package]] +name = "linux-kernel-oci" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "packaging" }, + { name = "pyyaml" }, +] + +[package.dev-dependencies] +dev = [ + { name = "black" }, +] + +[package.metadata] +requires-dist = [ + { name = "packaging", specifier = ">=26.3" }, + { name = "pyyaml", specifier = ">=6.0.3" }, +] + +[package.metadata.requires-dev] +dev = [{ name = "black", specifier = "==26.5.1" }] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/b7/802a56eca9f2fac455b8bab5375a2647b0f0e14a2cd63ef077de3c4a7658/platformdirs-4.11.7.tar.gz", hash = "sha256:4f41487eeeeeb07f3a6625e61d9bc0ae6809f92d3386dbd74392fbb76108104d", size = 35127, upload-time = "2026-09-01T13:35:10.502Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/6e/80993e10a0482f630cef528635789233224f36b1ffd11592aa15d13ff9ce/platformdirs-4.11.7-py3-none-any.whl", hash = "sha256:8a02cb259042c79d1cd0450facc2fe6dc9d303ae7901afbe33bf8ea0b188cef6", size = 23938, upload-time = "2026-09-01T13:35:09.02Z" }, +] + +[[package]] +name = "pytokens" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/34/b4e015b99031667a7b960f888889c5bd34ef585c85e1cb56a594b92836ac/pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", size = 23015, upload-time = "2026-01-30T01:03:45.924Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/a7/b470f672e6fc5fee0a01d9e75005a0e617e162381974213a945fcd274843/pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321", size = 160821, upload-time = "2026-01-30T01:03:19.684Z" }, + { url = "https://files.pythonhosted.org/packages/80/98/e83a36fe8d170c911f864bfded690d2542bfcfacb9c649d11a9e6eb9dc41/pytokens-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa", size = 254263, upload-time = "2026-01-30T01:03:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d", size = 268071, upload-time = "2026-01-30T01:03:21.888Z" }, + { url = "https://files.pythonhosted.org/packages/da/79/76e6d09ae19c99404656d7db9c35dfd20f2086f3eb6ecb496b5b31163bad/pytokens-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324", size = 271716, upload-time = "2026-01-30T01:03:23.633Z" }, + { url = "https://files.pythonhosted.org/packages/79/37/482e55fa1602e0a7ff012661d8c946bafdc05e480ea5a32f4f7e336d4aa9/pytokens-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9", size = 104539, upload-time = "2026-01-30T01:03:24.788Z" }, + { url = "https://files.pythonhosted.org/packages/30/e8/20e7db907c23f3d63b0be3b8a4fd1927f6da2395f5bcc7f72242bb963dfe/pytokens-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb", size = 168474, upload-time = "2026-01-30T01:03:26.428Z" }, + { url = "https://files.pythonhosted.org/packages/d6/81/88a95ee9fafdd8f5f3452107748fd04c24930d500b9aba9738f3ade642cc/pytokens-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3", size = 290473, upload-time = "2026-01-30T01:03:27.415Z" }, + { url = "https://files.pythonhosted.org/packages/cf/35/3aa899645e29b6375b4aed9f8d21df219e7c958c4c186b465e42ee0a06bf/pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", size = 303485, upload-time = "2026-01-30T01:03:28.558Z" }, + { url = "https://files.pythonhosted.org/packages/52/a0/07907b6ff512674d9b201859f7d212298c44933633c946703a20c25e9d81/pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", size = 306698, upload-time = "2026-01-30T01:03:29.653Z" }, + { url = "https://files.pythonhosted.org/packages/39/2a/cbbf9250020a4a8dd53ba83a46c097b69e5eb49dd14e708f496f548c6612/pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", size = 116287, upload-time = "2026-01-30T01:03:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +]