diff --git a/dev-python/prefab-ui/Manifest b/dev-python/prefab-ui/Manifest index 51ce0a1412..4bd021fb04 100644 --- a/dev-python/prefab-ui/Manifest +++ b/dev-python/prefab-ui/Manifest @@ -1,3 +1,5 @@ DIST prefab_ui-0.14.1.tar.gz 3897953 BLAKE2B 7a873dbe6a592d9a37eea6b393e44abb1e30e08599099dfb712ab422955455f4c0a69fe1b6c81b6e8bfd82ac2917bcd32b88b4622142dc8cfaeadbf9860b149a SHA512 f31063972d65d3f7b3c3ab6fe66b40a037712cf5cdd7c553f2d8c2a7ee61d4da74b1b1885664438202c50cb7aa595a29e973f4ab39215a4f2cd883f1bbbc0aac +DIST prefab_ui-0.19.2.tar.gz 4085583 BLAKE2B 6d5fdd07ae760a22b7a75a6b37fef50555a3128c2af7bc5504581afc1a9d89006c5fb85531f1926f940baafb6069a9a0aca491ac8659cd56b9d4a921bba940b4 SHA512 f1d384ae6ea753cf15a3956c6b5a94e95571a3f432672761c02c3fc831f5215240603d0c74e3eb96da5e0a06c05066c3482eadc99c72e7e7e2f235a90e99a720 +DIST prefab_ui-0.20.2.tar.gz 4118979 BLAKE2B f1a6bc31a7c16570a5974504e0d126268ab0d12d36086f50b4f2222f7de0a0d65f26e40cde35de9811b6c255226c2d028e08d9a29f3bda417c8931fe1861e6a8 SHA512 1db4144c8e706485c1c4e5152bb9c3475e80bd9e7fafba752c5aa682f20585dbb0edbc5c6a1431c8c4c64524f27d0b8dba5654cdc8654bb098f3ddbb19ad4ff0 DIST prefab_ui-pyodide-v2026.03.28.sha256 437 BLAKE2B d314f804ae6b0b099f4336cc3adbe1df7951015dbaac2f12aa07d9308361f7a2a419169d4d0544fa439b755dd0f79b6234b4918d49328e7a3266ff1f577506b7 SHA512 4f3fec7775aecba2a1d67b0a9b4961ee9f09e95dd945c4e65cdb1786a97bb763337b4340e0734a7ef7f1c89394d5c6e73171068fc3504f867018d1baf59909a8 DIST prefab_ui-sandbox-v2026.03.28.tar.xz 6024436 BLAKE2B 27d83d72cf356715d96bce53853399624cef59a215e8a2ca42a54e79586e2a7c8ffd8fa9585236ec4be99eb0617ea725fc6b45302d3420633fc72f6aa8d4ab8a SHA512 c10e0ce3bc2f7052b17767054037ba97cf8faab0b6eab0d1099fb2a2cff43053bcbaa032b76e1da966dbf14e8715bc1152e063f62df71e9945978d23f0425ea8 diff --git a/dev-python/prefab-ui/prefab-ui-0.19.2.ebuild b/dev-python/prefab-ui/prefab-ui-0.19.2.ebuild new file mode 100644 index 0000000000..c70d2e95cc --- /dev/null +++ b/dev-python/prefab-ui/prefab-ui-0.19.2.ebuild @@ -0,0 +1,102 @@ +# Copyright 2026 Gentoo Authors +# Distributed under the terms of the Apache License 2.0 + +EAPI=8 + +PYTHON_COMPAT=( python3_{12..14} ) +DISTUTILS_USE_PEP517=hatchling +inherit distutils-r1 pypi + +DESCRIPTION="The agentic frontend framework that even humans can use" +HOMEPAGE=" + https://prefab.prefect.io/ + https://github.com/PrefectHQ/prefab + https://pypi.org/project/prefab-ui/ +" + +# prefab-ui uses Pyodide (Wasm CPython) within Deno for its sandbox. +# We vendor both the Deno runtime dependencies and the Wasm Python wheels +# to allow the test suite to execute inside the Portage network sandbox. +# +# Sandbox vendor tarball contents and checksums generated via: +# src/prefab_ui/sandbox $ deno cache --vendor --lock=deno.lock runner.js +# ... and: +# $ u="https://cdn.jsdelivr.net/pyodide/v0.27.4/full"; \ +# mkdir pyodide_packages && cd pyodide_packages && wget -q "$u/pyodide-lock.json" && \ +# python -c 'import json, sys; pkgs=set(sys.argv[1].split()); f=sys.stderr; \ +# [(print(v["file_name"]), f.write(v["sha256"] + " " + v["file_name"] + "\n")) \ +# for k, v in json.load(sys.stdin)["packages"].items() if k in pkgs]' \ +# "annotated-types pydantic pydantic-core typing-extensions" \ +# ../checksums.sha256 | xargs -I {} wget -q "$u/{}" + +# Vendored test dependencies +VD_TAG=2026.03.28.0 +VD_BASE_URI="https://github.com/falbrechtskirchinger/overlay-assets/releases/download" +SRC_URI+=" + test? ( + ${VD_BASE_URI}/v${VD_TAG}/${PN//-/_}-sandbox-v${VD_TAG%.*}.tar.xz + ${VD_BASE_URI}/v${VD_TAG}/${PN//-/_}-pyodide-v${VD_TAG%.*}.sha256 + ) +" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64 ~arm64" + +RDEPEND=" + dev-lang/deno-bin + >=dev-python/pydantic-2.11[${PYTHON_USEDEP}] + >=dev-python/cyclopts-4[${PYTHON_USEDEP}] + >=dev-python/rich-13[${PYTHON_USEDEP}] +" +BDEPEND=" + test? ( + dev-python/jsonschema[${PYTHON_USEDEP}] + ) +" + +EPYTEST_PLUGINS=( pytest-{asyncio,timeout} ) +EPYTEST_XDIST=1 +distutils_enable_tests pytest + +src_test() { + local -x DENO_NO_REMOTE=1 + + # Check cache completness + pushd ..>/dev/null || die + echo '{"vendor": true}' >deno.json || die + deno cache --lock=deno.lock --frozen \ + "${S}/src/prefab_ui/sandbox/runner.js" || die + popd >/dev/null || die + + # Verify vendored wheels + pushd "${WORKDIR}/pyodide_packages" >/dev/null || die + sha256sum -c "${DISTDIR}/${PN//-/_}-pyodide-v${VD_TAG%.*}.sha256" || die + popd >/dev/null || die + + distutils-r1_src_test +} + +python_test() { + cp -a "${BUILD_DIR}"/{install,test} || die + local -x PATH=${BUILD_DIR}/test/usr/bin:${PATH} + + local base_dir="${BUILD_DIR}/test/usr/lib/${EPYTHON}" + local sandbox_dir="${base_dir}/site-packages/prefab_ui/sandbox" + + cp -a "${S}/skills" "${base_dir}" || die + + # Copy vendored Deno dependencies + cp -a \ + "${WORKDIR}/deno."{lock,json} \ + "${WORKDIR}/node_modules" \ + "${WORKDIR}/vendor" "${sandbox_dir}/" || die + # Copy vendored wheels + cp -a "${WORKDIR}/pyodide_packages/"* "${sandbox_dir}/node_modules/pyodide/" || die + + # Show full error messages from Pyodide + sed -i 's/err\[-1000:\]/err/' "${sandbox_dir}/_pyodide.py" || die + + local -x DENO_NO_REMOTE=1 + epytest +} diff --git a/dev-python/prefab-ui/prefab-ui-0.20.2.ebuild b/dev-python/prefab-ui/prefab-ui-0.20.2.ebuild new file mode 100644 index 0000000000..c70d2e95cc --- /dev/null +++ b/dev-python/prefab-ui/prefab-ui-0.20.2.ebuild @@ -0,0 +1,102 @@ +# Copyright 2026 Gentoo Authors +# Distributed under the terms of the Apache License 2.0 + +EAPI=8 + +PYTHON_COMPAT=( python3_{12..14} ) +DISTUTILS_USE_PEP517=hatchling +inherit distutils-r1 pypi + +DESCRIPTION="The agentic frontend framework that even humans can use" +HOMEPAGE=" + https://prefab.prefect.io/ + https://github.com/PrefectHQ/prefab + https://pypi.org/project/prefab-ui/ +" + +# prefab-ui uses Pyodide (Wasm CPython) within Deno for its sandbox. +# We vendor both the Deno runtime dependencies and the Wasm Python wheels +# to allow the test suite to execute inside the Portage network sandbox. +# +# Sandbox vendor tarball contents and checksums generated via: +# src/prefab_ui/sandbox $ deno cache --vendor --lock=deno.lock runner.js +# ... and: +# $ u="https://cdn.jsdelivr.net/pyodide/v0.27.4/full"; \ +# mkdir pyodide_packages && cd pyodide_packages && wget -q "$u/pyodide-lock.json" && \ +# python -c 'import json, sys; pkgs=set(sys.argv[1].split()); f=sys.stderr; \ +# [(print(v["file_name"]), f.write(v["sha256"] + " " + v["file_name"] + "\n")) \ +# for k, v in json.load(sys.stdin)["packages"].items() if k in pkgs]' \ +# "annotated-types pydantic pydantic-core typing-extensions" \ +# ../checksums.sha256 | xargs -I {} wget -q "$u/{}" + +# Vendored test dependencies +VD_TAG=2026.03.28.0 +VD_BASE_URI="https://github.com/falbrechtskirchinger/overlay-assets/releases/download" +SRC_URI+=" + test? ( + ${VD_BASE_URI}/v${VD_TAG}/${PN//-/_}-sandbox-v${VD_TAG%.*}.tar.xz + ${VD_BASE_URI}/v${VD_TAG}/${PN//-/_}-pyodide-v${VD_TAG%.*}.sha256 + ) +" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64 ~arm64" + +RDEPEND=" + dev-lang/deno-bin + >=dev-python/pydantic-2.11[${PYTHON_USEDEP}] + >=dev-python/cyclopts-4[${PYTHON_USEDEP}] + >=dev-python/rich-13[${PYTHON_USEDEP}] +" +BDEPEND=" + test? ( + dev-python/jsonschema[${PYTHON_USEDEP}] + ) +" + +EPYTEST_PLUGINS=( pytest-{asyncio,timeout} ) +EPYTEST_XDIST=1 +distutils_enable_tests pytest + +src_test() { + local -x DENO_NO_REMOTE=1 + + # Check cache completness + pushd ..>/dev/null || die + echo '{"vendor": true}' >deno.json || die + deno cache --lock=deno.lock --frozen \ + "${S}/src/prefab_ui/sandbox/runner.js" || die + popd >/dev/null || die + + # Verify vendored wheels + pushd "${WORKDIR}/pyodide_packages" >/dev/null || die + sha256sum -c "${DISTDIR}/${PN//-/_}-pyodide-v${VD_TAG%.*}.sha256" || die + popd >/dev/null || die + + distutils-r1_src_test +} + +python_test() { + cp -a "${BUILD_DIR}"/{install,test} || die + local -x PATH=${BUILD_DIR}/test/usr/bin:${PATH} + + local base_dir="${BUILD_DIR}/test/usr/lib/${EPYTHON}" + local sandbox_dir="${base_dir}/site-packages/prefab_ui/sandbox" + + cp -a "${S}/skills" "${base_dir}" || die + + # Copy vendored Deno dependencies + cp -a \ + "${WORKDIR}/deno."{lock,json} \ + "${WORKDIR}/node_modules" \ + "${WORKDIR}/vendor" "${sandbox_dir}/" || die + # Copy vendored wheels + cp -a "${WORKDIR}/pyodide_packages/"* "${sandbox_dir}/node_modules/pyodide/" || die + + # Show full error messages from Pyodide + sed -i 's/err\[-1000:\]/err/' "${sandbox_dir}/_pyodide.py" || die + + local -x DENO_NO_REMOTE=1 + epytest +}